add travel time

This commit is contained in:
Overside srl
2026-01-22 12:09:46 +01:00
parent e1a95d7417
commit d7f88649a7
25 changed files with 139 additions and 127 deletions

View File

@@ -2,14 +2,14 @@
dock_3_selected_tab_idx=0
dock_4_selected_tab_idx=0
dock_5_selected_tab_idx=0
dock_5_selected_tab_idx=1
dock_floating={}
dock_filesystem_h_split_offset=480
dock_filesystem_v_split_offset=0
dock_filesystem_display_mode=0
dock_filesystem_file_sort=0
dock_filesystem_file_list_display_mode=1
dock_filesystem_selected_paths=PackedStringArray("res://resources/audio_on.png")
dock_filesystem_selected_paths=PackedStringArray("res://resources/audio_off.png")
dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://scripts/", "res://scenes/", "res://resources/")
dock_node_current_tab=0
dock_history_include_scene=true
@@ -28,7 +28,7 @@ dock_5="Inspector,Node,History"
[EditorNode]
open_scenes=PackedStringArray("res://scenes/main.tscn")
open_scenes=PackedStringArray("res://scenes/main.tscn", "res://scenes/gamestate.tscn", "res://scenes/musicmanager.tscn")
current_scene="res://scenes/main.tscn"
center_split_offset=-864
selected_default_debugger_tab_idx=0
@@ -53,7 +53,7 @@ zoom_factor=1.0714285
[GameView]
floating_window_rect=Rect2i(4156, 1299, 1399, 813)
floating_window_rect=Rect2i(508, 56, 8600, 3424)
floating_window_screen=1
[ShaderEditor]

View File

@@ -1,12 +1,12 @@
63f7b34db8d8cdea90c76aacccf841ec
::res://::1768994992
::res://::1769073897
export_presets.cfg::TextFile::-1::1768659892::0::1::::<><><>0<>0<><>::
::res://build/::1768659995
::res://resources/::1768814043
audio_off.png::CompressedTexture2D::976528084422995703::1768814036::1768814043::1::::<><><>0<>0<>8eb956cbe7f28bcd33a4d0f3f309056a<>res://.godot/imported/audio_off.png-5de4b789ed4209650f8e97f1032a5f0f.ctex::
audio_on.png::CompressedTexture2D::3003704488001052360::1768814021::1768814043::1::::<><><>0<>0<>973b72d02e17330456b5163139ac14ea<>res://.godot/imported/audio_on.png-657a96ae18a58fc0378492c2262197f8.ctex::
::res://build/::1769067196
::res://resources/::1769079583
audio_off.png::CompressedTexture2D::976528084422995703::1769079374::1769079589::1::::<><><>0<>0<>8eb956cbe7f28bcd33a4d0f3f309056a<>res://.godot/imported/audio_off.png-5de4b789ed4209650f8e97f1032a5f0f.ctex::
audio_on.png::CompressedTexture2D::3003704488001052360::1769079583::1769079589::1::::<><><>0<>0<>973b72d02e17330456b5163139ac14ea<>res://.godot/imported/audio_on.png-657a96ae18a58fc0378492c2262197f8.ctex::
thomastanks_new.mp3::AudioStreamMP3::2620953876642984028::1768657428::1768657898::1::::<><><>0<>0<>71420e05b9122bd8011b233595a3388e<>res://.godot/imported/thomastanks_new.mp3-faeee3575032f4283c1731a17141e11b.mp3str::
::res://resources/train kit/::1768551395
::res://resources/train kit/::1769067197
railroad-corner-large-ramp.obj::Mesh::2409206090616818222::1727040297::1768551394::1::::<><><>0<>0<>a61f88305257a119568988a927ed078e<>res://.godot/imported/railroad-corner-large-ramp.obj-c7a23496c1b2b1d5a93b93632f472e09.mesh<*>res://.godot/imported/railroad-corner-large-ramp.obj-c7a23496c1b2b1d5a93b93632f472e09.mesh::uid://cdwwcby54pecs::::res://resources/train kit/Textures/colormap.png
railroad-corner-large.obj::Mesh::1018263567210823548::1727040297::1768551394::1::::<><><>0<>0<>ba409591917422db5258b9c49d31d67d<>res://.godot/imported/railroad-corner-large.obj-767290257b068e81bba8afabe771bb45.mesh<*>res://.godot/imported/railroad-corner-large.obj-767290257b068e81bba8afabe771bb45.mesh::uid://cdwwcby54pecs::::res://resources/train kit/Textures/colormap.png
railroad-corner-small-ramp.obj::Mesh::4748424812719052670::1727040297::1768551394::1::::<><><>0<>0<>47dfd4cc2518e09b75595da6e912f629<>res://.godot/imported/railroad-corner-small-ramp.obj-30da76b04fe12bfd305857de58c73650.mesh<*>res://.godot/imported/railroad-corner-small-ramp.obj-30da76b04fe12bfd305857de58c73650.mesh::uid://cdwwcby54pecs::::res://resources/train kit/Textures/colormap.png
@@ -110,17 +110,17 @@ train-locomotive-passenger-b.obj::Mesh::1005507222256758922::1727040295::1768551
train-tram-classic.obj::Mesh::3684736170611761855::1727040295::1768551393::1::::<><><>0<>0<>d1d075ca4ec51c7c6d88bedade388eb6<>res://.godot/imported/train-tram-classic.obj-5c5f7e3ed997a3c6e1af166558bae205.mesh<*>res://.godot/imported/train-tram-classic.obj-5c5f7e3ed997a3c6e1af166558bae205.mesh::uid://cdwwcby54pecs::::res://resources/train kit/Textures/colormap.png
train-tram-modern.obj::Mesh::7951114505230208222::1727040295::1768551393::1::::<><><>0<>0<>e6e1242a7148f32651a5ee57a18fd513<>res://.godot/imported/train-tram-modern.obj-91e1e88eed04b0393ca1115cb1980e1b.mesh<*>res://.godot/imported/train-tram-modern.obj-91e1e88eed04b0393ca1115cb1980e1b.mesh::uid://cdwwcby54pecs::::res://resources/train kit/Textures/colormap.png
train-tram-round.obj::Mesh::115250456338501034::1727040295::1768551393::1::::<><><>0<>0<>5e3772ddb59635a364b94e1db000bd4a<>res://.godot/imported/train-tram-round.obj-1b613e087f922f3f788c8bf27b8a5616.mesh<*>res://.godot/imported/train-tram-round.obj-1b613e087f922f3f788c8bf27b8a5616.mesh::uid://cdwwcby54pecs::::res://resources/train kit/Textures/colormap.png
::res://resources/train kit/Textures/::1768551396
::res://resources/train kit/Textures/::1769067197
colormap.png::CompressedTexture2D::5030163645319353198::1727040840::1768551396::1::::<><><>0<>0<>49486029a612050ab47ae771aec92b8c<>res://.godot/imported/colormap.png-d3d02b00fd834f010bf45b2b9259ea63.s3tc.ctex::
::res://scenes/::1768930393
gamestate.tscn::PackedScene::4137542781585662412::1768815074::0::1::::<><><>0<>0<><>::uid://s80bt8i6u2hv::::res://scripts/gamestate.gd
main.tscn::PackedScene::7111673961189096216::1768930393::0::1::::<><><>0<>0<><>::uid://dfyo0h5yj3us8::::res://scripts/main.gd<>uid://bymoo78gun6a4::::res://scripts/track_generator.gd<>uid://cvn333pymsowx::::res://scripts/train.gd<>uid://cgy51h6a5syer::::res://scripts/train_camera.gd<>uid://cer3o7xlhju7v::::res://scenes/train.tscn<>uid://qrf08uiuhyqg::::res://scenes/musicmanager.tscn<>uid://bi2atrvjj23tk::::res://resources/audio_on.png<>uid://by7iywhy2d8uy::::res://scenes/gamestate.tscn<>uid://n6bjl02ikh00::::res://resources/audio_off.png
::res://scenes/::1769079144
gamestate.tscn::PackedScene::4137542781585662412::1769074093::0::1::::<><><>0<>0<><>::uid://s80bt8i6u2hv::::res://scripts/gamestate.gd
main.tscn::PackedScene::7111673961189096216::1769079144::0::1::::<><><>0<>0<><>::uid://dfyo0h5yj3us8::::res://scripts/main.gd<>uid://bymoo78gun6a4::::res://scripts/track_generator.gd<>uid://cvn333pymsowx::::res://scripts/train.gd<>uid://cgy51h6a5syer::::res://scripts/train_camera.gd<>uid://cer3o7xlhju7v::::res://scenes/train.tscn<>uid://qrf08uiuhyqg::::res://scenes/musicmanager.tscn<>uid://bi2atrvjj23tk::::res://resources/audio_on.png<>uid://by7iywhy2d8uy::::res://scenes/gamestate.tscn<>uid://n6bjl02ikh00::::res://resources/audio_off.png
musicmanager.tscn::PackedScene::1158465914396145662::1768815835::0::1::::<><><>0<>0<><>::uid://bdluyy5uodjb5::::res://resources/thomastanks_new.mp3
train.tscn::PackedScene::5090417957456705533::1768656983::0::1::::<><><>0<>0<><>::
::res://scripts/::1768930355
gamestate.gd::GDScript::1333044411309547839::1768893877::0::1::::GameState<>Node<><>0<>0<><>::
main.gd::GDScript::7560646433224437573::1768930355::0::1::::<>Node3D<><>0<>0<><>::
::res://scripts/::1769079144
gamestate.gd::GDScript::1333044411309547839::1769079115::0::1::::<>Node<><>0<>0<><>::
main.gd::GDScript::7560646433224437573::1769079144::0::1::::<>Node3D<><>0<>0<><>::
objloader.gd::GDScript::2596173299165953535::1768586602::0::1::::OBJLoader<>RefCounted<><>0<>0<><>::
track_generator.gd::GDScript::4096602235093631041::1768587411::0::1::::TrackGenerator<>Node3D<><>0<>0<><>::
train.gd::GDScript::6275395567547538251::1768659862::0::1::::Train<>Node3D<><>0<>0<><>::
train.gd::GDScript::6275395567547538251::1769077662::0::1::::Train<>Node3D<><>0<>0<><>::
train_camera.gd::GDScript::5245387851329565609::1768586722::0::1::::TrainCamera<>Camera3D<><>0<>0<><>::

View File

@@ -1,3 +1,6 @@
res://scripts/main.gd
res://scenes/main.tscn
res://scripts/gamestate.gd
res://scripts/main.gd
res://scenes/gamestate.tscn
res://scripts/train.gd
res://scenes/musicmanager.tscn

View File

@@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@@ -8,7 +8,7 @@ Anim={
"grid_snap_active": false,
"grid_step": Vector2(8, 8),
"grid_visibility": 1,
"ofs": Vector2(-1149.5973, 303.8107),
"ofs": Vector2(-929.1912, -15.849335),
"primary_grid_step": Vector2i(8, 8),
"show_group_gizmos": true,
"show_guides": true,
@@ -34,7 +34,7 @@ Anim={
"snap_rotation_step": 0.2617994,
"snap_scale": false,
"snap_scale_step": 0.1,
"zoom": 1.6105102
"zoom": 1.3310001
}
3D={
"fov": 70.01,
@@ -187,4 +187,4 @@ Anim={
"zfar": 4000.01,
"znear": 0.05
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@20438/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@62/@VBoxContainer@63/@EditorMainScreen@103/MainScreen/@CanvasItemEditor@10871/@VSplitContainer@10516/@HSplitContainer@10518/@HSplitContainer@10520/@Control@10521/@SubViewportContainer@10522/@SubViewport@10523/Main/GameState")])
selected_nodes=Array[NodePath]([])

View File

@@ -1,5 +1,5 @@
[folding]
node_unfolds=[NodePath("."), PackedStringArray("Visibility", "Transform"), NodePath("TrackGenerator"), PackedStringArray("Visibility"), NodePath("Train"), PackedStringArray("Transform", "Train"), NodePath("TrainCamera"), PackedStringArray("Transform"), NodePath("HUD/tripdistance_label"), PackedStringArray("Layout", "Layout/Transform", "label_settings"), NodePath("HUD/speed_label"), PackedStringArray("label_settings", "Layout", "Layout/Transform"), NodePath("HUD/camera_label"), PackedStringArray("Layout", "Layout/Transform", "label_settings"), NodePath("HUD/controls_label"), PackedStringArray("Layout", "Layout/Transform"), NodePath("HUD/totaldistance_label"), PackedStringArray("Layout", "Layout/Transform"), NodePath("HUD/newtrain_button"), PackedStringArray("Layout", "Layout/Transform"), NodePath("HUD/audio_button"), PackedStringArray("Layout", "Layout/Transform"), NodePath("DirectionalLight3D"), PackedStringArray("Directional Shadow", "Light", "Shadow"), NodePath("WorldEnvironment"), PackedStringArray("environment")]
node_unfolds=[NodePath("."), PackedStringArray("Visibility", "Transform"), NodePath("TrackGenerator"), PackedStringArray("Visibility"), NodePath("Train"), PackedStringArray("Transform", "Train"), NodePath("TrainCamera"), PackedStringArray("Transform"), NodePath("HUD/tripdistance_label"), PackedStringArray("Layout", "Layout/Transform", "label_settings"), NodePath("HUD/speed_label"), PackedStringArray("label_settings", "Layout", "Layout/Transform"), NodePath("HUD/camera_label"), PackedStringArray("Layout", "Layout/Transform", "label_settings"), NodePath("HUD/controls_label"), PackedStringArray("Layout", "Layout/Transform"), NodePath("HUD/totaldistance_label"), PackedStringArray("Layout", "Layout/Transform"), NodePath("HUD/audio_button"), PackedStringArray("Layout", "Layout/Transform"), NodePath("DirectionalLight3D"), PackedStringArray("Directional Shadow", "Light", "Shadow"), NodePath("WorldEnvironment"), PackedStringArray("environment")]
resource_unfolds=["res://scenes/main.tscn::LabelSettings_tbgi4", PackedStringArray("Font"), "res://scenes/main.tscn::LabelSettings_tefeu", PackedStringArray("Font"), "res://scenes/musicmanager.tscn::GDScript_ht1d5", PackedStringArray(), "res://scenes/main.tscn::Environment_tipki", PackedStringArray("Background", "Sky", "Fog", "Ambient Light", "Tonemap", "sky")]
nodes_folded=[]
nodes_folded=[NodePath("HUD")]

View File

@@ -1,7 +1,7 @@
[game_view]
select_mode=0
embed_size_mode=2
embed_size_mode=0
[editor_metadata]
@@ -10,13 +10,13 @@ use_advanced_connections=false
[recent_files]
scenes=["res://scenes/gamestate.tscn", "res://scenes/musicmanager.tscn", "res://scenes/main.tscn", "res://scenes/game_state.tscn", "res://scenes/train.tscn", "res://scenes/wagon.tscn"]
scripts=["res://scenes/musicmanager.tscn::GDScript_ht1d5", "res://Scripts/game_state.gd", "res://scripts/gamestate.gd", "res://scripts/musicmanager.gd", "res://scripts/common.gd", "res://scripts/train_camera.gd", "res://scripts/train.gd", "res://scripts/main.gd", "res://scripts/track_generator.gd"]
scenes=["res://scenes/musicmanager.tscn", "res://scenes/gamestate.tscn", "res://scenes/main.tscn", "res://scenes/game_state.tscn", "res://scenes/train.tscn", "res://scenes/wagon.tscn"]
scripts=["Texture2D", "res://scenes/musicmanager.tscn::GDScript_ht1d5", "res://scenes/gamemanager.gd", "res://Scripts/game_state.gd", "res://scripts/gamestate.gd", "res://scripts/musicmanager.gd", "res://scripts/common.gd", "res://scripts/train_camera.gd", "res://scripts/train.gd", "res://scripts/main.gd"]
[dialog_bounds]
create_new_node=Rect2(1146, 771, 1800, 1400)
project_settings=Rect2(889, 416, 2400, 1400)
project_settings=Rect2(2865, 809, 2400, 1400)
export=Rect2(1020, 700, 1800, 1000)
[script_setup]

View File

@@ -1,5 +1,5 @@
res://resources
res://scenes
res://scripts
res://resources
C:/Users/FlavioFabbrizi/Downloads/godot_train_project/build
C:/Users/FlavioFabbrizi/Downloads/godot_train_project
res://scripts

View File

@@ -17,11 +17,11 @@ state={
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 1,
"column": 88,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 21,
"scroll_position": 0.0,
"row": 117,
"scroll_position": 83.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
@@ -34,8 +34,8 @@ state={
"column": 0,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 49,
"scroll_position": 0.0,
"row": 53,
"scroll_position": 21.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
@@ -49,7 +49,7 @@ state={
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 100,
"scroll_position": 49.0,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
@@ -77,10 +77,10 @@ state={
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 26,
"column": 0,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 24,
"row": 12,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"

View File

@@ -1,12 +1,4 @@
list=[{
"base": &"Node",
"class": &"GameState",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://scripts/gamestate.gd"
}, {
"base": &"RefCounted",
"class": &"OBJLoader",
"icon": "",

View File

@@ -1,3 +1,3 @@
source_md5="a14a08c48ef68a4afe2f75477955423e"
dest_md5="f06c7e7cf6f2019d54db26eea986ce71"
source_md5="f2a5a1f783dc0e6a910ee32b91a94921"
dest_md5="993e18380290b3898325c1c9341d99a3"

View File

@@ -1,3 +1,3 @@
source_md5="86413e68b659658d22adbd8952e64884"
dest_md5="be9ec99dd489a2d6d94ae1f7813f0107"
source_md5="fa9dcf4ce66b77000b02fafce4513ac0"
dest_md5="92988f039aec241d22c7300bac6acc82"

View File

@@ -1,3 +1,3 @@
[res://scenes/main.tscn]
groups=[&"state"]
groups=[&"save_data"]

Binary file not shown.

View File

@@ -26,7 +26,7 @@ window/stretch/mode="canvas_items"
[global_group]
state=""
save_data=""
[input]
@@ -50,6 +50,11 @@ speed_down={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
]
}
change_train={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
[rendering]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -85,9 +85,9 @@ label_settings = SubResource("LabelSettings_tefeu")
[node name="camera_label" type="Label" parent="HUD"]
layout_mode = 0
offset_left = 20.0
offset_top = 93.0
offset_top = 149.0
offset_right = 1280.0
offset_bottom = 116.0
offset_bottom = 172.0
size_flags_vertical = 0
text = "Camera: "
label_settings = SubResource("LabelSettings_tefeu")
@@ -95,14 +95,15 @@ label_settings = SubResource("LabelSettings_tefeu")
[node name="controls_label" type="Label" parent="HUD"]
layout_mode = 0
offset_left = 20.0
offset_top = 145.0
offset_top = 170.0
offset_right = 1280.0
offset_bottom = 272.0
offset_bottom = 297.0
size_flags_vertical = 0
text = "Comandi:
\"W / S - Accelera / Rallenta\",
\"A / D - Ruota camera\",
\"SPACE - Cambia camera\",
\"TAB - Cambia treno\",
\"ESC - Esci\""
label_settings = SubResource("LabelSettings_tefeu")
@@ -116,29 +117,35 @@ size_flags_vertical = 0
text = "Distanza totale: 0"
label_settings = SubResource("LabelSettings_tbgi4")
[node name="newtrain_button" type="Button" parent="HUD"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = 594.0
offset_top = 640.0
offset_right = 700.0
offset_bottom = 671.0
grow_horizontal = 2
grow_vertical = 0
text = "Nuovo treno"
[node name="audio_button" type="Button" parent="HUD"]
layout_mode = 0
offset_left = 4.0
offset_top = 701.0
offset_right = 179.0
offset_bottom = 877.0
scale = Vector2(0.1, 0.1)
offset_left = 6.0
offset_top = 678.0
offset_right = 181.0
offset_bottom = 854.0
scale = Vector2(0.2, 0.2)
icon = ExtResource("6_tipki")
flat = true
[node name="triptime_label" type="Label" parent="HUD"]
layout_mode = 0
offset_left = 19.0
offset_top = 94.0
offset_right = 1279.0
offset_bottom = 117.0
size_flags_vertical = 0
text = "Tempo viaggio: 0"
label_settings = SubResource("LabelSettings_tbgi4")
[node name="totaltime_label" type="Label" parent="HUD"]
layout_mode = 0
offset_left = 19.0
offset_top = 117.0
offset_right = 1279.0
offset_bottom = 140.0
size_flags_vertical = 0
text = "Tempo totale: 0"
label_settings = SubResource("LabelSettings_tbgi4")
[node name="MusicManager" parent="." instance=ExtResource("6_tefeu")]
icon_active = ExtResource("6_tipki")
@@ -152,11 +159,14 @@ shadow_bias = 0.04
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_tipki")
[node name="GameState" parent="." groups=["state"] instance=ExtResource("7_o6xl0")]
[node name="GameState" parent="." groups=["save_data"] instance=ExtResource("7_o6xl0")]
[node name="AutoSaveTimer" type="Timer" parent="."]
wait_time = 10.0
[connection signal="pressed" from="HUD/newtrain_button" to="Train" method="_on_button_pressed"]
[node name="TripTime" type="Timer" parent="."]
autostart = true
[connection signal="pressed" from="HUD/audio_button" to="MusicManager" method="_on_audio_button_pressed"]
[connection signal="timeout" from="AutoSaveTimer" to="." method="_on_timer_timeout"]
[connection signal="timeout" from="TripTime" to="." method="_on_trip_time_timeout"]

View File

@@ -11,6 +11,7 @@ script/source = "extends Node
@export var icon_inactive: Texture2D
var isPlaying = true
func play_track():
player.play()
isPlaying = true

View File

@@ -1,30 +1,24 @@
extends Node
class_name GameState
var total_distance : float = 0.0
var initial_total_distance: float = 0.0
var total_time : int = 0
var initial_distance: float = 0.0
var initial_time: int = 0
func _ready() -> void:
add_to_group("state")
add_to_group("save_data")
func getTotalDistance() -> float:
return total_distance + initial_total_distance
func AddToTotalDistance(value :float):
total_distance =+ value
func SetInitialValue(value :float):
initial_total_distance = value
total_distance = value
func SetInitialValue(distance :float, time: int):
initial_distance = distance
initial_time = time
func save() -> Dictionary:
return {
"filename": get_scene_file_path(),
"parent": get_parent().get_path(),
"total_distance": getTotalDistance()
"total_distance": initial_distance + total_distance,
"total_time": initial_time + total_time
}

View File

@@ -8,18 +8,24 @@ extends Node3D
@onready var camera_label : Label = $HUD/camera_label
@onready var distance_label : Label = $HUD/tripdistance_label
@onready var total_distance_label : Label = $HUD/totaldistance_label
@onready var time_label : Label = $HUD/triptime_label
@onready var totaltime_label : Label = $HUD/totaltime_label
@onready var auto_save_timer = $AutoSaveTimer
@onready var trip_timer = $TripTime
var savegame_path: String = "user://savegame.save"
var total_time_in_secs : int = 0
func _ready() -> void:
# caricamento stato gioco
##load_game()
load_game()
# avvia autosaver
auto_save_timer.start()
# time
trip_timer.start()
train.track_generator = track_generator
camera.train = train
@@ -55,10 +61,24 @@ func _update_ui() -> void:
var km = train.distance_traveled / 1000.0
distance_label.text = "Distanza viaggio: %.2f km" % km
if total_distance_label and train and Gamestate:
Gamestate.AddToTotalDistance(train.distance_traveled)
var km = (Gamestate.getTotalDistance() / 1000)
if total_distance_label and train:
Gamestate.total_distance = train.distance_traveled
var km = (Gamestate.total_distance + Gamestate.initial_distance) / 1000
total_distance_label.text = "Distanza totale: %.2f km" % km
if time_label and train:
var h = int(total_time_in_secs / 3600.0)
var m = int(total_time_in_secs / 60.0)
var s = total_time_in_secs - m * 60
time_label.text = "Tempo viaggio: %02d:%02d:%02d" % [h, m, s]
if totaltime_label and train:
Gamestate.total_time = total_time_in_secs
var tot = Gamestate.total_time + Gamestate.initial_time
var h = int(tot / 3600.0)
var m = int(tot / 60.0)
var s = tot - m * 60
totaltime_label.text = "Tempo totale: %02d:%02d:%02d" % [h, m, s]
if camera_label and camera:
camera_label.text = "Camera: %s" % camera.get_mode_name()
@@ -74,7 +94,7 @@ func _update_ground() -> void:
func save_game():
var save_file = FileAccess.open(savegame_path, FileAccess.WRITE)
var save_nodes = get_tree().get_nodes_in_group("state")
var save_nodes = get_tree().get_nodes_in_group("save_data")
for node in save_nodes:
if !node.has_method("save"):
@@ -86,11 +106,7 @@ func save_game():
func load_game():
if not FileAccess.file_exists(savegame_path):
return # nessun salvataggio trovato
var existing_nodes = get_tree().get_nodes_in_group("state")
for node in existing_nodes:
node.queue_free()
var save_file = FileAccess.open(savegame_path, FileAccess.READ)
while save_file.get_position() < save_file.get_length():
var json_string = save_file.get_line()
@@ -99,23 +115,14 @@ func load_game():
if node_data == null:
continue
# Ricrea il nodo dalla scena salvata
var new_node = load(node_data["filename"]).instantiate()
# Aggiungi al parent originale
get_node(node_data["parent"]).add_child(new_node)
# Ripristina le proprietà
new_node.SetInitialValue(node_data["total_distance"])
##new_node.total_distance = new_node.initial_total_distance
# Ripristina proprietà custom
for key in node_data.keys():
if key in ["filename", "parent", "total_distance"]:
continue
if key in new_node:
new_node.set(key, node_data[key])
if node_data["filename"] == "res://scenes/gamestate.tscn" and node_data["parent"] == "/root":
Gamestate.SetInitialValue(node_data["total_distance"], node_data["total_time"])
func _on_timer_timeout() -> void:
save_game()
func _on_trip_time_timeout() -> void:
total_time_in_secs += 1

View File

@@ -48,11 +48,6 @@ func _ready() -> void:
current_speed = base_speed
func _on_button_pressed() -> void:
_create_train()
current_speed = base_speed
func _remove_train():
for node in get_tree().get_nodes_in_group(group_name):
node.queue_free()
@@ -146,7 +141,9 @@ func _handle_input(delta: float) -> void:
elif Input.is_action_pressed("speed_down"):
current_speed = max(current_speed - acceleration * delta, min_speed)
speed_changed.emit(current_speed)
elif Input.is_action_pressed("change_train"):
_create_train()
current_speed = base_speed
func _update_movement(delta: float) -> void:
distance_traveled += current_speed * delta