/* Generic Carnivore Establish/Update Territory Callable Machine // // This machine should be used through the normal call mechanism // */ machine GenUpdateTerritory { state EstablishStart { action SetRunMode(false) action SetSpeedModifierWalk(1.0) action SetAutoMovementBlend(true) action SetRandomTimerBetween(2, 30.0, 40.0) transition IsUnitInsideTerritory(0.3) == true { goto EstablishTerritory } transition { action SetRandomTimerBetween(1, 9.0, 15.0) 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) { goto EstablishExit } } state ReturnToTerritoryLoop { transition HasArrived() { goto EstablishTerritory } transition IsUnitInsideTerritory(0.5) == true { goto EstablishTerritory } transition IsTimerUp(2) { goto EstablishTerritory } } state EstablishTerritory { action SetStandStill() transition { goto SniffStart } } ;// sniffing ------------------------------ state SniffStart { transition IsAnimLoaded("idle", "snif_lp") { action SetSpeedDirect(0.0) action SetStandStill() action StopAllUserAnimations() action SetAutoMovementBlend(false) action StopLook() action PlayAnimInstant("idle", "snif_lp", true) goto Sniff } transition { action SetAutoMovementBlend(true) goto SniffPause } } state Sniff { transition AnimStateFinished("idle") { action SetAutoMovementBlend(true) goto SniffPause } ;// temp fix if not have sniff anim will not be able to exit transition IsAnimStatePlaying("idle") == false { action SetAutoMovementBlend(true) goto SniffPause } } state SniffPause { action SetRandomTimerBetween(2, 3.0, 4.0) action StartLook("LookProximity", 0.5) transition { goto SniffPauseWait } } state SniffPauseWait { transition IsTimerUp(2) { action StopLook() goto Posture } } state Posture { action SetAutoMovementBlend(false) action StopLook() action PlayAnim("idle", "post_lp", false) transition { goto StandOffLoop } } state StandOffLoop { transition IsAnimPlaying("idle", "post_lp", false) == false { action UpdateTerritoryAesthetics() action SetAutoMovementBlend(true) action StartLook("LookTarget", 0.5) goto StandOffPause } } state StandOffPause { action SetRandomTimerBetween(2, 3.0, 5.0) transition { goto StandOffPauseWait } } state StandOffPauseWait { transition IsTimerUp(2) { action PlayAnim("call", "02_lp", false) action SetRandomTimerBetween(2, 3.0, 5.0) goto RoarWait } } state RoarWait { transition IsTimerUp(2) { goto EstablishExit } } ;//------------------------ Exit States ---------------------- exitstart state EstablishExit { transition { action SetRandomTimerBetween(1, 10.0, 15.0) goto CleanUpIdleWait } } state CleanUpIdleWait { transition IsIdleLocked() == false { goto EstablishExitEnd } transition IsTimerUp(1) { goto EstablishExitEnd } } exitend state EstablishExitEnd { action SetTerritoryUpdateNeeded(false); } }