Tree collisions and highlights
This commit is contained in:
parent
57602adddb
commit
7255cbdf64
17 changed files with 231 additions and 2251 deletions
|
|
@ -463,15 +463,14 @@ anchor_bottom = 1.0
|
|||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
stretch = true
|
||||
stretch_shrink = 2
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"]
|
||||
transparent_bg = true
|
||||
handle_input_locally = false
|
||||
size = Vector2i(576, 324)
|
||||
size = Vector2i(1152, 648)
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="Player" type="CharacterBody3D" parent="SubViewportContainer/SubViewport"]
|
||||
[node name="Player" type="CharacterBody3D" parent="SubViewportContainer/SubViewport" groups=["player"]]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("1_d602n")
|
||||
|
||||
|
|
@ -741,7 +740,7 @@ transform = Transform3D(1, 0, 0, 0, 1, -1.49012e-07, 0, 1.19209e-07, 1, 0.041054
|
|||
projection = 1
|
||||
current = true
|
||||
size = 4.0
|
||||
near = 0.01
|
||||
near = 0.005
|
||||
far = 100.0
|
||||
|
||||
[node name="PostProcessing" type="MeshInstance3D" parent="SubViewportContainer/SubViewport/Player/CameraPivot/Camera3D"]
|
||||
|
|
@ -772,7 +771,7 @@ draw_pass_1 = SubResource("QuadMesh_hvb1l")
|
|||
[node name="OmniLight3D" type="OmniLight3D" parent="SubViewportContainer/SubViewport/VFX/Fire"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.000509977, 0.121094, -0.00151992)
|
||||
light_color = Color(0.89, 0.461613, 0.2136, 1)
|
||||
light_energy = 0.721247
|
||||
light_energy = 0.849132
|
||||
light_indirect_energy = 1.084
|
||||
light_volumetric_fog_energy = 3.764
|
||||
light_size = 0.105
|
||||
|
|
@ -801,7 +800,6 @@ ground_tile = ExtResource("25_caaui")
|
|||
|
||||
[node name="tent-canvas2" parent="." instance=ExtResource("23_5r2bu")]
|
||||
transform = Transform3D(0.964438, 0, -0.264311, 0, 1, 0, 0.264311, 0, 0.964438, 1.49756, 1.86265e-09, -3.10828)
|
||||
visible = false
|
||||
|
||||
[node name="UISubViewportContainer" type="SubViewportContainer" parent="."]
|
||||
anchors_preset = 15
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -4,21 +4,18 @@ extends Node3D
|
|||
@export var map_width: int = Global.map_width
|
||||
@export var map_height: int = Global.map_height
|
||||
@export var tile_size: float = 2.0
|
||||
@export var chunk_size: int = 5
|
||||
@export var chunk_size: int = 2
|
||||
@export var view_distance: int = 2
|
||||
@export var tiles_per_frame: int = 5 # How many tiles to create per frame
|
||||
@export var tiles_per_frame: int = 3 # How many tiles to create per frame
|
||||
var loaded_chunks: Dictionary = {}
|
||||
var player_position: Vector3
|
||||
var last_chunk_pos: Vector2i = Vector2i(-999, -999)
|
||||
var loading_chunks: Dictionary = {} # Track chunks currently being loaded
|
||||
|
||||
func _ready() -> void:
|
||||
Log.pr('Testing optimized tile map generation')
|
||||
create_tiles_chunked()
|
||||
|
||||
func create_tiles_chunked() -> void:
|
||||
Log.pr('Setting up chunked tile system...')
|
||||
|
||||
var player = %Player
|
||||
if player:
|
||||
player_position = player.global_position
|
||||
|
|
@ -48,10 +45,8 @@ func update_chunks(player_pos: Vector3) -> void:
|
|||
chunks_to_load.append(current_chunk + Vector2i(x, z))
|
||||
|
||||
# LOADING new chunks
|
||||
Log.pr("Chunks to load: ", chunks_to_load.size())
|
||||
for chunk_pos in chunks_to_load:
|
||||
if chunk_pos not in loaded_chunks and chunk_pos not in loading_chunks:
|
||||
Log.pr("Loading new: ", chunk_pos)
|
||||
loading_chunks[chunk_pos] = true
|
||||
load_chunk_async(chunk_pos)
|
||||
|
||||
|
|
@ -61,9 +56,7 @@ func update_chunks(player_pos: Vector3) -> void:
|
|||
if chunk_pos not in chunks_to_load:
|
||||
chunks_to_unload.append(chunk_pos)
|
||||
|
||||
Log.pr("Chunks to unload: ", chunks_to_unload.size())
|
||||
for chunk_pos in chunks_to_unload:
|
||||
Log.pr("Unloading: ", chunk_pos)
|
||||
unload_chunk(chunk_pos)
|
||||
|
||||
func load_chunk_async(chunk_pos: Vector2i) -> void:
|
||||
|
|
@ -72,8 +65,6 @@ func load_chunk_async(chunk_pos: Vector2i) -> void:
|
|||
loading_chunks.erase(chunk_pos)
|
||||
return
|
||||
|
||||
var orphans_before = Performance.get_monitor(Performance.OBJECT_ORPHAN_NODE_COUNT)
|
||||
|
||||
var chunk_node = Node3D.new()
|
||||
chunk_node.name = "Chunk_%d_%d" % [chunk_pos.x, chunk_pos.y]
|
||||
add_child(chunk_node)
|
||||
|
|
@ -81,7 +72,7 @@ func load_chunk_async(chunk_pos: Vector2i) -> void:
|
|||
var start_x = chunk_pos.x * chunk_size * tile_size - (chunk_size * tile_size) / 2.0
|
||||
var start_z = chunk_pos.y * chunk_size * tile_size - (chunk_size * tile_size) / 2.0
|
||||
|
||||
var tiles_created = 0
|
||||
#var tiles_created = 0
|
||||
var tiles_this_frame = 0
|
||||
|
||||
for x in range(chunk_size):
|
||||
|
|
@ -95,42 +86,20 @@ func load_chunk_async(chunk_pos: Vector2i) -> void:
|
|||
)
|
||||
chunk_node.add_child(tile_instance)
|
||||
|
||||
tiles_created += 1
|
||||
#tiles_created += 1
|
||||
tiles_this_frame += 1
|
||||
|
||||
# Yield after creating a certain number of tiles
|
||||
if tiles_this_frame >= tiles_per_frame:
|
||||
tiles_this_frame = 0
|
||||
await get_tree().process_frame
|
||||
|
||||
Log.pr("Created ", tiles_created, " tiles in chunk ", chunk_pos)
|
||||
|
||||
loaded_chunks[chunk_pos] = chunk_node
|
||||
loading_chunks.erase(chunk_pos)
|
||||
|
||||
var orphans_after = Performance.get_monitor(Performance.OBJECT_ORPHAN_NODE_COUNT)
|
||||
Log.pr("Orphans during chunk load: ", orphans_after - orphans_before)
|
||||
|
||||
# In your TileGround script, add this debugging to unload_chunk():
|
||||
func unload_chunk(chunk_pos: Vector2i) -> void:
|
||||
if chunk_pos in loaded_chunks:
|
||||
Log.pr("Unloading chunk: ", chunk_pos)
|
||||
|
||||
var chunk_node = loaded_chunks[chunk_pos]
|
||||
var orphans_before = Performance.get_monitor(Performance.OBJECT_ORPHAN_NODE_COUNT)
|
||||
var nodes_before = Performance.get_monitor(Performance.OBJECT_NODE_COUNT)
|
||||
|
||||
# Count children before cleanup
|
||||
var child_count = chunk_node.get_child_count()
|
||||
Log.pr("Chunk has ", child_count, " children")
|
||||
|
||||
chunk_node.queue_free()
|
||||
loaded_chunks.erase(chunk_pos)
|
||||
|
||||
# Check immediately after
|
||||
await get_tree().process_frame
|
||||
|
||||
var orphans_after = Performance.get_monitor(Performance.OBJECT_ORPHAN_NODE_COUNT)
|
||||
var nodes_after = Performance.get_monitor(Performance.OBJECT_NODE_COUNT)
|
||||
|
||||
Log.pr("Orphans created: ", orphans_after - orphans_before)
|
||||
Log.pr("Nodes remaining: ", nodes_after - nodes_before)
|
||||
|
|
@ -62,7 +62,9 @@ func get_object_debug_text() -> String:
|
|||
var static_max = Performance.get_monitor(Performance.MEMORY_STATIC_MAX)
|
||||
|
||||
text += "Static Mem: " + format_bytes(static_mem) + "\n"
|
||||
text += "Peak Mem: " + format_bytes(static_max)
|
||||
text += "Peak Mem: " + format_bytes(static_max) + "\n"
|
||||
|
||||
text += "Trees: " + str(get_tree().get_nodes_in_group("tree").size())
|
||||
|
||||
return text
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue