add whistle to train
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
extends Control
|
||||
|
||||
|
||||
@onready var game_menu: Control = $%GameMenu
|
||||
@onready var game_menu_panel: Control = $%GameMenuPanel
|
||||
@onready var menu_icon_button: Button = $%MenuIconButton
|
||||
@@ -89,6 +88,8 @@ func _on_weather_row_on_option_changed(data: String) -> void:
|
||||
pick_random_weather()
|
||||
_:
|
||||
pass
|
||||
|
||||
AchievementManager.is_unlocked("ACH_CHANGE_METEO")
|
||||
|
||||
func pick_random_weather() -> void:
|
||||
var valid_buttons = []
|
||||
@@ -166,6 +167,8 @@ func _on_photo_taken_finished() -> void:
|
||||
await tween.finished
|
||||
photo_mode_black_screen.hide()
|
||||
GameState.on_photo_mode_black_screen_disappeared.emit()
|
||||
StatsManager.add_int("stat_photo_number", 1)
|
||||
StatsManager.store()
|
||||
|
||||
func hide_ui_for_photo_mode() -> void:
|
||||
TweenFX.fade_out(weather_row, 0.25)
|
||||
|
||||
70
core/main_scene_ui/total_stats_display.gd
Normal file
70
core/main_scene_ui/total_stats_display.gd
Normal file
@@ -0,0 +1,70 @@
|
||||
## Updates total elapsed time and train distance labels.
|
||||
class_name TotalStatsDisplay
|
||||
extends Node
|
||||
|
||||
const RAILS_SCRIPT = preload("res://core/biome_generator/rails.gd")
|
||||
const SECONDS_PER_MINUTE: int = 60
|
||||
const MINUTES_PER_HOUR: int = 60
|
||||
const HOURS_PER_DAY: int = 24
|
||||
#DISTANCE_KM_PER_UNIT is taken from rails.gd constant
|
||||
|
||||
@export var time_label_path: NodePath
|
||||
@export var distance_label_path: NodePath
|
||||
@export var rail_path: NodePath
|
||||
|
||||
var _elapsed_seconds: float = 0.0
|
||||
var _total_distance_km: float = 0.0
|
||||
var _last_train_progress: float = -1.0
|
||||
|
||||
@onready var _time_label: Label = get_node_or_null(time_label_path) as Label
|
||||
@onready var _distance_label: Label = get_node_or_null(distance_label_path) as Label
|
||||
@onready var _rail_path: Path3D = get_node_or_null(rail_path) as Path3D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_update_time_label()
|
||||
_update_distance_label()
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
_elapsed_seconds += delta
|
||||
_update_total_distance()
|
||||
_update_time_label()
|
||||
_update_distance_label()
|
||||
|
||||
|
||||
func _update_total_distance() -> void:
|
||||
if _rail_path == null or _rail_path.curve == null:
|
||||
return
|
||||
|
||||
var current_train_progress: float = float(_rail_path.get("train_progress"))
|
||||
if _last_train_progress < 0.0:
|
||||
_last_train_progress = current_train_progress
|
||||
return
|
||||
|
||||
var total_length: float = _rail_path.curve.get_baked_length()
|
||||
if total_length <= 0.0:
|
||||
return
|
||||
|
||||
var progress_delta: float = absf(current_train_progress - _last_train_progress)
|
||||
var wrapped_progress_delta: float = minf(progress_delta, total_length - progress_delta)
|
||||
_total_distance_km += wrapped_progress_delta * RAILS_SCRIPT.DISTANCE_KM_PER_UNIT
|
||||
_last_train_progress = current_train_progress
|
||||
|
||||
|
||||
func _update_time_label() -> void:
|
||||
if _time_label == null:
|
||||
return
|
||||
|
||||
var total_minutes: int = int(floor(_elapsed_seconds / SECONDS_PER_MINUTE))
|
||||
var days: int = floori(float(total_minutes) / float(MINUTES_PER_HOUR * HOURS_PER_DAY))
|
||||
var hours: int = floori(float(total_minutes) / float(MINUTES_PER_HOUR)) % HOURS_PER_DAY
|
||||
var minutes: int = total_minutes % MINUTES_PER_HOUR
|
||||
_time_label.text = "Time %dd %02dh %02dm" % [days, hours, minutes]
|
||||
|
||||
|
||||
func _update_distance_label() -> void:
|
||||
if _distance_label == null:
|
||||
return
|
||||
|
||||
_distance_label.text = "Distance %.1f km" % _total_distance_km
|
||||
1
core/main_scene_ui/total_stats_display.gd.uid
Normal file
1
core/main_scene_ui/total_stats_display.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c2usnexa5x7pg
|
||||
Reference in New Issue
Block a user