Cleaned up a few more scripts
parent
2d609c08f6
commit
dcc32eb030
|
@ -1,14 +1,10 @@
|
|||
extends Node
|
||||
|
||||
onready var _head = get_parent().get_node("Camera")
|
||||
onready var _terrain = get_parent().get_parent().get_node("VoxelTerrain")
|
||||
|
||||
var _action_place = false
|
||||
var _action_remove = false
|
||||
var _head = null
|
||||
var _terrain = null
|
||||
|
||||
|
||||
func _ready():
|
||||
_head = get_parent().get_node("Camera")
|
||||
_terrain = get_parent().get_parent().get_node("VoxelTerrain")
|
||||
|
||||
|
||||
func _input(event):
|
||||
|
@ -19,20 +15,8 @@ func _input(event):
|
|||
elif event.button_index == BUTTON_RIGHT:
|
||||
_action_remove = true
|
||||
|
||||
elif event is InputEventKey:
|
||||
if event.pressed:
|
||||
if event.scancode == KEY_P:
|
||||
print_map_slice()
|
||||
elif event.scancode == KEY_K:
|
||||
var p = Spatial.new()
|
||||
p.translation = get_parent().translation
|
||||
print("Freezing viewer tracking at ", p.translation)
|
||||
get_parent().get_parent().add_child(p)
|
||||
_terrain.set_viewer_path(p.get_path())
|
||||
|
||||
|
||||
func _process(delta):
|
||||
|
||||
var head_trans = _head.global_transform
|
||||
var pointed_pos = head_trans.origin - 6.0 * head_trans.basis.z
|
||||
|
||||
|
@ -56,59 +40,3 @@ func do_sphere(center, fradius, add):
|
|||
vt.mode = VoxelTool.MODE_REMOVE
|
||||
vt.do_sphere(center, fradius)
|
||||
|
||||
|
||||
func print_map_slice():
|
||||
var storage = _terrain.get_storage()
|
||||
var h = 8
|
||||
var r = 16
|
||||
var pos = _head.global_transform.origin
|
||||
var buffer = VoxelBuffer.new()
|
||||
buffer.create(2*r, h, 2*r)
|
||||
var channel = VoxelBuffer.CHANNEL_ISOLEVEL
|
||||
|
||||
var minp = pos - Vector3(r, h/2, r)
|
||||
#print("Printing ", minp, " ; ", buffer.get_size())
|
||||
#storage.get_buffer_copy(minp, buffer, channel)
|
||||
|
||||
for rx in buffer.get_size_x():
|
||||
for ry in buffer.get_size_y():
|
||||
for rz in buffer.get_size_z():
|
||||
var x = rx + int(minp.x)
|
||||
var y = ry + int(minp.y)
|
||||
var z = rz + int(minp.z)
|
||||
var v = storage.get_voxel_f(x, y, z, channel)
|
||||
buffer.set_voxel_f(v, rx, ry, rz, channel)
|
||||
|
||||
print("Going to print")
|
||||
print_buffer_to_images(buffer, channel, "isolevel", 10)
|
||||
|
||||
|
||||
static func print_buffer_to_images(voxels, channel, fname, upscale):
|
||||
|
||||
for y in voxels.get_size_y():
|
||||
|
||||
var im = Image.new()
|
||||
im.create(voxels.get_size_x(), voxels.get_size_z(), false, Image.FORMAT_RGB8)
|
||||
|
||||
im.lock()
|
||||
|
||||
for z in voxels.get_size_z():
|
||||
for x in voxels.get_size_x():
|
||||
var r = 0.5 * voxels.get_voxel_f(x, y, z, channel) + 0.5
|
||||
if r < 0.5:
|
||||
im.set_pixel(x, z, Color(r, r, r*0.5 + 0.5))
|
||||
else:
|
||||
im.set_pixel(x, z, Color(r, r, r))
|
||||
|
||||
im.unlock()
|
||||
|
||||
if upscale > 1:
|
||||
im.resize(im.get_width() * upscale, im.get_height() * upscale, Image.INTERPOLATE_NEAREST)
|
||||
|
||||
var fname_png = str(fname, "_", y, ".png")
|
||||
print("Saved ", fname_png)
|
||||
im.save_png(fname_png)
|
||||
|
||||
print("Printed")
|
||||
|
||||
|
||||
|
|
|
@ -1,19 +1,12 @@
|
|||
extends Node
|
||||
|
||||
const Util = preload("res://common/util.gd")
|
||||
|
||||
onready var _terrain = get_node("VoxelTerrain")
|
||||
onready var _avatar = get_node("SpectatorAvatar")
|
||||
onready var _camera = get_node("SpectatorAvatar/Camera")
|
||||
onready var _light = get_node("DirectionalLight")
|
||||
onready var _terrain = $VoxelTerrain
|
||||
onready var _avatar = $SpectatorAvatar
|
||||
onready var _light = $DirectionalLight
|
||||
|
||||
var _process_stats = {}
|
||||
var _displayed_process_stats = {}
|
||||
var _time_before_display_process_stats = 1.0
|
||||
var _block_highlights = []
|
||||
var _first_process_time = -1.0
|
||||
var _first_time_no_blocked_lods = -1.0
|
||||
var _process_count = 0
|
||||
|
||||
const _process_stat_names = [
|
||||
"time_detect_required_blocks",
|
||||
|
@ -25,33 +18,7 @@ const _process_stat_names = [
|
|||
]
|
||||
|
||||
|
||||
func _ready():
|
||||
#test_downscale()
|
||||
pass
|
||||
|
||||
|
||||
static func test_downscale():
|
||||
var vb = VoxelBuffer.new()
|
||||
vb.create(16, 16, 16)
|
||||
var vb2 = VoxelBuffer.new()
|
||||
vb2.create(16, 16, 16)
|
||||
for z in 16:
|
||||
for x in 16:
|
||||
for y in 16:
|
||||
vb.set_voxel_f(2.0 * randf() - 0.1, x, y, z, VoxelBuffer.CHANNEL_SDF)
|
||||
var d = Vector3(x, y, z).distance_to(Vector3(8,8,8)) - 7
|
||||
vb2.set_voxel_f(d, x, y, z, VoxelBuffer.CHANNEL_SDF)
|
||||
vb2.downscale_to(vb, Vector3(), vb2.get_size(), Vector3(0,8,0))
|
||||
var im = vb.debug_print_sdf_top_down()
|
||||
im.save_png("downscale_test.png")
|
||||
im = vb2.debug_print_sdf_top_down()
|
||||
im.save_png("downscale_test_src.png")
|
||||
|
||||
|
||||
func _process(delta):
|
||||
if _first_process_time < 0:
|
||||
_first_process_time = OS.get_ticks_msec()
|
||||
|
||||
var stats = _terrain.get_statistics()
|
||||
|
||||
for i in len(stats.stream.remaining_blocks_per_thread):
|
||||
|
@ -71,13 +38,6 @@ func _process(delta):
|
|||
DDD.set_text("Mesh sort time", stats.updater.sorting_time)
|
||||
DDD.set_text("Position", _avatar.translation)
|
||||
|
||||
if _first_time_no_blocked_lods < 0 and stats.blocked_lods == 0 and _process_count > 200:
|
||||
_first_time_no_blocked_lods = OS.get_ticks_msec()
|
||||
var load_time = _first_time_no_blocked_lods - _first_process_time
|
||||
print("Time to reach full load: ", float(load_time) / 1000.0, " seconds")
|
||||
print("First process time: ", _first_process_time)
|
||||
print(stats)
|
||||
|
||||
for k in _process_stat_names:
|
||||
var v = stats[k]
|
||||
if k in _process_stats:
|
||||
|
@ -94,63 +54,6 @@ func _process(delta):
|
|||
for k in _displayed_process_stats:
|
||||
DDD.set_text(k, _displayed_process_stats[k])
|
||||
|
||||
#debug_pointed_block()
|
||||
#if Input.is_key_pressed(KEY_SPACE):
|
||||
#debug_show_octrees()
|
||||
|
||||
_process_count += 1
|
||||
|
||||
|
||||
func debug_show_octrees():
|
||||
var octrees = _terrain.debug_get_octrees()
|
||||
var octree_side = _terrain.get_block_size() << (_terrain.get_lod_count() - 1)
|
||||
var octree_size = Vector3(1,1,1) * octree_side
|
||||
var r = octree_side * 2
|
||||
var pad = Vector3(1,1,1)
|
||||
var ppos = _camera.global_transform.origin #_avatar.translation
|
||||
for pos in octrees:
|
||||
var wpos = pos * octree_size
|
||||
if ppos.distance_to(wpos) < r:
|
||||
DDD.draw_box(wpos + pad, octree_size - 2 * pad, Color(0,1,0))
|
||||
|
||||
|
||||
func debug_pointed_block():
|
||||
|
||||
var ray_origin = _camera.global_transform.origin
|
||||
var ray_dir = -_camera.global_transform.basis.z
|
||||
var hits = _terrain.debug_raycast_block(ray_origin, ray_dir)
|
||||
|
||||
if len(hits) > 0:
|
||||
var d = hits[0]
|
||||
for k in d:
|
||||
DDD.set_text(str("Pointed block ", k), d[k])
|
||||
|
||||
for mi in _block_highlights:
|
||||
mi.hide()
|
||||
|
||||
for i in len(hits):
|
||||
var d = hits[i]
|
||||
|
||||
var mi
|
||||
if i < len(_block_highlights):
|
||||
mi = _block_highlights[i]
|
||||
else:
|
||||
mi = MeshInstance.new()
|
||||
var mesh = Util.create_wirecube_mesh()
|
||||
mi.mesh = mesh
|
||||
var mat = SpatialMaterial.new()
|
||||
mat.flags_unshaded = true
|
||||
mat.vertex_color_use_as_albedo = true
|
||||
mi.material_override = mat
|
||||
add_child(mi)
|
||||
_block_highlights.append(mi)
|
||||
|
||||
var pad = 0.1 * d.lod
|
||||
var scale = (16 << d.lod)
|
||||
mi.translation = d.position * scale - Vector3(pad, pad, pad)
|
||||
mi.scale = Vector3(scale, scale, scale) + pad * Vector3(2, 2, 2)
|
||||
mi.show()
|
||||
|
||||
|
||||
static func _format_memory(m):
|
||||
var mb = m / 1000000
|
||||
|
@ -161,105 +64,16 @@ static func _format_memory(m):
|
|||
func _input(event):
|
||||
if event is InputEventKey:
|
||||
if event.pressed:
|
||||
match event.scancode:
|
||||
KEY_O:
|
||||
var vp = get_viewport()
|
||||
if vp.debug_draw == Viewport.DEBUG_DRAW_DISABLED:
|
||||
vp.debug_draw = Viewport.DEBUG_DRAW_OVERDRAW
|
||||
else:
|
||||
vp.debug_draw = Viewport.DEBUG_DRAW_DISABLED
|
||||
|
||||
if event.scancode == KEY_M:
|
||||
print("Printing map state")
|
||||
_print_map_state(_terrain, _avatar.global_transform.origin)
|
||||
|
||||
elif event.scancode == KEY_N:
|
||||
pretty_print(_terrain.get_statistics())
|
||||
|
||||
elif event.scancode == KEY_P:
|
||||
get_tree().get_root().print_tree_pretty()
|
||||
|
||||
elif event.scancode == KEY_O:
|
||||
var vp = get_viewport()
|
||||
if vp.debug_draw == Viewport.DEBUG_DRAW_DISABLED:
|
||||
vp.debug_draw = Viewport.DEBUG_DRAW_OVERDRAW
|
||||
else:
|
||||
vp.debug_draw = Viewport.DEBUG_DRAW_DISABLED
|
||||
|
||||
elif event.scancode == KEY_L:
|
||||
_light.shadow_enabled = not _light.shadow_enabled
|
||||
|
||||
|
||||
static func pretty_print(d, depth=0):
|
||||
var indent = ""
|
||||
for i in depth:
|
||||
indent += " "
|
||||
for k in d:
|
||||
var v = d[k]
|
||||
if typeof(v) == TYPE_DICTIONARY:
|
||||
print(indent, k, ": ")
|
||||
pretty_print(v, depth + 1)
|
||||
else:
|
||||
print(indent, k, ": ", d[k])
|
||||
|
||||
|
||||
static func _print_map_state(terrain, avatar_pos):
|
||||
var r = terrain.get_block_region_extent()
|
||||
var im_w = 2 * r
|
||||
var im_h = im_w
|
||||
|
||||
for lod_index in terrain.get_lod_count():
|
||||
var avatar_block_pos = terrain.voxel_to_block_position(avatar_pos, lod_index)
|
||||
|
||||
for y in im_h:
|
||||
var by = avatar_block_pos.y + y - r
|
||||
|
||||
var im = Image.new()
|
||||
im.create(im_w, im_h, false, Image.FORMAT_RGB8)
|
||||
im.fill(Color(0, 0, 0))
|
||||
|
||||
im.lock()
|
||||
|
||||
for z in im_w:
|
||||
for x in im_h:
|
||||
var bx = avatar_block_pos.x + x - r
|
||||
var bz = avatar_block_pos.z + z - r
|
||||
|
||||
var info = terrain.get_block_info(Vector3(bx, by, bz), lod_index)
|
||||
|
||||
var col = Color(0.1, 0.1, 0.1)
|
||||
|
||||
if info.loading == 1:
|
||||
col = Color(0, 0, 0.5)
|
||||
elif info.loading == 2:
|
||||
if info.visible:
|
||||
if info.meshed:
|
||||
col = Color(1, 1, 1)
|
||||
else:
|
||||
col = Color(1, 0, 0)
|
||||
else:
|
||||
if info.meshed:
|
||||
col = Color(0.5, 0.5, 0.5)
|
||||
else:
|
||||
col = Color(0.5, 0.0, 0)
|
||||
|
||||
im.set_pixel(x, z, col)
|
||||
|
||||
im.unlock()
|
||||
|
||||
im.resize(im.get_width() * 16, im.get_height() * 16, Image.INTERPOLATE_NEAREST)
|
||||
|
||||
var fname = str("debug_data/lod", lod_index, "_y", y, ".png")
|
||||
print("Saving ", fname)
|
||||
im.save_png(fname)
|
||||
|
||||
if terrain.has_method("dump_block_history"):
|
||||
var history = terrain.dump_block_history()
|
||||
var json = JSON.print(history)
|
||||
var f = File.new()
|
||||
var fname = "debug_data/block_history.json"
|
||||
print("Saving ", fname)
|
||||
f.open(fname, File.WRITE)
|
||||
f.store_string(json)
|
||||
f.close()
|
||||
|
||||
print("Done")
|
||||
|
||||
|
||||
|
||||
|
||||
KEY_L:
|
||||
# Toggle shadows
|
||||
_light.shadow_enabled = not _light.shadow_enabled
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue