/* Generic Carnivore Idle Behaviour // */ machine CarnIdle { state Start { ;// temp here for dilopho action StopAnim("fan", "up_lp") action PlayAnimLooping("fan", "dn_lp", false, -1.0, 1.0) ;// temp here for dilopho transition CanFlock() { direct goto FlockCheck } transition { goto IdleStart } } state FlockCheck { transition IsInFlock() == false { call JoinFlock IdleStart } transition { goto IdleStart } } state IdleStart { action SetAutoMovementBlend(true) action SetSpeedModifierWalk(0.75) action SetRunMode(false) action SetSpeedDirect(0.0) action SetStandStill() transition { goto IdleChoose } } state IdleChoose { action SetRand(0, 6) transition GetRand() == 0 { direct goto SniffStart } transition GetRand() == 1 { direct goto ScratchStart } transition GetRand() == 2 { direct goto SpecStart } transition GetRand() == 3 { direct goto FullCallStart } transition GetRand() == 4 { direct goto RandSpecStart } transition { action SetAutoMovementBlend(true) goto WanderStart } } ;// sniffing ------------------------------ state SniffStart { action SendEnclosureEvent("special_low") 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 WanderStart } } state Sniff { transition AnimStateFinished("idle") { action SetAutoMovementBlend(true) goto WanderStart } ;// temp fix if not have sniff anim will not be able to exit transition IsAnimStatePlaying("idle") == false { action SetAutoMovementBlend(true) goto WanderStart } } ;// full body calling ------------------------------ state FullCallStart { action SendEnclosureEvent("special_high") transition IsAnimLoaded("call", "f") { action SetSpeedDirect(0.0) action SetStandStill() action StopAllUserAnimations() action SetAutoMovementBlend(false) action StopLook() action PlayAnimInstant("call", "f", true) goto FullCall } transition { action SetAutoMovementBlend(true) goto WanderStart } } state FullCall { transition IsAnimPlaying("call", "f", false) == false { action SetAutoMovementBlend(true) goto WanderStart } } ;// scratching ------------------------------ state ScratchStart { action SendEnclosureEvent("special_low") transition IsAnimLoaded("spcl", "sctch_lp") { action SetSpeedDirect(0.0) action SetStandStill() action StopAllUserAnimations() action SetAutoMovementBlend(false) action StopLook() action PlayAnimInstant("spcl", "sctch_lp", true) goto Scratch } transition { action SetAutoMovementBlend(true) goto WanderStart } } state Scratch { transition AnimStateFinished("spcl") { action SetAutoMovementBlend(true) goto WanderStart } ;// temp fix if not have sniff anim will not be able to exit transition IsAnimStatePlaying("spcl") == false { action SetAutoMovementBlend(true) goto WanderStart } } ;// special ------------------------------ state SpecStart { action SendEnclosureEvent("special_high") transition IsAnimLoaded("spcl", "gen_lp") { action SetSpeedDirect(0.0) action SetStandStill() action StopAllUserAnimations() action SetAutoMovementBlend(false) action StopLook() action PlayAnimInstant("spcl", "gen_lp", true) goto SpecWait } transition { action SetAutoMovementBlend(true) goto WanderStart } } state SpecWait { transition AnimStateFinished("spcl") { action SetAutoMovementBlend(true) goto WanderStart } ;// temp fix if not have sniff anim will not be able to exit transition IsAnimStatePlaying("spcl") == false { action SetAutoMovementBlend(true) goto WanderStart } } ;// random special ------------------------------ state RandSpecStart { action SendEnclosureEvent("special_high") transition IsRandomAnimLoaded("spcl", "gen") { action SetSpeedDirect(0.0) action SetStandStill() action StopAllUserAnimations() action SetAutoMovementBlend(false) action StopLook() action PlayAnimInstantRandom("spcl", "gen", true) goto RandSpecWait } transition { action SetAutoMovementBlend(true) goto WanderStart } } state RandSpecWait { transition AnimStateFinished("spcl") { action SetAutoMovementBlend(true) goto WanderStart } transition IsAnimStatePlaying("spcl") == false { action SetAutoMovementBlend(true) goto WanderStart } } ;// wander ------------------------------ state WanderStart { action SendEnclosureEvent("idle_wander") action StartLook("LookProximity", 0.5) action AddRandomAnimation("call", "02_lp", 10.0, 20.0) action AddRandomAnimation("tail", "flck_lp", 3.0, 5.0) action SetRandomTimerBetween(1, 2.0, 4.0) action AddRandomAnimation("spcl", "blink", 1.0, 3.0) transition { goto IdleLoop } } state IdleLoop { transition IsTimerUp(1) { goto IdleWander } } state IdleWander { transition SetWander() == true { action SetRandomTimerBetween(1, 10.0, 15.0) goto IdleWanderLoop } } state IdleWanderLoop { action AcquireTarget("food") transition HasArrived() { action SetStandStill() goto AcquireNewFlock } transition IsTimerUp(1) { action SetStandStill() goto AcquireNewFlock } } state AcquireNewFlock { transition AcquireFlockTarget(true) { goto FlockChangeCheck } transition { goto IdleChoose } } state FlockChangeCheck { transition CanFlock() { direct goto FlockChange } transition { action ClearTarget() goto IdleChoose } } state FlockChange { transition CanJoinTargetFlock() == false { action ClearTarget() goto IdleChoose } transition IsInFlock() == false { action JoinTargetFlock() action ClearTarget() goto IdleChoose } transition IsTargetFlockBetter() { action JoinTargetFlock() action ClearTarget() goto IdleChoose } transition { action ClearTarget() goto IdleChoose } } ;------------------------ Exit States Begin ---------------------- exitstart state CleanUp { action StopLook() action SetRandomTimerBetween(1, 20.0, 30.0) transition { goto CleanUpIdleWait } } state CleanUpIdleWait { transition IsAutoMovementBlendOn() == false { action SetRandomTimerBetween(1, 20.0, 30.0) goto WaitForAnimFinish } transition IsIdleLocked() == false { goto CleanUpEnd } transition IsTimerUp(1) { goto CleanUpEnd } } state WaitForAnimFinish { transition IsTimerUp(1) { goto CleanUpEnd } transition IsAnimPlaying("idle", "snif_lp", false) { goto WaitForAnimFinish } transition IsAnimStatePlaying("spcl", false) { goto WaitForAnimFinish } transition IsAnimPlaying("call", "f", false) { goto WaitForAnimFinish } transition { action SetAutoMovementBlend(true) goto CleanUpEnd } } exitend state CleanUpEnd { action SetAutoMovementBlend(true) } ;------------------------ Exit States End ---------------------- }