diff --git a/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll b/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll deleted file mode 100644 index 2d345af..0000000 Binary files a/addons/godotsteam/win64/~libgodotsteam.windows.template_debug.x86_64.dll and /dev/null differ diff --git a/core/biome_generator/biome_generator.gd b/core/biome_generator/biome_generator.gd index a0d36a5..e774fee 100644 --- a/core/biome_generator/biome_generator.gd +++ b/core/biome_generator/biome_generator.gd @@ -212,6 +212,17 @@ func _physics_process(_delta: float) -> void: last_pos_train = current_pos _refresh_world(current_pos) +func generate_initial_world_now() -> void: + if rail_path == null or rail_path.train_instance == null: + return + + var train_pos = rail_path.train_instance.global_position + var current_pos = Vector2i(roundi(train_pos.x / chunk_size), roundi(train_pos.z / chunk_size)) + last_pos_train = current_pos + _rebuild_generation_queue(current_pos) + _drain_generation_queue_now() + _drain_wire_queue_now() + func collect_all_chunkinfo(root: Node, list: Array[Node]) -> void: if root == null: return @@ -535,6 +546,20 @@ func _drain_generation_queue() -> void: pending_generation_cells.clear() pending_generation_cursor = 0 +func _drain_generation_queue_now() -> void: + while pending_generation_cursor < pending_generation_cells.size(): + var grid_pos: Vector2i = pending_generation_cells[pending_generation_cursor] + pending_generation_cursor += 1 + if board.has(grid_pos): + continue + + var is_obstacle = _register_cell_with_ray(grid_pos) + if not is_obstacle: + _add_compatible_biome(grid_pos) + + pending_generation_cells.clear() + pending_generation_cursor = 0 + func _drain_cleanup_queue() -> void: var processed: int = 0 var start_usec: int = Time.get_ticks_usec() @@ -595,6 +620,22 @@ func _drain_wire_queue() -> void: pending_wire_cells.clear() pending_wire_cursor = 0 +func _drain_wire_queue_now() -> void: + while pending_wire_cursor < pending_wire_cells.size(): + var grid_pos: Vector2i = pending_wire_cells[pending_wire_cursor] + pending_wire_cursor += 1 + pending_wire_lookup.erase(grid_pos) + + if not board.has(grid_pos): + continue + if not board[grid_pos].get("have_lamppost", false): + continue + + _connect_lamppost_wires(grid_pos) + + pending_wire_cells.clear() + pending_wire_cursor = 0 + func _generate_pieces_around_train(center: Vector2i) -> void: for x in range(-eye_line, eye_line + 1): for z in range(-eye_line, eye_line + 1): diff --git a/tgcc/main menu/distant_menu_world.tscn b/tgcc/main menu/distant_menu_world.tscn index c8d8944..5be2adb 100644 --- a/tgcc/main menu/distant_menu_world.tscn +++ b/tgcc/main menu/distant_menu_world.tscn @@ -1,12 +1,10 @@ -[gd_scene load_steps=18 format=3] +[gd_scene format=3 uid="uid://c7shevn0javuv"] -[ext_resource type="Material" path="res://tgcc/chunk/material/grassflat_chunk.tres" id="1_grass"] -[ext_resource type="Material" path="res://tgcc/chunk/material/field.tres" id="2_field"] -[ext_resource type="Material" path="res://tgcc/chunk/material/path_chunk.tres" id="3_path"] -[ext_resource type="Material" path="res://tgcc/chunk/material/terrain.tres" id="4_terrain"] -[ext_resource type="Material" path="res://tgcc/chunk/prop/house/house.tres" id="5_house"] -[ext_resource type="Material" path="res://tgcc/chunk/material/wood.tres" id="6_wood"] -[ext_resource type="Material" path="res://tgcc/chunk/material/rocks.tres" id="7_rocks"] +[ext_resource type="Material" uid="uid://blqelpjvdv23j" path="res://tgcc/chunk/material/grassflat_chunk.tres" id="1_grass"] +[ext_resource type="Material" uid="uid://c2x7xxweexmj" path="res://tgcc/chunk/material/field.tres" id="2_field"] +[ext_resource type="Material" uid="uid://4xhpd6lust7w" path="res://tgcc/chunk/material/path_chunk.tres" id="3_path"] +[ext_resource type="Material" uid="uid://cnu38m5dsy4uw" path="res://tgcc/chunk/material/terrain.tres" id="4_terrain"] +[ext_resource type="Material" uid="uid://o31kp0jm07q3" path="res://tgcc/chunk/material/rocks.tres" id="7_rocks"] [sub_resource type="PlaneMesh" id="PlaneMesh_ground"] size = Vector2(560, 360) @@ -23,185 +21,63 @@ size = Vector2(12, 340) [sub_resource type="PlaneMesh" id="PlaneMesh_path_short"] size = Vector2(10, 120) -[sub_resource type="BoxMesh" id="BoxMesh_house"] -size = Vector3(11, 6, 9) - -[sub_resource type="BoxMesh" id="BoxMesh_roof"] -size = Vector3(13, 2, 11) - -[sub_resource type="BoxMesh" id="BoxMesh_tree_trunk"] -size = Vector3(1.4, 5, 1.4) - [sub_resource type="SphereMesh" id="SphereMesh_tree_crown"] radius = 4.0 height = 5.0 radial_segments = 8 rings = 4 -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_orange_crown"] -albedo_color = Color(0.85, 0.32, 0.09, 1) -roughness = 0.85 +[node name="DistantMenuWorld" type="Node3D" unique_id=448788103] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_red_crown"] -albedo_color = Color(0.6, 0.12, 0.08, 1) -roughness = 0.85 - - -[node name="DistantMenuWorld" type="Node3D"] - -[node name="Ground" type="MeshInstance3D" parent="."] +[node name="Ground" type="MeshInstance3D" parent="." unique_id=1769769010] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, -0.12, 250) cast_shadow = 0 mesh = SubResource("PlaneMesh_ground") surface_material_override/0 = ExtResource("1_grass") -[node name="BackDirt" type="MeshInstance3D" parent="."] +[node name="BackDirt" type="MeshInstance3D" parent="." unique_id=441617212] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -155, -0.1, 235) cast_shadow = 0 mesh = SubResource("PlaneMesh_field_large") surface_material_override/0 = ExtResource("4_terrain") -[node name="FieldA" type="MeshInstance3D" parent="."] +[node name="FieldA" type="MeshInstance3D" parent="." unique_id=1168162022] transform = Transform3D(0.9659258, 0, -0.25881904, 0, 1, 0, 0.25881904, 0, 0.9659258, -90, -0.08, 175) cast_shadow = 0 mesh = SubResource("PlaneMesh_field_large") surface_material_override/0 = ExtResource("2_field") -[node name="FieldB" type="MeshInstance3D" parent="."] +[node name="FieldB" type="MeshInstance3D" parent="." unique_id=908374467] transform = Transform3D(0.8660254, 0, 0.5, 0, 1, 0, -0.5, 0, 0.8660254, 105, -0.08, 190) cast_shadow = 0 mesh = SubResource("PlaneMesh_field_large") surface_material_override/0 = ExtResource("2_field") -[node name="FieldC" type="MeshInstance3D" parent="."] +[node name="FieldC" type="MeshInstance3D" parent="." unique_id=725405179] transform = Transform3D(0.9063078, 0, -0.42261827, 0, 1, 0, 0.42261827, 0, 0.9063078, 160, -0.08, 305) cast_shadow = 0 mesh = SubResource("PlaneMesh_field_small") surface_material_override/0 = ExtResource("2_field") -[node name="FieldD" type="MeshInstance3D" parent="."] +[node name="FieldD" type="MeshInstance3D" parent="." unique_id=180749651] transform = Transform3D(0.9848077, 0, 0.17364818, 0, 1, 0, -0.17364818, 0, 0.9848077, -190, -0.08, 320) cast_shadow = 0 mesh = SubResource("PlaneMesh_field_small") surface_material_override/0 = ExtResource("2_field") -[node name="DistantRoadMain" type="MeshInstance3D" parent="."] +[node name="DistantRoadMain" type="MeshInstance3D" parent="." unique_id=979021818] transform = Transform3D(0.70710677, 0, -0.70710677, 0, 1, 0, 0.70710677, 0, 0.70710677, 5, -0.06, 240) cast_shadow = 0 mesh = SubResource("PlaneMesh_path_long") surface_material_override/0 = ExtResource("3_path") -[node name="DistantRoadCross" type="MeshInstance3D" parent="."] +[node name="DistantRoadCross" type="MeshInstance3D" parent="." unique_id=1994181739] transform = Transform3D(0.25881904, 0, 0.9659258, 0, 1, 0, -0.9659258, 0, 0.25881904, -20, -0.05, 220) cast_shadow = 0 mesh = SubResource("PlaneMesh_path_short") surface_material_override/0 = ExtResource("3_path") -[node name="VillageA" type="Node3D" parent="."] -transform = Transform3D(0.9396926, 0, -0.34202015, 0, 1, 0, 0.34202015, 0, 0.9396926, -130, 0, 205) - -[node name="House1" type="MeshInstance3D" parent="VillageA"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0) -cast_shadow = 0 -mesh = SubResource("BoxMesh_house") -surface_material_override/0 = ExtResource("5_house") - -[node name="Roof1" type="MeshInstance3D" parent="VillageA"] -transform = Transform3D(1, 0, 0, 0, 0.8660254, -0.5, 0, 0.5, 0.8660254, 0, 7.2, 0) -cast_shadow = 0 -mesh = SubResource("BoxMesh_roof") -surface_material_override/0 = ExtResource("6_wood") - -[node name="House2" type="MeshInstance3D" parent="VillageA"] -transform = Transform3D(0.88, 0, 0, 0, 0.88, 0, 0, 0, 0.88, 20, 2.64, -12) -cast_shadow = 0 -mesh = SubResource("BoxMesh_house") -surface_material_override/0 = ExtResource("5_house") - -[node name="Roof2" type="MeshInstance3D" parent="VillageA"] -transform = Transform3D(0.88, 0, 0, 0, 0.76210237, -0.44, 0, 0.44, 0.76210237, 20, 6.3, -12) -cast_shadow = 0 -mesh = SubResource("BoxMesh_roof") -surface_material_override/0 = ExtResource("6_wood") - -[node name="VillageB" type="Node3D" parent="."] -transform = Transform3D(0.81915206, 0, 0.57357645, 0, 1, 0, -0.57357645, 0, 0.81915206, 150, 0, 255) - -[node name="House1" type="MeshInstance3D" parent="VillageB"] -transform = Transform3D(1.1, 0, 0, 0, 1.1, 0, 0, 0, 1.1, 0, 3.3, 0) -cast_shadow = 0 -mesh = SubResource("BoxMesh_house") -surface_material_override/0 = ExtResource("5_house") - -[node name="Roof1" type="MeshInstance3D" parent="VillageB"] -transform = Transform3D(1.1, 0, 0, 0, 0.95262796, -0.55, 0, 0.55, 0.95262796, 0, 7.9, 0) -cast_shadow = 0 -mesh = SubResource("BoxMesh_roof") -surface_material_override/0 = ExtResource("6_wood") - -[node name="House2" type="MeshInstance3D" parent="VillageB"] -transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, -18, 2.4, 15) -cast_shadow = 0 -mesh = SubResource("BoxMesh_house") -surface_material_override/0 = ExtResource("5_house") - -[node name="Roof2" type="MeshInstance3D" parent="VillageB"] -transform = Transform3D(0.8, 0, 0, 0, 0.6928203, -0.4, 0, 0.4, 0.6928203, -18, 5.75, 15) -cast_shadow = 0 -mesh = SubResource("BoxMesh_roof") -surface_material_override/0 = ExtResource("6_wood") - -[node name="TreeLine" type="Node3D" parent="."] - -[node name="TreeA_Trunk" type="MeshInstance3D" parent="TreeLine"] -transform = Transform3D(1, 0, 0, 0, 1.2, 0, 0, 0, 1, -210, 3, 210) -cast_shadow = 0 -mesh = SubResource("BoxMesh_tree_trunk") -surface_material_override/0 = ExtResource("6_wood") - -[node name="TreeA_Crown" type="MeshInstance3D" parent="TreeLine"] -transform = Transform3D(1.4, 0, 0, 0, 1.1, 0, 0, 0, 1.4, -210, 8.5, 210) -cast_shadow = 0 -mesh = SubResource("SphereMesh_tree_crown") -surface_material_override/0 = SubResource("StandardMaterial3D_orange_crown") - -[node name="TreeB_Trunk" type="MeshInstance3D" parent="TreeLine"] -transform = Transform3D(1, 0, 0, 0, 1.1, 0, 0, 0, 1, -175, 2.75, 255) -cast_shadow = 0 -mesh = SubResource("BoxMesh_tree_trunk") -surface_material_override/0 = ExtResource("6_wood") - -[node name="TreeB_Crown" type="MeshInstance3D" parent="TreeLine"] -transform = Transform3D(1.2, 0, 0, 0, 1.0, 0, 0, 0, 1.2, -175, 7.7, 255) -cast_shadow = 0 -mesh = SubResource("SphereMesh_tree_crown") -surface_material_override/0 = SubResource("StandardMaterial3D_red_crown") - -[node name="TreeC_Trunk" type="MeshInstance3D" parent="TreeLine"] -transform = Transform3D(1, 0, 0, 0, 1.15, 0, 0, 0, 1, 218, 2.9, 235) -cast_shadow = 0 -mesh = SubResource("BoxMesh_tree_trunk") -surface_material_override/0 = ExtResource("6_wood") - -[node name="TreeC_Crown" type="MeshInstance3D" parent="TreeLine"] -transform = Transform3D(1.45, 0, 0, 0, 1.05, 0, 0, 0, 1.45, 218, 8.0, 235) -cast_shadow = 0 -mesh = SubResource("SphereMesh_tree_crown") -surface_material_override/0 = SubResource("StandardMaterial3D_orange_crown") - -[node name="TreeD_Trunk" type="MeshInstance3D" parent="TreeLine"] -transform = Transform3D(1, 0, 0, 0, 1.05, 0, 0, 0, 1, 240, 2.65, 290) -cast_shadow = 0 -mesh = SubResource("BoxMesh_tree_trunk") -surface_material_override/0 = ExtResource("6_wood") - -[node name="TreeD_Crown" type="MeshInstance3D" parent="TreeLine"] -transform = Transform3D(1.2, 0, 0, 0, 0.95, 0, 0, 0, 1.2, 240, 7.4, 290) -cast_shadow = 0 -mesh = SubResource("SphereMesh_tree_crown") -surface_material_override/0 = SubResource("StandardMaterial3D_red_crown") - -[node name="RockPatch" type="MeshInstance3D" parent="."] +[node name="RockPatch" type="MeshInstance3D" parent="." unique_id=12563390] transform = Transform3D(1, 0, 0, 0, 0.35, 0, 0, 0, 0.65, -15, 0.6, 350) cast_shadow = 0 mesh = SubResource("SphereMesh_tree_crown") diff --git a/tgcc/main menu/main_menu_test.gd b/tgcc/main menu/main_menu_test.gd index 87f4a1c..e4350c6 100644 --- a/tgcc/main menu/main_menu_test.gd +++ b/tgcc/main menu/main_menu_test.gd @@ -4,13 +4,27 @@ extends Node3D @export var play_departure_delay_seconds: float = 1.0 @export var play_move_before_transition_seconds: float = 3.0 @export var menu_train_whistle_volume_db: float = -12.0 +@export var prewarm_chunks_before_show: bool = true var _play_departure_started: bool = false @onready var _rail_path: Node = $rail +@onready var _biome_generator: Node = $biome_generator +@onready var _environment_manager: Node = $EnvironmentManager @onready var _option_menu: Control = $MainMenuUI/SubViewport/OptionMenu func _ready() -> void: + if prewarm_chunks_before_show: + visible = false + await get_tree().physics_frame + if not is_inside_tree(): + return + if _biome_generator != null and _biome_generator.has_method("generate_initial_world_now"): + _biome_generator.generate_initial_world_now() + if _environment_manager != null and _environment_manager.has_method("flush_pending_environment_nodes"): + _environment_manager.flush_pending_environment_nodes() + visible = true + _stop_menu_train() _configure_menu_train_whistle_volume() _configure_play_transition_delay() diff --git a/tgcc/main menu/main_menu_test.tscn b/tgcc/main menu/main_menu_test.tscn index 2b4f96e..d06de47 100644 --- a/tgcc/main menu/main_menu_test.tscn +++ b/tgcc/main menu/main_menu_test.tscn @@ -284,6 +284,8 @@ size = Vector2(600, 300) [node name="MainMenu" type="Node3D" unique_id=448381304] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0) script = ExtResource("1_4j5xl") +play_departure_speed = 6.0 +menu_train_whistle_volume_db = -14.0 [node name="EnvironmentManager" parent="." unique_id=1611939731 instance=ExtResource("1_2o8pc")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.822516, 0, 1.9254212)