Now mobs actually won't move/fall when outside of the loaded and meshed area. Fix to mob spawning coordinates in simple biome. Also update Voxelman to grab the is_position_walkable fix.

This commit is contained in:
Relintai 2020-03-04 16:38:18 +01:00
parent 0258425ef3
commit f2ac08f7bc
4 changed files with 66 additions and 4 deletions

2
HEADS
View File

@ -1 +1 @@
{"engine": {"3.2": "f4e3701893bdf6b304ee114745def2f8ac4aa822", "master": "8c73e813134001e575b6f59e3b0100471c007410"}, "world_generator": {"master": "a08917370cdef0884042bdb49fb80ece0b2e76ec"}, "entity_spell_system": {"master": "3e10779dbc5258d1e1b08eab287189f9c1ccec64"}, "ui_extensions": {"master": "38acc650db260a831dc26ca96fe9d9a087230bdc"}, "voxelman": {"master": "ac75c78be10e0f7d60b7a6f26189523347732276"}, "texture_packer": {"master": "b17c174906f84de93d84aa60d010ffe603efaa28"}, "fastnoise": {"master": "41b7ea05a1f7aa2b8ecddaa1fd739e64d6970f7e"}, "mesh_data_resource": {"master": "4bda19b12be2c2a79a6121de6d22e48f3934e726"}, "procedural_animations": {"master": "ba464ef04500aa01b2638cf1f890f3f6582ead84"}, "ess_data": {"master": "3bd637fdd3304b64a18287a49a6b7387acf2f5de"}} {"engine": {"3.2": "0d5e483a90c41c433056b8cf6e4e8def6316690f", "master": "8c73e813134001e575b6f59e3b0100471c007410"}, "world_generator": {"master": "a08917370cdef0884042bdb49fb80ece0b2e76ec"}, "entity_spell_system": {"master": "3e10779dbc5258d1e1b08eab287189f9c1ccec64"}, "ui_extensions": {"master": "38acc650db260a831dc26ca96fe9d9a087230bdc"}, "voxelman": {"master": "fbd2903477bc810fba8abec48f9cd6f9252e2fe5"}, "texture_packer": {"master": "b17c174906f84de93d84aa60d010ffe603efaa28"}, "fastnoise": {"master": "41b7ea05a1f7aa2b8ecddaa1fd739e64d6970f7e"}, "mesh_data_resource": {"master": "4bda19b12be2c2a79a6121de6d22e48f3934e726"}, "procedural_animations": {"master": "ba464ef04500aa01b2638cf1f890f3f6582ead84"}, "ess_data": {"master": "3bd637fdd3304b64a18287a49a6b7387acf2f5de"}}

View File

@ -64,6 +64,24 @@ func _ready() -> void:
set_process(true) set_process(true)
set_physics_process(true) set_physics_process(true)
func _enter_tree():
var world : VoxelWorld = get_node("..") as VoxelWorld
if world != null:
if not world.is_position_walkable(get_body().transform.origin):
world.connect("chunk_mesh_generation_finished", self, "chunk_mesh_generation_finished", [], CONNECT_DEFERRED)
set_process(false)
set_physics_process(false)
func chunk_mesh_generation_finished(chunk):
var world : VoxelWorld = get_node("..") as VoxelWorld
if world.is_position_walkable(get_body().transform.origin):
world.disconnect("chunk_mesh_generation_finished", self, "chunk_mesh_generation_finished")
set_process(true)
set_physics_process(true)
func _process(delta : float) -> void: func _process(delta : float) -> void:
if dead: if dead:
death_timer += delta death_timer += delta

View File

@ -59,6 +59,7 @@ adjustment_enabled = true
data_margin_start = 1 data_margin_start = 1
data_margin_end = 2 data_margin_end = 2
max_concurrent_generations = 4 max_concurrent_generations = 4
max_frame_chunk_build_steps = 1
library = ExtResource( 2 ) library = ExtResource( 2 )
level_generator = SubResource( 1 ) level_generator = SubResource( 1 )
voxel_scale = 1.6 voxel_scale = 1.6

View File

@ -39,6 +39,9 @@ var _editor_generate : bool
var _player_file_name : String var _player_file_name : String
var _player : Entity var _player : Entity
const VIS_UPDATE_INTERVAL = 5
var vis_update : float = 0
func _enter_tree(): func _enter_tree():
for ch in get_children(): for ch in get_children():
if ch is VoxelChunk: if ch is VoxelChunk:
@ -51,8 +54,6 @@ func _enter_tree():
add_chunk(c, c.position_x, c.position_y, c.position_z) add_chunk(c, c.position_x, c.position_y, c.position_z)
c.build_deferred() c.build_deferred()
if generate_on_ready and not Engine.is_editor_hint(): if generate_on_ready and not Engine.is_editor_hint():
if level_generator != null: if level_generator != null:
@ -60,6 +61,46 @@ func _enter_tree():
spawn() spawn()
func _process(delta):
if _player == null:
set_process(false)
return
vis_update += delta
if vis_update >= VIS_UPDATE_INTERVAL:
vis_update = 0
var ppos : Vector3 = _player.get_body().transform.origin
var cpos : Vector3 = ppos
cpos.x = int(cpos.x / (chunk_size_x * voxel_scale))
cpos.y = int(cpos.y / (chunk_size_y * voxel_scale))
cpos.z = int(cpos.z / (chunk_size_z * voxel_scale))
var count : int = get_chunk_count()
var i : int = 0
while i < count:
var c : VoxelChunk = get_chunk_index(i)
var l : float = (Vector2(cpos.x, cpos.z) - Vector2(c.position_x, c.position_z)).length()
if l > chunk_spawn_range + 2:
# print("despawn " + str(Vector3(c.position_x, c.position_y, c.position_z)))
remove_chunk_index(i)
c.queue_free()
i -= 1
count -= 1
i += 1
for x in range(-chunk_spawn_range + int(cpos.x), chunk_spawn_range + int(cpos.x)):
for z in range(-chunk_spawn_range + int(cpos.z), chunk_spawn_range + int(cpos.z)):
for y in range(-1, 2):
if not has_chunk(x, y, z):
# print("spawn " + str(Vector3(x, y, z)))
create_chunk(x, y, z)
#func _process(delta : float) -> void: #func _process(delta : float) -> void:
# if not generation_queue.empty(): # if not generation_queue.empty():
# var chunk : VoxelChunk = generation_queue.front() # var chunk : VoxelChunk = generation_queue.front()
@ -128,7 +169,7 @@ func _create_chunk(x : int, y : int, z : int, pchunk : Node) -> VoxelChunk:
#chunk.meshing_create_collider = false #chunk.meshing_create_collider = false
chunk.lod_size = 1 chunk.lod_size = 1
# print("added " + str(Vector3(x, y, z)))
return ._create_chunk(x, y, z, chunk) return ._create_chunk(x, y, z, chunk)
func spawn() -> void: func spawn() -> void:
@ -199,6 +240,8 @@ func load_character(file_name : String) -> void:
spawn() spawn()
set_process(true)
func needs_loading_screen() -> bool: func needs_loading_screen() -> bool:
return show_loading_screen return show_loading_screen