Added a custom calendar system

This commit is contained in:
Sebastian Bularca
2026-04-12 19:14:37 +02:00
parent 3428f168f9
commit 0e00e798fd
27 changed files with 790 additions and 22 deletions

View File

@@ -1,3 +1,4 @@
using Jovian.Calendar;
using Jovian.PopupSystem;
using Jovian.PopupSystem.UI;
using Jovian.SaveSystem;
@@ -125,14 +126,16 @@ namespace Nox.Game {
partyInventoryHandler ??= new PartyInventoryHandler(adventureData, adventureSettings);
partyInventoryHandler.Initialize();
timeHandler ??= new TimeHandler(adventureSettings, adventureData);
var calendarSettings = Addressables.LoadAssetAsync<CalendarSettings>("CalendarSettings").WaitForCompletion();
var worldClock = new WorldClock(calendarSettings);
timeHandler ??= new TimeHandler(adventureSettings, adventureData, worldClock);
zoneSystem ??= new ZoneSystem(mapRef.zonesObjectHolder);
partyMovementHandler ??= new PartyMovementHandler(partyRef, cameraController, mapLocationsReference, platformSettings.inputSettings, zoneSystem, adventureData, adventureSettings);
partyMovementHandler.Initialize();
guiReferences ??= Object.FindFirstObjectByType<GuiReferences>();
adventureView ??= new AdventureView(gameDataState, guiReferences, inputActions, adventureData, adventureSettings);
adventureView ??= new AdventureView(gameDataState, guiReferences, inputActions, adventureData, adventureSettings, worldClock);
adventureView.Initialize();
if(partyGuiView == null && guiReferences.partyMemberSlotPrefab != null) {

View File

@@ -1,3 +1,4 @@
using System;
using UnityEngine;
namespace Nox.Game {

View File

@@ -1,3 +1,4 @@
using Jovian.Calendar;
using UnityEngine;
namespace Nox.Game {
@@ -13,6 +14,7 @@ namespace Nox.Game {
public class TimeHandler {
private readonly AdventureSettings adventureSettings;
private readonly AdventureData adventureData;
private readonly WorldClock worldClock;
private float localTime;
@@ -23,34 +25,44 @@ namespace Nox.Game {
(0.25f, DayPhase.Morning),
(0.50f, DayPhase.Afternoon),
(0.75f, DayPhase.Dusk),
(0.90f, DayPhase.Night),
(0.90f, DayPhase.Night)
};
public TimeHandler(AdventureSettings adventureSettings, AdventureData adventureData) {
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;
if(!adventureData.isPartyMoving) {
return;
}
localTime += Time.deltaTime;
if (localTime >= adventureSettings.dayLength) {
if(localTime >= adventureSettings.dayLength) {
localTime -= adventureSettings.dayLength;
adventureData.currentDay++;
}
adventureData.currentTime = localTime / adventureSettings.dayLength;
adventureData.currentDayPhase = GetPhase(adventureData.currentTime);
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;
foreach(var (start, p) in PhaseThresholds) {
if(t >= start) {
phase = p;
}
else {
break;
}
}
return phase;
}