/* Tricera Attack Vehicle Machine // // This machine should be used through the normal call mechanism // */ machine TriceraAttackVehicle { state AttackVehicleStart { transition HasTarget() == false { goto ExitStart } transition { action SetRandomTimerBetween(1, 10.0, 30.0) goto ChaseVehicle } } state ChaseVehicle { transition SeekTarget(true, false) { action SetSpeedModifier(1.2) goto SeekLoop } transition { action ClearTarget() goto ExitStart } } state SeekLoop { transition InTargetProximityRadius(1.7, false) { direct goto SeekFacingCheck } transition HasArrived() { direct goto SeekFacingCheckArrived } transition IsTimerUp(1) { goto AngerRoar } } state SeekFacingCheck { transition IsFacingTargetUnit() { direct goto Attack } transition { action FaceTarget() goto SeekFacingAlignWait } } state SeekFacingAlignWait { transition HasArrived() { direct goto ChaseVehicle } transition InTargetProximityRadius(1.7, false) == false { action SeekTarget(true, false) goto SeekLoop } } state SeekFacingCheckArrived { transition { action SeekTarget(true, false) goto SeekLoop } } state AngerRoar { action PlayAnim("call", "02_lp", false) action SendEnclosureEvent("Call_angry") transition { action SetRandomTimerBetween(1, 10.0, 30.0) goto SeekLoop } } state Attack { action StopLook() action SetStandStill() action SetSpeedDirect(0.0) action SetStandStill() action PlayAnim("call", "02_lp", false) ;// temp check transition IsAnimLoaded("hbut", "st")==true { action PlayAnim("hbut", "st", false) goto HeadButtWait } transition { action PlayAnim("shake", "01_lp", false) ;// action HurtTargetUnit(60.0) action HurtTargetUnit(false, 1.0) goto HitWait } } state HitWait { transition IsAnimPlaying("shake", "01_lp", false) == false { goto StopCheck } } state HeadButtWait { transition IsAnimPlaying("hbut", "st", false) == false { direct goto HitCheck } } state HitCheck { transition InTargetProximityRadius(1.8, false) { ;// action HurtTargetUnit(60.0) action HurtTargetUnit(false, 1.0) goto HeadButtEnd } } state HeadButtEnd { transition IsAnimStatePlaying("hbut", false) == false { goto StopCheck } } state StopCheck { transition IsTargetDead() { goto ExitStart } transition { goto ChaseVehicle } } ;//------------------------ Exit States Begin ---------------------- exitstart state ExitStart { transition { goto ExitEnd } } exitend state ExitEnd { } ;//------------------------ Exit States End ---------------------- }