tarinai/js/simulation_systems.js

48 lines
2.9 KiB
JavaScript

"use strict";
// Layer: simulation/systems-facade
// Owns the concrete phase registry boundary. The actual phase implementations
// are split across simulation_*_system.js files; this facade preserves the
// public TarinaiSimulationSystems contract for system_order.js and tests.
(function (global) {
function phaseFrom(moduleName, phaseName) {
const fn = global[moduleName]?.phases?.[phaseName];
if (typeof fn !== "function") throw new Error(`Tarinai simulation phase missing: ${moduleName}.${phaseName}`);
return fn;
}
function normalizeDelta(worldRef, dt) { return phaseFrom("TarinaiEnvironmentSimulationSystem", "normalizeDelta")(worldRef, dt); }
function updateClock(worldRef, dt) { return phaseFrom("TarinaiEnvironmentSimulationSystem", "updateClock")(worldRef, dt); }
function updateFrameSignals(worldRef, dt) { return phaseFrom("TarinaiEnvironmentSimulationSystem", "updateFrameSignals")(worldRef, dt); }
function updateEnvironment(worldRef, dt) { return phaseFrom("TarinaiEnvironmentSimulationSystem", "updateEnvironment")(worldRef, dt); }
function prepareSpatialFrame(worldRef) { return phaseFrom("TarinaiEnvironmentSimulationSystem", "prepareSpatialFrame")(worldRef); }
function updateItemsAndAnts(worldRef, dt) { return phaseFrom("TarinaiItemAntSimulationSystem", "updateItemsAndAnts")(worldRef, dt); }
function updateEffects(worldRef, dt) { return phaseFrom("TarinaiEffectsSimulationSystem", "updateEffects")(worldRef, dt); }
function updateCreatures(worldRef, dt) { return phaseFrom("TarinaiCreatureSimulationSystem", "updateCreatures")(worldRef, dt); }
function runMaintenance(worldRef, dt, itemCountBefore) { return phaseFrom("TarinaiMaintenanceSimulationSystem", "runMaintenance")(worldRef, dt, itemCountBefore); }
function emitPhaseChange(worldRef) { return phaseFrom("TarinaiEnvironmentSimulationSystem", "emitPhaseChange")(worldRef); }
function spawnAmbientTarinai(worldRef, dt) { return phaseFrom("TarinaiAmbientSimulationSystem", "spawnAmbientTarinai")(worldRef, dt); }
function spawnAmbientGrass(worldRef, dt) { return phaseFrom("TarinaiAmbientSimulationSystem", "spawnAmbientGrass")(worldRef, dt); }
function spawnRainWater(worldRef, dt) { return phaseFrom("TarinaiAmbientSimulationSystem", "spawnRainWater")(worldRef, dt); }
function finalizeDiagnostics(worldRef) { return phaseFrom("TarinaiEnvironmentSimulationSystem", "finalizeDiagnostics")(worldRef); }
// finalizeDiagnostics publishes worldRef.lastRuntimeDiagnostics.
const phases = Object.freeze({
normalizeDelta,
updateClock,
updateFrameSignals,
updateEnvironment,
prepareSpatialFrame,
updateItemsAndAnts,
updateEffects,
updateCreatures,
runMaintenance,
emitPhaseChange,
spawnAmbientTarinai,
spawnAmbientGrass,
spawnRainWater,
finalizeDiagnostics,
});
global.TarinaiSimulationSystems = Object.freeze({ phases });
})(typeof window !== "undefined" ? window : globalThis);