add distance_menu_world and fix rail generation

This commit is contained in:
2026-07-08 10:59:00 +02:00
parent e86da0c2bc
commit 185b1b4744
4 changed files with 240 additions and 22 deletions

View File

@@ -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()

View File

@@ -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")

View File

@@ -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")

View File

@@ -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