/* Generic Herbivore Play Behaviour // */ machine HerbPlay { default state Start { transition CanFlock() { direct goto FlockCheck } transition { goto StartInit } } state FlockCheck { transition IsInFlock() == false { call JoinFlock StartInit } transition { goto StartInit } } state StartInit { action SendEnclosureEvent("play") action PlayAnimLooping("fan", "dn_lp", false, -1.0, 1.0) action SetAutoMovementBlend(true) transition { goto SetMoveMode } } state SetMoveMode { action StartLook("LookProximity", 0.5) action ClearTarget() action SetRand(0, 2) /* transition GetRand() == 0 { action SetSpeedModifierWalk(1.0) action SetRunMode(false) goto GetTarget } */ transition { action SetSpeedModifier(1.0) action SetRunMode(true) goto GetTarget } } state GetTarget { action SetRand(0, 2) transition GetRand() == 0 { direct goto SetWanderChose } transition AcquireFlockTarget(true) { goto FlockChangeCheck } } state SetWanderChose { transition SetWander() { action SetRandomTimerBetween(1, 5.0, 8.0) goto SeekWait } } state FlockChangeCheck { transition CanFlock() { direct goto FlockChange } transition { goto SeekTarget } } state FlockChange { transition IsTargetFlockBetter() { action JoinTargetFlock() goto SeekTarget } transition { goto SeekTarget } } state SeekTarget { transition SeekTarget(false, false) { action SetRandomTimerBetween(1, 5.0, 8.0) goto SeekWait } transition { action ClearTarget() goto SetMoveMode } } state SeekWait { transition InTargetProximityRadius(1.5) { direct goto TalkInit } transition HasArrived() { direct goto TalkInit } transition IsTimerUp(1) { goto GetTarget } } state TalkInit { action StopLook() action SetStandStill() action SetRandomTimerBetween(1, 2.0, 3.0) action LookAtRandomPositionExtent(0.7, 0.9, 0.5) action PlayAnim("call", "02_lp", false) action SendEnclosureEvent("call_social") transition { goto Talk } } state Talk { transition IsTimerUp(1) { action LookEnd() goto SetMoveMode } } ;------------------------ Exit States Begin ---------------------- exitstart state CleanUp { action StopLook() transition { goto CleanUpEnd } } exitend state CleanUpEnd { } ;------------------------ Exit States End ---------------------- }