DevLog #4 — Die Zeit laeuft: Uhr, Lieferungen und ein lebendiger Spieltag
EPIC_016 abgeschlossen: RiverTycoon hat eine laufende 24h-Uhr, ein vollstaendiges Liefersystem und echte Pakete die an der Tuer klingeln. Zum ersten Mal laeuft ein echter Spieltag.
Wenn Zeit ploetzlich eine Bedeutung hat
Ein Spiel ohne Zeit ist ein Spiel ohne Druck. In RiverTycoon laeuft seit EPIC_016 eine 24-Stunden-Uhr — und mit ihr aendert sich alles.
Nicht dramatisch. Nicht sichtbar auf den ersten Blick. Aber sobald die Uhr tickt, faengt der Spieler an, anders zu denken.
Der TimeManager als Spielleiter
Der TimeManager ist kein simpler Countdown. Er ist die zentrale Instanz die andere Systeme synchronisiert. Jobs haben Deadlines die in Spielstunden gemessen werden. Lieferungen kommen zu bestimmten Tageszeiten an. Energieverbrauch skaliert mit der vergangenen Zeit, nicht mit echten Sekunden.
Das Verhaeltnis von Spielzeit zu Echtzeit ist konfigurierbar — aktuell laeuft eine Spielstunde in etwa drei Echtzeit-Minuten. Schnell genug fuer Spannung, langsam genug um zu denken.
TimeManager.cs
├── CurrentHour / CurrentMinute (float, 0-24)
├── OnHourChanged (UnityEvent) — triggert Lieferungen, Energie-Ticks
├── OnDayChanged (UnityEvent) — triggert Miete, Reset-Logik
└── TimeScale (konfigurierbar per BalanceConfig)
Alle anderen Systeme abonnieren Events — kein System fragt aktiv nach der Zeit. Der TimeManager schiebt, nicht die anderen ziehen.
Damazon Crime klingelt an der Tuer
Das Liefersystem war der aufwendigste Teil von EPIC_016. Die Herausforderung: Ein Paket soll als echtes 3D-Objekt in der Spielwelt erscheinen — nicht als UI-Popup, nicht als Inventar-Eintrag. Der Spieler soll es sehen, hingehen, und es aufnehmen.
Das klingt einfach. Die Implikationen sind es nicht.
Jedes gelieferte Paket braucht einen WorldItem-Komponenten, eine Spawn-Position die nicht mit Moebelkollisionen ueberlappt, einen Collider der per Raycast anklickbar ist, und eine Verbindung zum InventoryManager der das Item nach dem Aufnehmen korrekt einbucht. Skalierte Asset-Store-Modelle bringen dabei gelegentlich Collider mit die mit transform.lossyScale nicht korrekt berechnet werden — dieser Randfall ist jetzt sauber abgefangen.
Das Ergebnis: Ein Pizza-Karton landet auf dem Schreibtisch. Du klickst drauf. Er verschwindet aus der Welt und taucht im Inventar auf.
Food Delivery als zweites System
Parallel zum Paket-System kommt die Food Delivery. Der Unterschied: Essen wird nicht ins Inventar gelegt, sondern direkt in der Szene platziert und dort konsumiert. Das FoodDeliveryManager-System koordiniert:
- Bestellzeitpunkt (via
TimeManager) - Ankunftszeitpunkt (Bestellzeit + konfigurierte Lieferdauer)
- Spawn-Position (ein definierter Ablage-Punkt in der Szene)
- Zerstoerung nach Konsum (vorbereitet fuer EPIC_018)
Die Lieferdauer ist absichtlich variabel — McDonels kommt in 15 Spielminuten, das aufwendigere Restaurant braucht 45. Kleines Detail, grosser Effekt auf die Planung des Spieltags.
Was ein echter Spieltag jetzt aussieht
Noch kein vollstaendiger Gameloop. Aber zum ersten Mal gibt es eine Abfolge die sich nach Spiel anfuehlt:
Morgens aufwachen. Damazon-Bestellung aufgeben. Einen Job annehmen. Die Lieferung kommt. Die Zeit laeuft. Der Job muss fertig sein bevor die Energie ausgeht.
Das ist das Versprechen von RiverTycoon in Miniatur — und EPIC_016 hat die Systeme geliefert die dieses Versprechen einloesbar machen.
Die NUnit-Tests die diesen Sprint gerettet haben
Der TimeManager hatte eine Race Condition: In manchen Frames feuerte OnHourChanged zweimal, wenn die Zeitberechnung knapp ueber eine Stunden-Grenze schwappte. Ohne automatisierte Tests waere das erst im naechsten Sprint aufgefallen — dann mit einem halben Dutzend abhaengiger Systeme die darauf gebaut haetten.
Der Fix: Stunden-Wechsel werden mit einem lastFiredHour-Guard abgesichert. Drei neue NUnit-Tests decken die Grenzwerte ab. Alle gruen vor dem Merge.
Was als naechstes kommt
Das Fundament ist fertig. EPIC_017 bringt die erste echte Progression: Hardware-Tiers, Computing Power als Ressource, und den Moebelshop. Wer einen besseren PC kauft, kann bessere Jobs annehmen und mehr verdienen.
Der klassische Tycoon-Loop faengt an Form anzunehmen.
Pixel River Studio · Solo Indie Dev · Horb am Neckar, Baden-Wuerttemberg Stack: Unity 6 · URP · C# · Event Architecture · Eleventy · Netlify
Kommentare