1.5
This commit is contained in:
parent
c9dd7182aa
commit
acf93ec6df
22 changed files with 320 additions and 261 deletions
|
|
@ -63,18 +63,17 @@
|
|||
return false;
|
||||
}
|
||||
|
||||
function cadence(worldRef, tarinai, visibleRect) {
|
||||
function cadence(worldRef, tarinai, visibleRect, nearVisibleRect = null) {
|
||||
if (!tarinai || tarinai.dead) return { interval: Infinity, lane: "dead", smoothMotion: false, visible: false, urgent: false };
|
||||
const isSelected = worldRef.selected === tarinai;
|
||||
if (isSelected) return { interval: 0, lane: "selected", smoothMotion: false, visible: true, urgent: true };
|
||||
|
||||
const id = behaviorId(tarinai);
|
||||
const state = String(tarinai.state || id || "");
|
||||
const tier = global.TarinaiPerf.simulationQualityTier?.() || "high";
|
||||
const count = (worldRef.tarinai || []).length;
|
||||
const mobile = Boolean(global.TarinaiInputMode.snapshot().touchFirst || (global.innerWidth || 9999) <= 760);
|
||||
const isVisible = visible(worldRef, tarinai, visibleRect);
|
||||
const farRect = isVisible ? visibleRect : helpers.updateVisibleWorldRect(worldRef, 520);
|
||||
const farRect = isVisible ? visibleRect : (nearVisibleRect || helpers.updateVisibleWorldRect(worldRef, 520));
|
||||
const isNear = isVisible || Boolean(helpers.pointInRect(tarinai.x || 0, tarinai.y || 0, farRect));
|
||||
const motionNeed = hasMotionNeed(tarinai);
|
||||
|
||||
|
|
@ -95,7 +94,7 @@
|
|||
// runs on visible skipped frames.
|
||||
const panicUrgent = (tarinai.fearTimer || 0) > 0.20 || /panic/i.test(id);
|
||||
if (panicUrgent) {
|
||||
const interval = isVisible ? (mobile ? 0.13 : (tier === "low" ? 0.12 : 0.08)) : (isNear ? (mobile ? 0.24 : 0.18) : (mobile ? 0.46 : 0.36));
|
||||
const interval = isVisible ? (mobile ? 0.13 : 0.08) : (isNear ? (mobile ? 0.24 : 0.18) : (mobile ? 0.46 : 0.36));
|
||||
return { interval, lane: "panic", smoothMotion: Boolean(isVisible && !worldRef.isTarinaiHiddenInNestBox?.(tarinai)), visible: isVisible, urgent: true };
|
||||
}
|
||||
|
||||
|
|
@ -104,10 +103,10 @@
|
|||
|
||||
if (/birth_ritual/i.test(id) || state === "birth_ritual" || (tarinai.birthRitualTimer || 0) > 0.04) {
|
||||
lane = "birth";
|
||||
interval = isVisible ? (tier === "low" ? 0.16 : 0.12) : 0.24;
|
||||
interval = isVisible ? 0.12 : 0.24;
|
||||
} else if (/approach_parent_or_child|follow_parent|approach_mate|seek_bed|play_ball|seek_material|build/i.test(id) || /follow_parent|seek_bed|play_ball/.test(state)) {
|
||||
lane = "moving";
|
||||
interval = isVisible ? (tier === "low" ? 0.14 : 0.10) : (isNear ? 0.22 : 0.55);
|
||||
interval = isVisible ? 0.10 : (isNear ? 0.22 : 0.55);
|
||||
} else if (/eat_food|eat/i.test(id) || state === "eat" || (tarinai.eatTimer || 0) > 0.04) {
|
||||
lane = "eat";
|
||||
interval = isVisible ? 0.22 : 0.48;
|
||||
|
|
@ -116,16 +115,20 @@
|
|||
interval = isVisible ? 0.42 : (isNear ? 0.70 : 1.10);
|
||||
} else if (/idle|none/.test(id) || state === "idle") {
|
||||
lane = "idle";
|
||||
if (isVisible) interval = tier === "low" ? 0.24 : (count > 28 ? 0.16 : 0.12);
|
||||
if (isVisible) interval = count > 28 ? 0.16 : 0.12;
|
||||
else interval = isNear ? 0.55 : 1.10;
|
||||
} else if (isVisible) {
|
||||
lane = "visible";
|
||||
interval = tier === "low" ? (count > 24 ? 0.18 : 0.14) : (count > 36 ? 0.11 : (count > 24 ? 0.08 : 0.05));
|
||||
interval = count > 36 ? 0.11 : (count > 24 ? 0.08 : 0.05);
|
||||
} else {
|
||||
lane = isNear ? "near" : "far";
|
||||
interval = isNear ? (tier === "low" ? 0.40 : 0.30) : (tier === "low" ? 1.20 : 0.90);
|
||||
interval = isNear ? 0.30 : 0.90;
|
||||
}
|
||||
|
||||
if (Number.isFinite(interval) && !/birth|eat|sleep/.test(lane)) {
|
||||
if (count > 54) interval *= 1.26;
|
||||
else if (count > 38) interval *= 1.14;
|
||||
}
|
||||
if (mobile && Number.isFinite(interval)) interval *= count > 24 ? 1.35 : 1.18;
|
||||
const passivePhysicsNeed = hasPassivePhysicsNeed(tarinai, worldRef, isVisible);
|
||||
const sleepPhysical = lane === "sleep" && passivePhysicsNeed;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue