Systemarchitektur

Schichten, Verantwortungen und Kopplungen

Canipolyon ist ein browserbasiertes ES6-Modulspiel ohne Framework. Die aktuelle Architektur kombiniert moderne atomare Services mit älteren UI-Klassen, die über einen LocalStorage-Spiegel weiter versorgt werden.

Schichtenmodell

1. Einstieg & Komposition

*.html lädt genau eine MAIN-Datei oder ein spezialisiertes UI-Modul. Die MAIN-Dateien erzeugen Instanzen und verbinden DOM, Navigation, Fachobjekte und globale Singletons.

MAIN_*.js

2. UI-Komponenten

PLANT, DOOR, PHONE, MINING_RIGG, PHONE_HUB und weitere Klassen binden DOM-Ereignisse und rendern Zustände.

Browser-UI

3. Fachservices

ECONOMY_SERVICE, OPERATING_COST_SERVICE, CHEMISTRY_TRANSACTIONS, DARKWEB, CUSTOMER_SALES und CANIS_SERVICE kapseln Regeln und Buchungen.

Use Cases

4. Regeln & Kataloge

Reine Module definieren Sorten, Items, Rezepte, Progression, Zugriff, Mining, Polizei, Reservierungen und Betriebskosten.

Pure Functions

5. Persistenz

TRANSACTION_MANAGER verwaltet IDB-Snapshot, Belege, Archive und Migrationen. SAVE_SCHEMA repariert die ältere LocalStorage-Seite des Save-Formats.

Autoritativ

6. Infrastruktur

GAME_CLOCK, SOUND_MANAGER, LANGUAGE_MANAGER, GAME_SCALER, BACKGROUND und BUFFER_LOOP_PLAYER sind querschnittliche Laufzeitdienste.

Runtime

Kernkomponenten

KomponenteVerantwortungWichtige AbhängigkeitenSchreibzugriff
TRANSACTION_MANAGERSnapshot laden, migrieren, klonen, validieren, idempotent committen und spiegelnalle RegelmoduleIndexedDB + LocalStorage-Mirror
ECONOMY_SERVICEKäufe, Pflanzenaktionen, Items, XP, Erfolge und Mining-Use-CasesTransaction Manager, Runtime, Operating Costsnur über Commit
OPERATING_COST_SERVICEaktive Zeit, Zähler, Perioden, Rechnungen, Zahlungen und StromstatusGameClock, Runtime, Mining Rulesnur über Commit
USER_APIkompatible Benutzerwerte und UI-BenachrichtigungenLocalStorage, ProgressionMirror/Legacy; wirtschaftliche Werte delegieren bei IDB
prepareEconomy()Pflicht-Bootstrap vor Raum/App-KonstruktionSave Manager, Schema, Transaction Manager, BillingMigration, Synchronisation, Aktivierung
GAME_CLOCKZentraler 100-ms-Takt, Subscriptions, Deadlines, SichtbarkeitslückenDocument/Window Lifecyclekeine Fachbestände

Die zentrale Mechanik-Kopplung

Ein gemeinsamer aktiver ZeitstrahlOPERATING_COST_SERVICE.advanceBillingInState() ist der Drehpunkt. Es ermittelt verstrichene aktive Zeit und ruft recordActivePower() auf. Derselbe Zeitraum erhöht Lampen-/Rig-Zähler und produziert Wachstum beziehungsweise Mining-Einheiten.
Aktiver TickGameClocknur sichtbare Sitzung
AbrechnungadvanceBillingInStateteilt Zeit an Periodengrenzen
VerbrauchrecordActivePowerLampen + Mining-Rig
ProduktionaccrueActiveGrowth / Miningnur bei Strom und Besitz
PeriodenendesettlePeriodRechnung + Sperrprüfung
ZustandWachstumMiningStromkosten
Verbraucher auspausiertpausiert0 für Verbraucher
Verbraucher an, Seite aktivläuft bei passender Lampe1 Unit pro aktiver Sekundeanteilig nach Laufzeit
Strom gesperrtpausiertofflinekeine neue aktive Laufzeit
Polizeifall offenBestand und Wachstum eingefrorenBilling läuft; konfiszierbare Felder bleiben geschütztPerioden können weiter entstehen
Tab versteckt / lange Lückekeine Nachberechnungkeine NachberechnungZeitanker wird neu gesetzt

Globale Instanzen und Synchronisation

SingletonDateiRolle
UserUSER_API.jsBenutzeradapter; UUID wird aus aktuellem Speicherstand aufgelöst
GameClockGAME_CLOCK.jsZentraler Scheduler mit 100 ms Tickrate
CryptoWalletCRYPTO_CURRENCY_API.jsWallet-API für CRT/RGX/NVX
LanguageLANGUAGE_MANAGER.jsÜbersetzung und Zahlenformatierung
SoundManagerSOUND_MANAGER.jsEffekte, Loops, Musik, Ambiente und Audio-Unlock
SlotStorageSLOT_STORAGE.jskanonische Besitzschlüssel und Legacy-Key-Migration
MenuAccessMENU_ACCESS.jsMenüzugriff, Besitz und Kaufstatus

Tabübergreifend werden Änderungen durch BroadcastChannel("canipolyon_${uuid}"), Storage-Events und User.notify() sichtbar gemacht.

Verzeichnisrollen

/ ├─ *.html Seiten und DOM-Verträge ├─ MAIN_*_SCREEN.js Kompositionswurzeln pro Seite ├─ scripts/*_SERVICE.js Fach-Use-Cases und Buchungen ├─ scripts/*_RULES.js reine Regeln, Migration und Validierung ├─ scripts/*_CATALOG.js statische Inhalte und Balancingwerte ├─ scripts/*_UI.js spezialisierte Oberflächen ├─ styles/ seiten- und komponentenbezogenes CSS ├─ images/ Spielgrafiken └─ sounds/ Effekte, Loops und Musik