/* Generic Carnivore Sleep Behaviour // */ machine CarnSleep { default state SleepStart { action SetRunMode(false) action SetSpeedModifierWalk(1.0) action SetAutoMovementBlend(true) action SetRandomTimerBetween(1, 9.0, 15.0) action SetRandomTimerBetween(2, 25.0, 35.0) transition IsUnitInsideTerritory(0.3) == true { goto TerrainCheck } transition IsTerritorial() == false { goto TerrainCheck } transition { action StartLook("LookProximity", 0.5) goto ReturnToTerritoryBegin } } state ReturnToTerritoryBegin { transition SeekRandomPointInsideTerritory(0.3) { goto ReturnToTerritoryLoop } transition IsTimerUp(1) { goto ReturnToTerritoryCoarse } } state ReturnToTerritoryCoarse { action SetRandomTimerBetween(1, 7.0, 10.0) transition { goto CoarseTerritorySearch } } state CoarseTerritorySearch { transition SeekRandomPointInsideTerritory(0.95) { goto ReturnToTerritoryLoop } transition IsTimerUp(1) { ;// i give up, sleep where ever i am currently goto TerrainCheck } } state ReturnToTerritoryLoop { transition HasArrived() { goto TerrainCheck } transition IsTimerUp(2) { goto TerrainCheck } } state TerrainCheck { transition { goto TerrainWander } } state TerrainWander { /* transition IsInWaterArea() == false { goto SleepBegin } */ transition SetWander() { action SetRandomTimerBetween(1, 40.0, 45.0) goto FindSuitableGround } } state FindSuitableGround { action UpdateDeltaVariable("UsableEnergy", 0.1) transition IsAwayFromWater(4.0) { goto SleepBegin } transition IsTimerUp(1) { goto TerrainWander } /* transition IsTimerUp(1) { goto SleepBegin ;// really give up } */ transition HasArrived() { goto TerrainWander } } state SleepBegin { action SendEnclosureEvent("rest") action SetFlockImpulse(false) action SetStandStill() action StopLook() action SetRandomTimerBetween(1, 3.0, 4.0) transition { goto SleepPlayStart } } state SleepPlayStart { transition IsTimerUp(1) { action SetAutoMovementBlend(false) action PlayAnim("sleep", "st", false) goto SleepPlaySoundWait } } state SleepPlaySoundWait { transition IsAnimPlaying("sleep", "lp", false) { goto SleepLoop } } state SleepLoop { ;//action UpdateDeltaVariable("Sleepyness", -0.01) action UpdateSleep() } ;------------------------ Exit States Begin ---------------------- exitstart state CleanUp { action SetSpeedModifier(1.0) transition IsDead() { direct goto LockDeathPose } transition { action StopAnimState("sleep") goto CleanUpLoop } } state LockDeathPose { transition IsAnimPlaying("sleep", "st", false) { action SetLockLastPose("sleep", "st", true) action SetAutoLinkAnimOff("sleep", "st", true) action StopAnim("sleep", "st") action LockDeadPose() goto CleanUpEnd } transition IsAnimPlaying("sleep", "lp", false) { action SetLockLastPose("sleep", "lp", true) action SetAutoLinkAnimOff("sleep", "lp", true) action StopAnim("sleep", "lp") action LockDeadPose() goto CleanUpEnd } transition { action StopAnimState("sleep") goto CleanUpLoop } } state CleanUpLoop { transition IsAnimStatePlaying("sleep", false) == false { action SetFlockImpulse(true) action SetAutoMovementBlend(true) action StopLook() goto CleanUpEnd } } exitend state CleanUpEnd { } /* exitstart state CleanUp { action SetSpeedModifier(1.0) action StopAnimState("sleep") transition { goto CleanUpLoop } } state CleanUpLoop { transition IsAnimStatePlaying("sleep", false) == false { goto CleanUpEnd } } exitend state CleanUpEnd { action SetFlockImpulse(true) action SetAutoMovementBlend(true) action StopLook() } */ ;------------------------ Exit States End ---------------------- }