stable
This commit is contained in:
parent
fbdac9ebf1
commit
86226ccc94
97 changed files with 5790 additions and 2307 deletions
41
js/tarinai_update_step_ai.js
Normal file
41
js/tarinai_update_step_ai.js
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
"use strict";
|
||||
|
||||
// Layer: entity-runtime/tarinai/update-step
|
||||
// Owns low-frequency AI cadence, need resolution, item/social interaction scans,
|
||||
// and facing refresh. Extracted from legacy Tarinai.prototype.update.
|
||||
(function (global) {
|
||||
function update(t, dt, context = {}) {
|
||||
if (!t || t.dead) return { done: true };
|
||||
t.behaviorLockTimer = Math.max(0, (t.behaviorLockTimer || 0) - dt);
|
||||
t.aiTimer += dt;
|
||||
const urgentFoodNeed = Number(t.needRaw?.food ?? t.needs?.food ?? 0) || 0;
|
||||
const urgentAi = t.fightTimer > 0.04 || t.intimidateTimer > 0.04 || t.intimidatedTimer > 0.04 || t.birthRitualTimer > 0.04 || t.defeatedTimer > 0.04 || t.eatTimer > 0.02 || t.hurtTimer > 0.02 || t.hunger >= 96 || urgentFoodNeed >= 84;
|
||||
const aiJitter = stableUnit(t.familyKey || t.id, "ai-interval") * 0.35;
|
||||
context.urgentAi = urgentAi;
|
||||
const aiInterval = urgentAi ? 0.35 : (1.0 + aiJitter);
|
||||
if (t.aiTimer >= aiInterval && t.world.spendScheduledWork?.("ai", urgentAi) !== false) {
|
||||
const elapsedAiDt = Math.max(0.016, Math.min(t.aiTimer, urgentAi ? 0.75 : 1.50));
|
||||
const scanDt = Math.min(elapsedAiDt, 0.75);
|
||||
t.aiTimer = 0;
|
||||
// Needs intentionally advance by a fixed coarse step per AI update.
|
||||
// Exact elapsed-time integration is unnecessary for this observation game
|
||||
// and can over-amplify safety/fear transitions when updates are sparse.
|
||||
const needStepDt = urgentAi ? 0.50 : 1.00;
|
||||
t.resolveNeeds(needStepDt);
|
||||
const sleepingNow = t.state === "sleep";
|
||||
if (!sleepingNow) {
|
||||
t.reactToFreshZunchi(scanDt);
|
||||
t.updateFacing();
|
||||
TarinaiItemInteractionSystem.updateOne(t, scanDt);
|
||||
t.interactWithOthers(scanDt);
|
||||
} else {
|
||||
t.updateFacing();
|
||||
}
|
||||
} else {
|
||||
t.updateFacing();
|
||||
}
|
||||
return { done: false };
|
||||
}
|
||||
|
||||
global.TarinaiAiUpdateStep = Object.freeze({ update });
|
||||
})(typeof window !== "undefined" ? window : globalThis);
|
||||
Loading…
Add table
Add a link
Reference in a new issue