#Day/Night Cycle Timer Display Issue

1 messages · Page 1 of 1 (latest)

weak crescent
#

I'm following a YT tutorial and I think somewhere along the way I got mixed up. The time display should be showing hours and minutes up to 24 and then resetting. It currently goes from 0-60 and then resets. Anyone know where I made a mistake? I'm not sure how to post my scripts so I'll try and add them to the comments on here.

#

extends Node

const MINUTES_PER_DAY: int = 24 * 60
const MINUTES_PER_HOUR: int = 60
const GAME_MINUTE_DURATION: float = TAU / MINUTES_PER_DAY

var game_speed: float = 5.0

var initial_day: int = 1
var initial_hour: int = 12
var initial_minute: int = 30

var time: float = 0.0
var current_minute: int = -1
var current_day: int = 0

signal game_time(time: float)
signal time_tick(day: int, hour: int, minute: int)
signal time_tick_day(day: int)

func _ready() -> void:
set_initial_time()

func _process(delta: float) -> void:
time += delta * game_speed * GAME_MINUTE_DURATION
game_time.emit(time)

recalculate_time()

func set_initial_time() -> void:
var initial_total_minutes = initial_day * MINUTES_PER_DAY + (initial_hour * MINUTES_PER_HOUR) + initial_minute

time = initial_total_minutes * GAME_MINUTE_DURATION

func recalculate_time()-> void:
var total_minutes: int = int(time / GAME_MINUTE_DURATION)
var day: int = int(total_minutes / MINUTES_PER_DAY)
var current_day_minutes: int = total_minutes % MINUTES_PER_DAY
var hour: int = int(current_day_minutes % MINUTES_PER_HOUR)
var minute: int = int(current_day_minutes % MINUTES_PER_HOUR)

if current_minute != minute:
    current_minute = minute 
    time_tick.emit(day, hour, minute)
    
if current_day != day:
    current_day = day
    time_tick_day.emit(day)
#

extends Control

@onready var day_label: Label = $DayPanel/MarginContainer/DayLabel
@onready var time_label: Label = $TimePanel/MarginContainer/TimeLabel

@export var normal_speed: int = 5
@export var fast_speed: int = 100
@export var cheetah_speed: int = 200

func _ready() -> void:
DayAndNightCycleManager.time_tick.connect(on_time_tick)

func on_time_tick(day: int, hour: int, minute: int) -> void:
day_label.text = "Day " + str(day)
time_label.text = "%02d:%02d" % [hour, minute]

func _on_normal_speed_button_pressed() -> void:
DayAndNightCycleManager.game_speed = normal_speed

func _on_fast_speed_button_pressed() -> void:
DayAndNightCycleManager.game_speed = fast_speed

func _on_cheetah_speed_button_pressed() -> void:
DayAndNightCycleManager.game_speed = cheetah_speed