5 Commits

Author SHA1 Message Date
7f7f9d6ae3 add wagons 2026-05-29 18:16:16 +02:00
05b01f70cc create main_scene 2026-05-26 09:34:08 +02:00
b059a2ef1d put constant for generation as parameters 2026-05-25 23:12:57 +02:00
d823cf4554 fix asset errors 2026-05-24 17:19:37 +02:00
Matteo Sonaglioni
e061eb7275 prop 2026-05-21 22:58:38 +02:00
12 changed files with 769 additions and 78 deletions

View File

@@ -10,19 +10,6 @@ const ENTITY_SPAWN_ANY: int = 0
const ENTITY_SPAWN_HUMANOID_ONLY: int = 1
const ENTITY_SPAWN_ANIMAL_ONLY: int = 2
const CHUNK_GENERATION_FRAME_BUDGET_USEC: int = 2000 #2 ms/frame to generate chunks
const CHUNK_CLEANUP_FRAME_BUDGET_USEC: int = 1000 #1 ms/frame per cleanup
const LAMPPOST_WIRE_FRAME_BUDGET_USEC: int = 1000 #1 ms/frame per i fili dei lampioni
#(about 4 ms o work for frame)
#Se compaiono chunk troppo lentamente davanti al treno:
#aumentare generazione a 3000 o 4000
#Se ci sono micro-scatti:
#abbassare generazione a 1000 o 1500
#Se i fili appaiono in ritardo:
#aumentare wire a 1500 o 2000
#Se il cleanup causa scatti:
#abbassare cleanup a 500
const MAX_CHUNK_UNIQUENESS: int = 5
const RIVER_SIDE_ORDER: Array[String] = ["north", "est", "south", "west"]
const RIVER_DIRECTIONS: Dictionary = {
@@ -38,6 +25,20 @@ const RIVER_NEIGHBOUR_OFFSETS: Dictionary = {
"west": Vector2i(-1, 0),
}
@export_group("Generation")
@export var chunk_generation_frame_budget_usec: int = 1500 #2 ms/frame to generate chunks
@export var chunk_cleanup_frame_budget_usec: int = 1000 #1 ms/frame per cleanup
@export var lampost_wire_frame_budget_usec: int = 1000 #1 ms/frame per i fili dei lampioni
#(about 4 ms of work for frame)
#Se compaiono chunk troppo lentamente davanti al treno:
#aumentare generazione a 3000 o 4000
#Se ci sono micro-scatti:
#abbassare generazione a 1000 o 1500
#Se i fili appaiono in ritardo:
#aumentare wire a 1500 o 2000
#Se il cleanup causa scatti:
#abbassare cleanup a 500
@export_group("Rails")
@export var rail_path: Path3D #rail path
@export var railway_pool: Resource
@@ -483,7 +484,7 @@ func _queue_has_frame_budget(start_usec: int, budget_usec: int, processed: int)
func _drain_generation_queue() -> void:
var processed: int = 0
var start_usec: int = Time.get_ticks_usec()
while pending_generation_cursor < pending_generation_cells.size() and _queue_has_frame_budget(start_usec, CHUNK_GENERATION_FRAME_BUDGET_USEC, processed):
while pending_generation_cursor < pending_generation_cells.size() and _queue_has_frame_budget(start_usec, chunk_generation_frame_budget_usec, processed):
var grid_pos: Vector2i = pending_generation_cells[pending_generation_cursor]
pending_generation_cursor += 1
if board.has(grid_pos):
@@ -501,7 +502,7 @@ func _drain_generation_queue() -> void:
func _drain_cleanup_queue() -> void:
var processed: int = 0
var start_usec: int = Time.get_ticks_usec()
while pending_cleanup_cursor < pending_cleanup_cells.size() and _queue_has_frame_budget(start_usec, CHUNK_CLEANUP_FRAME_BUDGET_USEC, processed):
while pending_cleanup_cursor < pending_cleanup_cells.size() and _queue_has_frame_budget(start_usec, chunk_cleanup_frame_budget_usec, processed):
var grid_pos: Vector2i = pending_cleanup_cells[pending_cleanup_cursor]
pending_cleanup_cursor += 1
if not board.has(grid_pos):
@@ -529,7 +530,7 @@ func _queue_lamppost_wire_connection(grid_pos: Vector2i) -> void:
func _drain_wire_queue() -> void:
var processed: int = 0
var start_usec: int = Time.get_ticks_usec()
while pending_wire_cursor < pending_wire_cells.size() and _queue_has_frame_budget(start_usec, LAMPPOST_WIRE_FRAME_BUDGET_USEC, processed):
while pending_wire_cursor < pending_wire_cells.size() and _queue_has_frame_budget(start_usec, lampost_wire_frame_budget_usec, processed):
var grid_pos: Vector2i = pending_wire_cells[pending_wire_cursor]
pending_wire_cursor += 1
pending_wire_lookup.erase(grid_pos)

View File

@@ -1,31 +1,60 @@
extends Path3D
@export_group("Train")
@export var train_speed: float = 6.0
@export var is_inmotion: bool = true
@export var train_model: PackedScene
##train speed
@export var train_speed: float = 6.0
##if true the train is in motion
@export var is_inmotion: bool = true
##the model for the locomotive
@export var train_model: PackedScene
##array of wagon scenes
@export var wagon_pool: Resource
##if true the number of wagons is random from 1 to wagon_count
@export var wagon_random_number: bool = true
##if wagon_random_number = true is used as max wagons
@export_range(0, 32, 1, "or_greater") var wagon_count: int = 3
##the distance between two wagons
@export var wagon_gap: float = 0.4
##the scale to calculate the distance of the bounds
@export_range(0.1, 2.0, 0.05, "or_greater") var wagon_spacing_scale: float = 0.5
##override spacing using this value
@export var wagon_spacing_override: float = 0.0
##distance of the rail axes
@export var axes_distance: float = 3.0
@export var rail_distance: float = 1.2
##discance between rails
@export var rail_distance: float = 1.2
##current camera
@export var cameras: Node3D
##swing of the train during the ran
@export_range(0.0, 1.0) var basic_swing: float = 0.1
@export_group("Rails Bulding")
##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
@export_group("Manual Controls")
##max speed
@export var speed_max: float = 15.0
@export var speed_min: float = -5.0
##min speed
@export var speed_min: float = -5.0
##acceleration
@export var manual_acceleration: float = 5.0
@export_group("Train Stops")
##if true the train stop the ran on stops
@export var enable_stops: bool = true
##time of stop
@export var stop_time: float = 4.0
@export var brake_distance: float = 15.0
##distance when the train start to brake
@export var brake_distance: float = 15.0
##restart time
@export var restart_time: float = 3.0
##scene for fireworks
@export var fireworks_scene: PackedScene
var fireworks_colors: Array[Color] = [
##array of colors for fireworks
@export var fireworks_colors: Array[Color] = [
Color(1.0, 0.2, 0.2), # Rosso vivo
Color(0.2, 1.0, 0.2), # Verde lime
Color(0.3, 0.5, 1.0), # Blu cielo
@@ -48,9 +77,14 @@ var stop_multiply: float = 1.0
var is_restarting: bool = false
var tween_restart: Tween
var environment_config: EnvironmentConfig
var wagon_instances: Array[Node3D] = []
var wagon_progress_offsets: Array[float] = []
func _ready() -> void:
randomize()
_cache_environment_config()
if curve != null and curve.get_baked_length() > 0:
build_rails()
build_train()
@@ -153,6 +187,8 @@ func _snap_train_to_progress() -> void:
cameras.global_position = center_position
cameras.global_basis = train_instance.global_basis
_snap_wagons_to_progress(total_length)
func build_rails() -> void:
var mat_wood = StandardMaterial3D.new()
mat_wood.albedo_color = Color(0.35, 0.2, 0.1)
@@ -323,6 +359,8 @@ func train_move(delta: float) -> void:
if cameras:
cameras.global_position = center_position
cameras.global_basis = train_instance.global_basis
_snap_wagons_to_progress(total_length)
var real_speed = abs(train_speed * stop_multiply)
var speed_factor = clamp(real_speed / max(speed_max, 0.001), 0.0, 1.0)
@@ -401,6 +439,34 @@ func build_train() -> void:
else:
build_default_train()
var wagons = wagon_count
if wagon_random_number:
wagons = randi_range(1, wagon_count)
build_train_wagons(wagons)
func build_train_wagons(wagon_number: int) -> void:
_clear_train_wagons()
if wagon_number <= 0 or wagon_pool == null or not "available_wagons" in wagon_pool:
return
if wagon_pool.available_wagons.is_empty():
return
for i in range(wagon_number):
var wagon_scene: PackedScene = wagon_pool.available_wagons.pick_random()
if wagon_scene == null:
continue
var wagon: Node3D = wagon_scene.instantiate() as Node3D
if wagon == null:
push_warning("Wagon scene root must be a Node3D.")
continue
add_child(wagon)
wagon_instances.append(wagon)
_update_wagon_progress_offsets()
_snap_wagons_to_progress()
func build_default_train() -> void:
train_instance = Node3D.new()
add_child(train_instance)
@@ -435,3 +501,118 @@ func build_default_train() -> void:
stack.material_override = mat_body
stack.position = Vector3(0, 1.2, 1.0)
train_instance.add_child(stack)
func _clear_train_wagons() -> void:
for wagon in wagon_instances:
if is_instance_valid(wagon):
wagon.queue_free()
wagon_instances.clear()
wagon_progress_offsets.clear()
func _update_wagon_progress_offsets() -> void:
wagon_progress_offsets.clear()
if train_instance == null or wagon_instances.is_empty():
return
var train_length: float = _get_vehicle_length(train_instance)
var previous_length: float = train_length
var accumulated_distance: float = 0.0
for wagon in wagon_instances:
var wagon_length: float = _get_vehicle_length(wagon)
accumulated_distance += _get_wagon_spacing(previous_length, wagon_length)
wagon_progress_offsets.append(accumulated_distance)
previous_length = wagon_length
func _get_wagon_spacing(previous_length: float, wagon_length: float) -> float:
if wagon_spacing_override > 0.0:
return wagon_spacing_override + wagon_gap
var detected_spacing: float = previous_length * 0.5 + wagon_length * 0.5
return detected_spacing * wagon_spacing_scale + wagon_gap
func _snap_wagons_to_progress(total_length: float = 0.0) -> void:
if curve == null or wagon_instances.is_empty():
return
if total_length <= 0.0:
total_length = curve.get_baked_length()
if total_length <= 0.0:
return
var direction: float = 1.0
if train_speed < 0.0:
direction = -1.0
for i in range(wagon_instances.size()):
var wagon: Node3D = wagon_instances[i]
if not is_instance_valid(wagon):
continue
var wagon_offset: float = float(i + 1) * 7.0
if i < wagon_progress_offsets.size():
wagon_offset = wagon_progress_offsets[i]
var wagon_progress: float = train_progress - direction * wagon_offset
_snap_vehicle_to_progress(wagon, wagon_progress, total_length)
func _snap_vehicle_to_progress(vehicle: Node3D, progress: float, total_length: float) -> void:
var vehicle_progress: float = wrapf(progress, 0.0, total_length)
var center_position: Vector3 = to_global(curve.sample_baked(vehicle_progress, true))
var prog_forward: float = wrapf(vehicle_progress + 2.0, 0.0, total_length)
var forward_position: Vector3 = to_global(curve.sample_baked(prog_forward, true))
vehicle.global_position = center_position
if center_position.distance_to(forward_position) > 0.01:
vehicle.look_at(forward_position, Vector3.UP)
vehicle.rotate_y(PI)
func _get_vehicle_length(vehicle: Node3D) -> float:
var bounds: AABB = _get_node_local_bounds(vehicle, vehicle)
if bounds.size == Vector3.ZERO:
return 7.0
return maxf(bounds.size.z, 0.1)
func _get_node_local_bounds(root: Node3D, node: Node) -> AABB:
var result: AABB = AABB()
var has_bounds: bool = false
var mesh_instance := node as MeshInstance3D
if mesh_instance != null and mesh_instance.mesh != null:
var mesh_bounds: AABB = mesh_instance.get_aabb()
var mesh_transform: Transform3D = root.global_transform.affine_inverse() * mesh_instance.global_transform
for corner in _get_aabb_corners(mesh_bounds):
var local_point: Vector3 = mesh_transform * corner
if has_bounds:
result = result.expand(local_point)
else:
result = AABB(local_point, Vector3.ZERO)
has_bounds = true
for child in node.get_children():
var child_bounds: AABB = _get_node_local_bounds(root, child)
if child_bounds.size == Vector3.ZERO:
continue
if has_bounds:
result = result.merge(child_bounds)
else:
result = child_bounds
has_bounds = true
return result
func _get_aabb_corners(bounds: AABB) -> Array[Vector3]:
var start: Vector3 = bounds.position
var end: Vector3 = bounds.end
return [
Vector3(start.x, start.y, start.z),
Vector3(end.x, start.y, start.z),
Vector3(start.x, end.y, start.z),
Vector3(end.x, end.y, start.z),
Vector3(start.x, start.y, end.z),
Vector3(end.x, start.y, end.z),
Vector3(start.x, end.y, end.z),
Vector3(end.x, end.y, end.z),
]

View File

@@ -0,0 +1,6 @@
## Resource that lists the wagon scenes available for train composition.
class_name WagonPool
extends Resource
@export var name: String = "New Wagon Pool"
@export var available_wagons: Array[PackedScene] = []

View File

@@ -0,0 +1,9 @@
[gd_resource type="Resource" script_class="WagonPool" format=3 uid="uid://bjnytgwt8tmf4"]
[ext_resource type="PackedScene" uid="uid://dvk3bytqn3m5s" path="res://tgcc/train/main_train.tscn" id="1_t6q5r"]
[ext_resource type="Script" uid="uid://b6xk0gtn2pwa" path="res://core/biome_generator/wagon_pool.gd" id="2_x6bmc"]
[resource]
script = ExtResource("2_x6bmc")
name = "Wagon Pool"
available_wagons = Array[PackedScene]([ExtResource("1_t6q5r")])

View File

@@ -23,6 +23,7 @@
[ext_resource type="AudioStream" uid="uid://h5yhjn1x3f4j" path="res://core/daynight/sounds/rain_2.mp3" id="21_wnhyx"]
[ext_resource type="AudioStream" uid="uid://elrjw0smm0cj" path="res://core/daynight/sounds/rain_3.mp3" id="22_53kbn"]
[ext_resource type="Script" uid="uid://cx2tlvxhvatj5" path="res://docs/museums/daynight/control.gd" id="23_27ile"]
[ext_resource type="Script" uid="uid://ccdd52apoh4ir" path="res://docs/museums/daynight/camera_3d.gd" id="24_sw7bt"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_wjpfq"]
fractal_lacunarity = 1.915
@@ -148,7 +149,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
curve = SubResource("Curve3D_xtogr")
script = ExtResource("6_pypsn")
train_model = ExtResource("6_wjpfq")
cameras = NodePath("../cameras")
cameras = NodePath("../Camera3D")
sleepers_model = ExtResource("8_mb5yv")
fireworks_scene = ExtResource("8_xtogr")
@@ -373,6 +374,10 @@ theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
text = "Weather: Clear"
[node name="Camera3D" type="Camera3D" parent="." unique_id=1305162994]
transform = Transform3D(0.035881948, 0.7570504, -0.65237045, -0.1472942, 0.6496678, 0.7458125, 0.9884417, 0.06932917, 0.13482046, -18.173235, 14.658583, -10.483771)
script = ExtResource("24_sw7bt")
[connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"]
[connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"]
[connection signal="toggled" from="Control/Wind" to="Control" method="_on_wind_toggled"]

View File

@@ -5,7 +5,6 @@
[ext_resource type="Texture2D" uid="uid://dest0qa7vaid0" path="res://core/daynight/stars_albedo.png" id="3_ncg1s"]
[ext_resource type="Script" uid="uid://brcimd12tx3dm" path="res://core/daynight/edge_detection_compositor.gd" id="4_5uio4"]
[ext_resource type="PackedScene" uid="uid://ujv2f1l4d2ps" path="res://core/biome_generator/biome_generator.tscn" id="5_yeh4a"]
[ext_resource type="Resource" uid="uid://nrm040srfjwo" path="res://core/biome_generator/railway_pool.tres" id="6_awm2r"]
[ext_resource type="Script" uid="uid://wv6kcqkibium" path="res://core/biome_generator/biome.gd" id="6_s3jnv"]
[ext_resource type="PackedScene" uid="uid://crlk31ecl480n" path="res://tgcc/chunk/countryside/scene/chunk_country_corner_03.tscn" id="7_4elh6"]
[ext_resource type="PackedScene" uid="uid://b8blm6bwintf7" path="res://tgcc/chunk/countryside/scene/chunk_country_empty_01.tscn" id="7_xgfli"]
@@ -145,7 +144,7 @@ data = PackedByteArray("//vQZAAOhpd2PgtGR7JsJPfgYSYSJ6387g9rgIGKF+EZgxxoAM4TYIWm
[sub_resource type="Curve3D" id="Curve3D_ndco5"]
closed = true
bake_interval = 150.82
bake_interval = 50.0
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, -4.372, 0, 140, 0, 0, 0, 0, 0, 0, -20.963, 0, 160, 0, 0, 0, 0, 0, 0, -40.62518, 0, 168.52754, 0, 0, 0, 0, 0, 0, -60, 0, 170, 0, 0, 0, 0, 0, 0, -80, 0, 170, 0, 0, 0, 0, 0, 0, -100, 0, 170, 0, 0, 0, 0, 0, 0, -120.42937, 0, 171.50279, 0, 0, 0, 0, 0, 0, -141.41747, 7.6293945e-06, 180.5982, 0, 0, 0, 0, 0, 0, -155.77005, 7.6293945e-06, 198.35184, 0, 0, 0, 0, 0, 0, -160.14105, 7.6293945e-06, 219.80951, 0, 0, 0, 0, 0, 0, -163.99007, 7.6293945e-06, 239.36005, 0, 0, 0, 0, 0, 0, -175.77509, 7.6293945e-06, 256.16028, 0, 0, 0, 0, 0, 0, -195.62283, 7.6293945e-06, 267.46912, 0, 0, 0, 0, 0, 0, -219.9999, 7.6293945e-06, 270.11758, 0, 0, 0, 0, 0, 0, -240, 0, 270.118, 0, 0, 0, 0, 0, 0, -260, 0, 270.118, 0, 0, 0, 0, 0, 0, -275.19666, 7.6293945e-06, 270.55228, 0, 0, 0, 0, 0, 0, -294.2925, 7.6293945e-06, 276.05307, 0, 0, 0, 0, 0, 0, -307.19006, 7.6293945e-06, 286.9095, 0, 0, 0, 0, 0, 0, -317.32443, 7.6293945e-06, 303.14682, 0, 0, 0, 0, 0, 0, -320, 0, 320, 0, 0, 0, 0, 0, 0, -320, 0, 340, 0, 0, 0, 0, 0, 0, -320, 0, 360, 0, 0, 0, 0, 0, 0, -320, 0, 380, 0, 0, 0, 0, 0, 0, -316.78876, 7.6293945e-06, 396.91193, 0, 0, 0, 0, 0, 0, -307.68207, 7.6293945e-06, 412.70596, 0, 0, 0, 0, 0, 0, -291.08273, 7.6293945e-06, 424.7491, 0, 0, 0, 0, 0, 0, -270, 0, 429.994, 0, 0, 0, 0, 0, 0, -250, 0, 429.994, 0, 0, 0, 0, 0, 0, -229.90146, 7.6293945e-06, 433.90823, 0, 0, 0, 0, 0, 0, -217.15442, 7.6293945e-06, 442.98242, 0, 0, 0, 0, 0, 0, -204.60803, 7.6293945e-06, 459.93704, 0, 0, 0, 0, 0, 0, -200, 0, 480, 0, 0, 0, 0, 0, 0, -200, 0, 500, 0, 0, 0, 0, 0, 0, -195.5338, 7.6293945e-06, 520.0368, 0, 0, 0, 0, 0, 0, -184.9173, 7.6293945e-06, 535.07776, 0, 0, 0, 0, 0, 0, -170.36423, 7.6293945e-06, 545.0799, 0, 0, 0, 0, 0, 0, -150.56184, 0, 549.8127, 0, 0, 0, 0, 0, 0, -130, 0, 550, 0, 0, 0, 0, 0, 0, -110, 0, 550, 0, 0, 0, 0, 0, 0, -90, 0, 550, 0, 0, 0, 0, 0, 0, -70, 0, 550, 0, 0, 0, 0, 0, 0, -50, 0, 550, 0, 0, 0, 0, 0, 0, -29.862535, 7.6293945e-06, 545.3371, 0, 0, 0, 0, 0, 0, -13.215244, 7.6293945e-06, 533.0626, 0, 0, 0, 0, 0, 0, -4.098665, 7.6293945e-06, 519.6814, 0, 0, 0, 0, 0, 0, -0.048213482, 7.6293945e-06, 500.107, 0, 0, 0, 0, 0, 0, 3.7920675, 7.6293945e-06, 480.64902, 0, 0, 0, 0, 0, 0, 13.513225, 7.6293945e-06, 465.9133, 0, 0, 0, 0, 0, 0, 29.76715, 7.6293945e-06, 454.41486, 0, 0, 0, 0, 0, 0, 49.711926, 7.6293945e-06, 450.12488, 0, 0, 0, 0, 0, 0, 70, 0, 450, 0, 0, 0, 0, 0, 0, 90, 0, 450, 0, 0, 0, 0, 0, 0, 110.055405, 7.6293945e-06, 445.42627, 0, 0, 0, 0, 0, 0, 126.975784, 7.6293945e-06, 432.8683, 0, 0, 0, 0, 0, 0, 136.95703, 7.6293945e-06, 417.5506, 0, 0, 0, 0, 0, 0, 140, 0, 400, 0, 0, 0, 0, 0, 0, 140, 0, 380, 0, 0, 0, 0, 0, 0, 140, 0, 360, 0, 0, 0, 0, 0, 0, 140, 0, 340, 0, 0, 0, 0, 0, 0, 140, 0, 320, 0, 0, 0, 0, 0, 0, 140, 0, 300, 0, 0, 0, 0, 0, 0, 140, 0, 280, 0, 0, 0, 0, 0, 0, 140, 0, 260, 0, 0, 0, 0, 0, 0, 140, 0, 240, 0, 0, 0, 0, 0, 0, 140, 0, 220, 0, 0, 0, 0, 0, 0, 140, 0, 200, 0, 0, 0, 0, 0, 0, 140, 0, 180, 0, 0, 0, 0, 0, 0, 140, 0, 160, 0, 0, 0, 0, 0, 0, 140, 0, 140, 0, 0, 0, 0, 0, 0, 140, 0, 120, 0, 0, 0, 0, 0, 0, 140, 0, 100, 0, 0, 0, 0, 0, 0, 140, 0, 80, 0, 0, 0, 0, 0, 0, 140, 0, 60, 0, 0, 0, 0, 0, 0, 140, 0, 40, 0, 0, 0, 0, 0, 0, 140, 0, 20, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 136.2151, 7.6293945e-06, -18.930761, 0, 0, 0, 0, 0, 0, 124.47424, 7.6293945e-06, -35.771675, 0, 0, 0, 0, 0, 0, 109.556854, 7.6293945e-06, -45.911987, 0, 0, 0, 0, 0, 0, 90, 0, -50, 0, 0, 0, 0, 0, 0, 70, 0, -50, 0, 0, 0, 0, 0, 0, 50, 0, -50, 0, 0, 0, 0, 0, 0, 30.626865, 7.6293945e-06, -46.35706, 0, 0, 0, 0, 0, 0, 14.519331, 7.6293945e-06, -35.468895, 0, 0, 0, 0, 0, 0, 3.52941, 7.6293945e-06, -19.590664),
"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
@@ -161,10 +160,9 @@ compositor = SubResource("Compositor_mb5yv")
[node name="biome_generator" parent="." unique_id=1861369341 node_paths=PackedStringArray("rail_path") instance=ExtResource("5_yeh4a")]
rail_path = NodePath("../rail")
railway_pool = ExtResource("6_awm2r")
biome_list = Array[ExtResource("6_s3jnv")]([SubResource("Resource_3qrd0")])
entity_pool = ExtResource("35_hmtvu")
eye_line = 5
eye_line = 4
[node name="Terrain" type="MeshInstance3D" parent="." unique_id=219178561]
visible = false

71
export_presets.cfg Normal file
View File

@@ -0,0 +1,71 @@
[preset.0]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../tgcc.exe"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
shader_baker/enabled=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
application/export_d3d12=0
application/d3d12_agility_sdk_multiarch=true
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"

View File

@@ -11,7 +11,7 @@ config_version=5
[application]
config/name="tgcc"
run/main_scene="uid://38qpxwbpvd28"
run/main_scene="uid://vjf4bdxd8saj"
config/features=PackedStringArray("4.6", "Forward Plus")
run/max_fps=60
config/icon="uid://bfar1kk3pgq8f"

View File

@@ -57,16 +57,16 @@ script = ExtResource("2_yfmnf")
south = true
west = true
[node name="Argini" parent="." index="0" unique_id=487109030]
[node name="Argini" parent="." index="0" unique_id=357182272]
surface_material_override/0 = ExtResource("2_02qm6")
[node name="Sentieri" parent="." index="1" unique_id=320924856 groups=["weather_node"]]
[node name="Sentieri" parent="." index="1" unique_id=1704203551 groups=["weather_node"]]
surface_material_override/0 = ExtResource("3_yfmnf")
[node name="Terreno" parent="." index="2" unique_id=1980435075]
[node name="Terreno" parent="." index="2" unique_id=1478648388]
surface_material_override/0 = ExtResource("2_02qm6")
[node name="Water" parent="." index="3" unique_id=424969495]
[node name="Water" parent="." index="3" unique_id=415433510]
surface_material_override/0 = ExtResource("4_x1bjv")
[node name="grass" type="Node3D" parent="." index="4" unique_id=543668848 groups=["weather_vegetables_node", "wind_node"]]

Binary file not shown.

View File

@@ -1,44 +0,0 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dsvlxc3l5i1vk"
path="res://.godot/imported/Lantern_2.fbx-4aa3960da9dcc2d67f606c4b71816ef7.scn"
[deps]
source_file="res://tgcc/chunk/prop/pylon/Lantern_2.fbx"
dest_files=["res://.godot/imported/Lantern_2.fbx-4aa3960da9dcc2d67f606c4b71816ef7.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1
fbx/naming_version=2

464
tgcc/main_scene.tscn Normal file

File diff suppressed because one or more lines are too long