/* Generic Carnivore Defend Territory Callable Machine // // This machine should be used through the normal call mechanism // */ machine GenDefendTerritory { state DefendStart { action SetRunMode(false) action SetSpeedModifierWalk(1.0) action SetAutoMovementBlend(true) action SetRandomTimerBetween(2, 30.0, 40.0) transition IsUnitInsideTerritory(0.3) == true { goto CompetitorCheck } 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 DefendExit } } state ReturnToTerritoryLoop { transition HasArrived() { goto CompetitorCheck } transition IsUnitInsideTerritory(0.5) == true { goto CompetitorCheck } transition IsTimerUp(2) { goto CompetitorCheck } } state CompetitorCheck { action SetStandStill() action AcquireTarget("competitor") transition HasTarget() { goto FaceTarget } transition { goto DefendExit } } state FaceTarget { action FaceTarget() transition { goto FaceTargetWait } } state FaceTargetWait { transition HasArrived() { 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 SetAutoMovementBlend(true) action StartLook("LookTarget", 0.5) goto StandOffPause } } state StandOffPause { action FaceTarget() 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 DefendExit } } ;//------------------------ Exit States ---------------------- exitstart state DefendExit { transition { goto DefendExitEnd } } exitend state DefendExitEnd { action SetAutoMovementBlend(true) action SetDefendTerritory(false); } }