/* Generic Communicate Behaviour // */ machine DinoCommunicate { default state CommunicateStart { action SendEnclosureEvent("call_communicate") action SetStandStill() action AddRandomAnimation("special", "flicktail", 5.0, 25.0) 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 SeekTarget(true, false) goto FindingFriend } transition IsTimerUp(2) { goto CommunicateLoop } } state FindingFriend { transition InTargetProximity(15.0) { goto FoundFriend } } state FoundFriend { transition WillTargetCommunicate() == true { action Print("Friend is willing to communitcate\n") action FaceTarget() action EnterCommunicationWithTarget() action SetTargetFSM(fsm::"HGenDirective") call HGenDirective CommunicateStart ;//goto CommunicateStart } transition { action Print("Friend is NOT willing to communicate\n") action SetWander() action SetRandomTimerBetween(1, 6.0, 8.0) goto WanderWait } } state WanderWait { transition IsTimerUp(1) { goto CommunicateStart } } ;------------------------ 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 ---------------------- }