/* Brach Flee Behaviour // */ machine BrachFlee { default state Start { action SetAutoMovementBlend(true) action SetRunMode(true) action SetSpeedModifier(1.0) transition AcquireTarget("aggressor") { action StartLook("LookTarget", 1.0) action SendEnclosureEvent("escape_predator") action AddRandomAnimation("call", "01_lp", 2.0, 3.0) goto FoundTarget } } state FoundTarget { transition { goto AvoidTarget } } state AvoidTarget { action AvoidTarget(50.0, true) transition InTargetProximity(15.0, true) { goto Posture } transition InTargetProximity(48.0, true) == false { goto SetWander } } state SetWander { action SetWander() action SetRandomTimerBetween(1, 40.0, 50.0) transition { goto Wander } } state Wander { transition HasArrived() { goto SetWander } transition InTargetProximity(45.0, true) { action AddRandomAnimation("call", "01_lp", 2.0, 3.0) goto FoundTarget } transition IsTimerUp(1) { goto SetWander } } state Posture { action SetStandStill() action SetRand(0, 2) transition GetRand() == 0 { action SetAutoMovementBlend(false) action PlayAnimInstant("idle", "post_lp", false) goto PostureWait } transition { action SetAutoMovementBlend(false) action PlayAnimInstant("spcl", "gen_ru", false) goto PostureWaitR } } state PostureWait { transition IsAnimPlaying("idle", "post_lp", false) == false { action SetAutoMovementBlend(true) action SetRandomTimerBetween(1, 3.0, 4.0) action CreateKnockMusterZoneTarget(false, true) action SetMusterAngry(true, true) goto PosturePause } } state PostureWaitR { transition IsAnimPlaying("spcl", "gen_ru", false) == false { action SetAutoMovementBlend(true) action SetRandomTimerBetween(1, 3.0, 4.0) action CreateKnockMusterZoneTarget(false, true) action SetMusterAngry(true, true) goto PosturePause } } state PosturePause { transition IsTimerUp(1) { goto AvoidTarget } } ;//------------------------ Exit States Begin ---------------------- exitstart state CleanUp { ;// stay in this state a little while transition { action SetStandStill() action SetRandomTimerBetween(1, 10.0, 12.0) action StartLook("LookRandom", 1.5) goto CautiousWait } } state CautiousWait { transition IsNextDrive("Flee") { goto FleeEnd } transition IsNextDrive("Muster") { goto FleeEnd } transition IsTimerUp(1) { goto FleeEnd } transition AcquireTarget("aggressor") { action AvoidTarget(50.0, true) goto CautiousFlee } } state CautiousFlee { transition IsNextDrive("Dead") { goto FleeEnd } transition IsNextDrive("Muster") { goto FleeEnd } transition IsTimerUp(1) { goto FleeEnd } transition InTargetProximity(48.0, true) == false { goto CautiousWait } } state FleeEnd { action StopLook() transition { goto CleanUpEndWait } } state CleanUpEndWait { transition IsAnimPlaying("idle", "post_lp", false) == true { goto CleanUpEndWait } transition IsAnimPlaying("spcl", "gen_ru", false) == false { goto CleanUpEnd } } exitend state CleanUpEnd { action SetStandStill() action StopAllRandomAnimations() } ;//------------------------ Exit States End ---------------------- }