Files
trail-into-darkness/Assets/Code/GameState/PlayModes/TimeHandler.cs
2026-03-19 18:12:07 +01:00

59 lines
1.7 KiB
C#

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 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) {
this.adventureSettings = adventureSettings;
this.adventureData = adventureData;
localTime = adventureData.currentTime * adventureSettings.dayLength;
}
public void Tick() {
if (!adventureData.isPartyMoving) return;
localTime += Time.deltaTime;
if (localTime >= adventureSettings.dayLength) {
localTime -= adventureSettings.dayLength;
adventureData.currentDay++;
}
adventureData.currentTime = localTime / adventureSettings.dayLength;
adventureData.currentDayPhase = GetPhase(adventureData.currentTime);
}
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;
}
}
}