diff --git a/core/biome_generator/rails.gd b/core/biome_generator/rails.gd index b11c634..9888643 100644 --- a/core/biome_generator/rails.gd +++ b/core/biome_generator/rails.gd @@ -50,10 +50,14 @@ enum TrainFacingDirection { KEEP_PATH_DIRECTION, LOCOMOTIVE_LEFT, LOCOMOTIVE_RIG @export_enum("keep_path_direction", "locomotive_left", "locomotive_right") var train_facing_direction: int = TrainFacingDirection.KEEP_PATH_DIRECTION @export_group("Rails Bulding") +##if true builds visible rail pieces along the Path3D +@export var build_track_visuals: bool = true ##distance between sleepers of the rails @export var sleepers_distance: float = 1.0 ##nodel for the sleeper of the rail @export var sleepers_model: PackedScene +##if true add procedural rail bars even when sleepers_model is assigned +@export var add_procedural_rails_to_sleepers_model: bool = false @export_group("Manual Controls") ##max speed @@ -115,7 +119,8 @@ func _ready() -> void: _initial_is_inmotion = is_inmotion if curve != null and curve.get_baked_length() > 0: - build_rails() + if build_track_visuals: + build_rails() build_train() _plan_stops() _apply_initial_train_start() @@ -258,6 +263,7 @@ func build_rails() -> void: var total_length = curve.get_baked_length() var piece_number = int(total_length / sleepers_distance) + var should_add_procedural_rails: bool = sleepers_model == null or add_procedural_rails_to_sleepers_model for i in range(piece_number): var distance = i * sleepers_distance @@ -289,17 +295,18 @@ func build_rails() -> void: sleeper.material_override = mat_wood rail_piece.add_child(sleeper) - var rail_sx = MeshInstance3D.new() - rail_sx.mesh = mesh_rail - rail_sx.material_override = mat_iron - rail_sx.position = Vector3(-rail_distance / 2.0, 0.1, 0) - rail_piece.add_child(rail_sx) - - var rail_dx = MeshInstance3D.new() - rail_dx.mesh = mesh_rail - rail_dx.material_override = mat_iron - rail_dx.position = Vector3(rail_distance / 2.0, 0.1, 0) - rail_piece.add_child(rail_dx) + if should_add_procedural_rails: + var rail_sx = MeshInstance3D.new() + rail_sx.mesh = mesh_rail + rail_sx.material_override = mat_iron + rail_sx.position = Vector3(-rail_distance / 2.0, 0.1, 0) + rail_piece.add_child(rail_sx) + + var rail_dx = MeshInstance3D.new() + rail_dx.mesh = mesh_rail + rail_dx.material_override = mat_iron + rail_dx.position = Vector3(rail_distance / 2.0, 0.1, 0) + rail_piece.add_child(rail_dx) func _plan_stops() -> void: stop_offset.clear() diff --git a/tgcc/main menu/distant_menu_world.tscn b/tgcc/main menu/distant_menu_world.tscn new file mode 100644 index 0000000..c8d8944 --- /dev/null +++ b/tgcc/main menu/distant_menu_world.tscn @@ -0,0 +1,208 @@ +[gd_scene load_steps=18 format=3] + +[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"] + +[sub_resource type="PlaneMesh" id="PlaneMesh_ground"] +size = Vector2(560, 360) + +[sub_resource type="PlaneMesh" id="PlaneMesh_field_large"] +size = Vector2(70, 95) + +[sub_resource type="PlaneMesh" id="PlaneMesh_field_small"] +size = Vector2(44, 62) + +[sub_resource type="PlaneMesh" id="PlaneMesh_path_long"] +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 + +[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="."] +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="."] +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="."] +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="."] +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="."] +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="."] +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="."] +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="."] +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="."] +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") +surface_material_override/0 = ExtResource("7_rocks") diff --git a/tgcc/main menu/main_menu_test.tscn b/tgcc/main menu/main_menu_test.tscn index 67cbd37..2b4f96e 100644 --- a/tgcc/main menu/main_menu_test.tscn +++ b/tgcc/main menu/main_menu_test.tscn @@ -105,6 +105,7 @@ [ext_resource type="Shader" uid="uid://bhqtjjs3emv7f" path="res://tgcc/main menu/godraysmenu.gdshader" id="103_g1vc5"] [ext_resource type="PackedScene" uid="uid://cp2vmysawnuql" path="res://tgcc/chunk/prop/sign/scene/signMenu.tscn" id="103_mrhmq"] [ext_resource type="Material" uid="uid://dljvvppsdbjd1" path="res://tgcc/chunk/material/glowplane.tres" id="104_mrhmq"] +[ext_resource type="PackedScene" path="res://tgcc/main menu/distant_menu_world.tscn" id="105_background"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_00nq7"] render_priority = 0 @@ -176,13 +177,12 @@ metadata/_custom_type_script = "uid://brcimd12tx3dm" compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_q52t1")]) [sub_resource type="Curve3D" id="Curve3D_263ax"] -closed = true bake_interval = 50.0 _data = { -"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 3.5, 0, 0, 0, 0, 0, 0, 0, 0, 3.5, 0, 100, 0, 0, 0, 0, 0, 0, 2.961661, -0.009097099, -56.07381, 0, 0, 0, 0, 0, 0, 3.4848416, -0.013232231, -117.195526, 0, 0, 0, 0, 0, 0, 3.3488476, 0.0048189163, 176.55922, 0, 0, 0, 0, 0, 0, 1.7582202, 0.0118227005, 270.61703), -"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0) +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 3.0078363, -1.8119812e-05, -12.587097, 0, 0, 0, 0, 0, 0, 3.360159, -1.8119812e-05, -79.54889, 0, 0, 0, 0, 0, 0, 2.826539, -1.8119812e-05, -159.47318, 0, 0, 0, 0, 0, 0, 3.0367248, -1.8119812e-05, -269.20667), +"tilts": PackedFloat32Array(0, 0, 0, 0) } -point_count = 6 +point_count = 4 [sub_resource type="PlaneMesh" id="PlaneMesh_00nq7"] @@ -311,7 +311,7 @@ directional_shadow_mode = 0 directional_shadow_max_distance = 200.0 [node name="rail" type="Path3D" parent="." unique_id=28337754] -transform = Transform3D(1.3113416e-07, 0, 1, 0, 1, 0, -1, 0, 1.3113416e-07, -47.25185, 1.7218199, 3.4257338) +transform = Transform3D(1.3113416e-07, 0, 1, 0, 1, 0, -1, 0, 1.3113416e-07, 114.74815, 1.7218199, 3.4257479) curve = SubResource("Curve3D_263ax") script = ExtResource("7_5p27e") train_model = ExtResource("8_ljvyb") @@ -322,7 +322,7 @@ wagon_gap = 0.6 wagon_spacing_scale = 0.9 train_start_mode = 2 train_start_stop_index = 0 -train_start_position = 540.0 +train_start_position = 87.0 train_start_after_delay = false train_facing_direction = 2 sleepers_model = ExtResource("10_00nq7") @@ -331,6 +331,9 @@ fireworks_scene = ExtResource("11_aylkj") [node name="MainMap" parent="." unique_id=1895741703 instance=ExtResource("2_wbrya")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 63.069893, 0, -4.743943e-06) +[node name="DistantMenuWorld" parent="." unique_id=1852904287 instance=ExtResource("105_background")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -117.95) + [node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=1523044435] transform = Transform3D(-80.07708, -1.0239479e-05, 4.277144e-13, 0, -2.9642006e-06, -64.80289, 1.2091303e-05, -67.813, 2.832624e-06, 308.45245, 59.279312, 332.5165) cast_shadow = 0 @@ -375,14 +378,14 @@ transform = Transform3D(-0.09359112, 0, 0.9713834, 0, 0.56225973, 0, -0.38276488 [node name="Fuji4" parent="." unique_id=930179001 instance=ExtResource("99_61psf")] transform = Transform3D(-0.09359112, 0, 0.9713834, 0, 0.56225973, 0, -0.38276488, 0, -0.23751618, 239.46135, 1.7057877, 224.6928) -[node name="Landscape" parent="Fuji4" index="0" unique_id=244602034] +[node name="Landscape" parent="Fuji4" index="0" unique_id=581950846] transform = Transform3D(28.638817, 1.7053026e-13, -7.6293945e-06, 0, 13.6219845, 2.1621709e-06, 0, -1.0284306e-06, 28.638834, -10.786804, 5.0069, 17.382736) surface_material_override/0 = SubResource("ShaderMaterial_g1vc5") [node name="Fuji5" parent="." unique_id=1070037082 instance=ExtResource("99_61psf")] transform = Transform3D(0.0935979, 0, 0.9713791, 0, 0.56225973, 0, -0.38276324, 0, 0.23753339, -275.95566, -3.4616928, 232.02234) -[node name="Landscape" parent="Fuji5" index="0" unique_id=244602034] +[node name="Landscape" parent="Fuji5" index="0" unique_id=581950846] transform = Transform3D(28.638819, 1.7053026e-13, -7.6293945e-06, 0, 13.6219845, 2.1621709e-06, 0, -1.0284306e-06, 28.638836, -10.786743, 6.703195, 17.382767) surface_material_override/0 = SubResource("ShaderMaterial_g1vc5") @@ -392,7 +395,7 @@ transform = Transform3D(-4.88843, -0.020050459, 0.86837775, -0.010355438, 4.9646 [node name="Fuji6" parent="." unique_id=150126281 instance=ExtResource("100_0aqpp")] transform = Transform3D(-5.287449, -0.020231497, 0.22351237, -0.011200703, 5.009496, 0.014500697, -0.9394429, 0.05414178, -1.2581636, 32.446022, 15.848213, 525.54346) -[node name="Mt Fuji_simplified_3d_mesh" parent="Fuji6" index="0" unique_id=1389340781] +[node name="Mt Fuji_simplified_3d_mesh" parent="Fuji6" index="0" unique_id=65404928] transform = Transform3D(0.5151193, -0.011206273, -0.07264297, 0.077138014, 0.07483422, 0.48510167, 3.5762787e-07, -0.4938935, 0.07515043, 6.299696, 12.244916, 3.004303) surface_material_override/0 = SubResource("ShaderMaterial_vvb5q") diff --git a/tgcc/main_scene.tscn b/tgcc/main_scene.tscn index 41e5884..5fa643d 100644 --- a/tgcc/main_scene.tscn +++ b/tgcc/main_scene.tscn @@ -207,7 +207,7 @@ biome_list = Array[ExtResource("6_jfe74")]([SubResource("Resource_3qrd0")]) entity_pool = ExtResource("34_a2cst") entity_spawn_probability = 0.4 max_entities_per_chunk = 5 -eye_line = 4 +eye_line = 7 [node name="Terrain" type="MeshInstance3D" parent="." unique_id=219178561] visible = false