65 lines
1.5 KiB
GDScript3
65 lines
1.5 KiB
GDScript3
|
tool
|
||
|
extends "hterrain_chunk.gd"
|
||
|
|
||
|
# I wrote this because Godot has no debug option to show AABBs.
|
||
|
# https://github.com/godotengine/godot/issues/20722
|
||
|
|
||
|
|
||
|
const DirectMeshInstance = preload("./util/direct_mesh_instance.gd")
|
||
|
const Util = preload("./util/util.gd")
|
||
|
|
||
|
|
||
|
var _debug_cube = null
|
||
|
var _aabb = AABB()
|
||
|
var _parent_transform = Transform()
|
||
|
|
||
|
|
||
|
func _init(p_parent, p_cell_x, p_cell_y, p_material).(p_parent, p_cell_x, p_cell_y, p_material):
|
||
|
var wirecube
|
||
|
if not p_parent.has_meta("debug_wirecube_mesh"):
|
||
|
wirecube = Util.create_wirecube_mesh()
|
||
|
var mat = SpatialMaterial.new()
|
||
|
mat.flags_unshaded = true
|
||
|
wirecube.surface_set_material(0, mat)
|
||
|
p_parent.set_meta("debug_wirecube_mesh", wirecube)
|
||
|
else:
|
||
|
wirecube = p_parent.get_meta("debug_wirecube_mesh")
|
||
|
|
||
|
_debug_cube = DirectMeshInstance.new()
|
||
|
_debug_cube.set_mesh(wirecube)
|
||
|
_debug_cube.set_world(p_parent.get_world())
|
||
|
|
||
|
|
||
|
func enter_world(world):
|
||
|
.enter_world(world)
|
||
|
_debug_cube.enter_world(world)
|
||
|
|
||
|
|
||
|
func exit_world():
|
||
|
.exit_world()
|
||
|
_debug_cube.exit_world()
|
||
|
|
||
|
|
||
|
func parent_transform_changed(parent_transform):
|
||
|
.parent_transform_changed(parent_transform)
|
||
|
_parent_transform = parent_transform
|
||
|
_debug_cube.set_transform(_compute_aabb())
|
||
|
|
||
|
|
||
|
func set_visible(visible):
|
||
|
.set_visible(visible)
|
||
|
_debug_cube.set_visible(visible)
|
||
|
|
||
|
|
||
|
func set_aabb(aabb):
|
||
|
.set_aabb(aabb)
|
||
|
#aabb.position.y += 0.2*randf()
|
||
|
_aabb = aabb
|
||
|
_debug_cube.set_transform(_compute_aabb())
|
||
|
|
||
|
|
||
|
func _compute_aabb():
|
||
|
var pos = Vector3(cell_origin_x, 0, cell_origin_y)
|
||
|
return _parent_transform * Transform(Basis().scaled(_aabb.size), pos + _aabb.position)
|
||
|
|