add travel time
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user