This commit is contained in:
33333-33333 2026-09-29 23:45:12 +09:00
commit f5fc9b76ce
73 changed files with 32628 additions and 376 deletions

View file

@ -1,12 +1,18 @@
import {maximumSpeedMultiplier} from './ecology/movement.js';
import {basalMetabolismKJPerDay} from './ecology/metabolism.js';
import {maximumSpeedMultiplier} from './ecology/movement.js?v=45';
import {basalMetabolismKJPerDay} from './ecology/metabolism.js?v=45';
const clamp=(v,a,b)=>Math.max(a,Math.min(b,v));
export const sizeSpeedBoost=maximumSpeedMultiplier;
export const staminaLimit=(mass,gene)=>gene*Math.max(.2,mass/3);
export const recoveryRate=(mass,gene)=>gene*Math.pow(Math.max(.05,mass/3),.75);
// Recovery is defined as a fraction of the individual's current stamina capacity per day.
// The genome trait therefore controls recovery time without making large bodies take many days
// simply because their absolute stamina pool is larger.
export const staminaRecoveryFractionPerDay=(mass,gene)=>clamp((.46+.32*gene)*Math.pow(Math.max(.05,mass/3),-.035),.62,1.45);
// Sprint/escape/chase drain is likewise capacity-relative. Routine travel does not consume
// sprint stamina; only locomotion above the routine gait is charged here.
export const sprintStaminaFractionPerDay=(speed,routineSpeed)=>.72+.48*clamp(speed/Math.max(1,routineSpeed)-1,0,2);
// Returns kJ/day when speed is m/day.
export const locomotionCost=(mass,speed)=>.018*Math.pow(Math.max(mass,.001),.684)*Math.max(0,speed);
export const sprintCost=(mass,speed)=>.034*Math.pow(Math.max(mass,.001),.684)*Math.max(0,speed);
export const thermalFitness=(temperature,preferred,tolerance)=>Math.exp(-0.5*(((temperature-preferred)/Math.max(1,tolerance))**2));
export const metabolismKJPerDay=basalMetabolismKJPerDay;
export const decayRate=temperature=>.018*Math.pow(1.88,(temperature-20)/10);