tarinai/js/tarinai_runtime.js

41 lines
1.5 KiB
JavaScript

"use strict";
// Layer: entity-runtime/tarinai
// Owns the public Tarinai update boundary. Tarinai.prototype.update routes
// directly through the explicit creature update pipeline.
(function (global) {
function installPrototypeBoundary() {
const proto = global.Tarinai?.prototype;
if (!proto || proto._tarinaiCreatureRuntimeInstalled) return false;
proto.update = function update(dt) {
return global.TarinaiCreatureRuntime.updateOne(this, dt);
};
Object.defineProperty(proto, "_tarinaiCreatureRuntimeInstalled", {
value: true,
configurable: true,
writable: true,
});
return true;
}
function updateOne(tarinai, dt, options = {}) {
if (!tarinai || tarinai.dead || !global.TarinaiUpdatePipeline.updateOne) return false;
return global.TarinaiUpdatePipeline.updateOne(tarinai, dt, options) !== false;
}
function updateMotionOnly(tarinai, dt, options = {}) {
if (!tarinai || tarinai.dead || !global.TarinaiMovementUpdateStep.update) return false;
tarinai.prevX = tarinai.x;
tarinai.prevY = tarinai.y;
const motionDt = Math.max(0.001, Math.min(0.05, Number(options.context?.motionDt ?? dt) || 0.016));
return global.TarinaiMovementUpdateStep.update(tarinai, motionDt, {
...(options.context || {}),
motionOnly: true,
motionDt,
})?.done !== true || !tarinai.dead;
}
global.TarinaiCreatureRuntime = Object.freeze({ updateOne, updateMotionOnly });
installPrototypeBoundary();
})(typeof window !== "undefined" ? window : globalThis);