/* Generic Herbivore Communicate Behaviour // */ machine HerbCommunicate { default state CommunicateStart { action SetStandStill() action SetSpeedModifierRun(5.0) action SetRunMode(true) action AddRandomAnimation("look", "left", 10.0, 25.0) action AddRandomAnimation("look", "right", 10.0, 25.0) transition { goto CommunicateLoop } } state CommunicateLoop { action PlayAnim("call", "02_lp", true) transition { action Print("Calling friend\n") goto CommunicateLoopWait } } state CommunicateLoopWait { transition AnimStateFinished("call") { action Print("Finding friend\n") action SetWander() goto FindFriend } } state FindFriend { action SetRandomTimerBetween(2, 5.0, 7.0) transition { goto FindFriendWait } } state FindFriendWait { ;//transition AcquireTarget("friend") transition AcquireDinoTargetInProximity(40.0, 100.0) { action Print("Found friend.. going there..\n") action SeekTarget(true, false) goto FindingFriend } transition IsTimerUp(2) { action Print("No friend found...\n") goto CommunicateLoop } } state FindingFriend { transition InTargetProximity(10.0) { action Print("At friend\n") action SetStandStill() action FaceTarget() goto CommincateWithFriend } } state CommincateWithFriend { ;// target is not willing to comunicate transition WillTargetCommunicate() == false { action ClearTarget() action PlayAnim("call", "02_lp", true) action SetWander() action SetRandomTimerBetween(1, 5.0, 7.0) goto WanderWait } transition { action EnterCommunicationWithTarget() goto CommincateWithFriendLoop } /* ;// target is not willing to comunicate transition TargetCommunictaionType() == 0 { } ;// target is not willing to comunicate transition TargetCommunictaionType() == 0 */ } state CommincateWithFriendLoop { action ExecuteDirective() action UpdateDeltaVariable("Socialize", -0.01) transition IsTargetSmallerThanMe() { goto CommunicatingWithSmallerTarget } transition IsTargetLargerThanMe() { goto CommunicatingWithLargerTarget } transition { goto CommunicatingWithSameSizeTarget } /* transition IsTimerUp(3) { goto CommunicateLoop } */ } state CommunicatingWithSmallerTarget { action PlayAnim("call", "01_lp", true) transition { goto CommunicatingWithSmallerTargetWait } } state CommunicatingWithSmallerTargetWait { transition AnimStateFinished("call") { action UpdateDeltaVariable("Socialize", -0.2) goto CheckIfContinue } } state CommunicatingWithLargerTarget { ;// scare target away action PlayAnim("call", "01_lp", true) transition { goto CommunicatingWithLargerTargetWait } } state CommunicatingWithLargerTargetWait { ;// be more submissive transition { action UpdateDeltaVariable("Socialize", -0.2) goto CheckIfContinue } } state CommunicatingWithSameSizeTarget { ;// just end up reducing drives while calling.. transition { action UpdateDeltaVariable("Socialize", -0.2) goto CheckIfContinue } } state CheckIfContinue { transition GetVariable("Socialize") > 0.2 { goto CommunicateLoop } transition { goto CleanUp } } state WanderWait { transition IsTimerUp(1) { goto FindFriend } } ;------------------------ Exit States Begin ---------------------- exitstart state CleanUp { transition IsAnimStatePlaying("call", true) { goto CleanUpWait } transition { goto CleanUpEnd } } state CleanUpWait { transition AnimStateFinished("call") { goto CleanUpEnd } } exitend state CleanUpEnd { } ;------------------------ Exit States End ---------------------- }