hm
This commit is contained in:
parent
cefa2ace5a
commit
0e432c62ae
87 changed files with 4282 additions and 3066 deletions
|
|
@ -29,6 +29,23 @@
|
|||
return /idle|wander|approach|follow|seek|panic|fight|birth_ritual|sunbath|zunchi_sick|fight_sick|cursor_/i.test(id);
|
||||
}
|
||||
|
||||
function activeMechanicalObstacleNear(tarinai, worldRef = null) {
|
||||
if (!tarinai || !worldRef || worldRef.isTarinaiHiddenInNestBox?.(tarinai)) return false;
|
||||
const radius = Math.max(150, (Number(tarinai.radius) || 22) + 190);
|
||||
const source = worldRef.nearbyItems?.(tarinai.x || 0, tarinai.y || 0, radius, true) || worldRef.items || [];
|
||||
for (const it of source) {
|
||||
if (!it || it.dead || !global.TarinaiMechanicalSystem?.isMechanicalType?.(it.type)) continue;
|
||||
const reach = global.TarinaiMechanicalSystem?.reach?.(it) || Math.max(64, it.r || 64);
|
||||
if (Math.hypot((tarinai.x || 0) - (it.x || 0), (tarinai.y || 0) - (it.y || 0)) > reach + radius) continue;
|
||||
if (it.type === "rotator" || it.type === "reciprocator") return true;
|
||||
if (global.TarinaiMechanicalSystem?.passiveItemAwake?.(it)) return true;
|
||||
const body = global.TarinaiPhysicsBodySystem?.ensureBody?.(it, worldRef, { syncFromLegacy: false });
|
||||
const vel = body?.velocity || {};
|
||||
if (Math.hypot(Number(vel.x || it.vx || 0) || 0, Number(vel.y || it.vy || 0) || 0) + Math.abs(Number(vel.angular || it.spin || 0) || 0) * 64 > 0.8) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function hasPassivePhysicsNeed(tarinai, worldRef = null, isVisible = false) {
|
||||
if (!tarinai || tarinai.dead) return false;
|
||||
const vx = Number.isFinite(tarinai.vx) ? tarinai.vx : 0;
|
||||
|
|
@ -36,8 +53,12 @@
|
|||
const ivx = Number.isFinite(tarinai.impulseVx) ? tarinai.impulseVx : 0;
|
||||
const ivy = Number.isFinite(tarinai.impulseVy) ? tarinai.impulseVy : 0;
|
||||
if (Math.hypot(vx + ivx, vy + ivy) > 0.35) return true;
|
||||
const sleeping = tarinai.state === "sleep" || tarinai.sleeping;
|
||||
const id = behaviorId(tarinai);
|
||||
const state = String(tarinai.state || id || "");
|
||||
const sleeping = state === "sleep" || tarinai.sleeping;
|
||||
const lockedPassive = sleeping || state === "eat" || /eat|sunbath|birth_ritual|breed|repro/i.test(id) || /sunbath|birth_ritual|breed|repro/.test(state) || (tarinai.birthRitualTimer || 0) > 0.04 || (tarinai.eatTimer || 0) > 0.04 || (tarinai.sunbathTimer || 0) > 0.04;
|
||||
if (sleeping && isVisible && !worldRef?.isTarinaiHiddenInNestBox?.(tarinai)) return true;
|
||||
if (lockedPassive && isVisible && activeMechanicalObstacleNear(tarinai, worldRef)) return true;
|
||||
if (sleeping && tarinai.target && !tarinai.target.dead && tarinai.isSleepFurniture?.(tarinai.target) && tarinai.target.type !== "nest_box") return true;
|
||||
return false;
|
||||
}
|
||||
|
|
@ -57,6 +78,9 @@
|
|||
const isNear = isVisible || Boolean(helpers().pointInRect?.(tarinai.x || 0, tarinai.y || 0, farRect));
|
||||
const motionNeed = hasMotionNeed(tarinai);
|
||||
|
||||
const nestEntryActive = Boolean(tarinai.insideNestBoxId && (typeof tarinai.nestBoxEntryActive === "function" ? tarinai.nestBoxEntryActive() : ((worldRef.time || 0) < (tarinai._nestBoxEntrySmoothUntil || -Infinity) || ((tarinai.nestFade || 0) > 0.01 && (tarinai.nestFade || 0) < 0.985))));
|
||||
if (nestEntryActive) return { interval: 0, lane: "nest-entry", smoothMotion: false, visible: true, urgent: true };
|
||||
|
||||
const hardRealtimeUrgent =
|
||||
(tarinai.hurtTimer || 0) > 0.04 ||
|
||||
(tarinai.pokeFlashTimer || 0) > 0.03 ||
|
||||
|
|
@ -113,7 +137,7 @@
|
|||
&& interval <= 0.75
|
||||
&& !worldRef.isTarinaiHiddenInNestBox?.(tarinai)
|
||||
&& ((smoothAllowed && motionNeed) || sleepPhysical || eatPhysical));
|
||||
return { interval, lane, smoothMotion, visible: isVisible, urgent: false, sleepPhysical, passivePhysicsNeed };
|
||||
return { interval, lane, smoothMotion, visible: isVisible, urgent: false, sleepPhysical, eatPhysical, passivePhysicsNeed };
|
||||
}
|
||||
|
||||
function updateInterval(worldRef, tarinai, visibleRect) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue