Files
trail-into-darkness/Assets/Code/GameState/PlayModes/TimeHandler.cs
2026-04-12 19:14:37 +02:00

71 lines
2.0 KiB
C#

using Jovian.Calendar;
using UnityEngine;
namespace Nox.Game {
public enum DayPhase {
Midnight,
Dawn,
Morning,
Afternoon,
Dusk,
Night
}
public class TimeHandler {
private readonly AdventureSettings adventureSettings;
private readonly AdventureData adventureData;
private readonly WorldClock worldClock;
private float localTime;
private static readonly (float start, DayPhase phase)[] PhaseThresholds = {
(0.00f, DayPhase.Midnight),
(0.05f, DayPhase.Night),
(0.17f, DayPhase.Dawn),
(0.25f, DayPhase.Morning),
(0.50f, DayPhase.Afternoon),
(0.75f, DayPhase.Dusk),
(0.90f, DayPhase.Night)
};
public TimeHandler(AdventureSettings adventureSettings, AdventureData adventureData, WorldClock worldClock) {
this.adventureSettings = adventureSettings;
this.adventureData = adventureData;
this.worldClock = worldClock;
localTime = adventureData.currentTime * adventureSettings.dayLength;
}
public void Tick() {
if(!adventureData.isPartyMoving) {
return;
}
localTime += Time.deltaTime;
if(localTime >= adventureSettings.dayLength) {
localTime -= adventureSettings.dayLength;
}
var normalized = localTime / adventureSettings.dayLength;
worldClock.Tick(normalized);
adventureData.currentTime = normalized;
adventureData.currentDayPhase = GetPhase(normalized);
}
private static DayPhase GetPhase(float t) {
var phase = DayPhase.Midnight;
foreach(var (start, p) in PhaseThresholds) {
if(t >= start) {
phase = p;
}
else {
break;
}
}
return phase;
}
}
}