forked from Shardstone/trail-into-darkness
59 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|