コード例 #1
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (fsmBehaviour.messageReceiver)
     {
         fsmBehaviour.messageReceiver.Send(listenerName, message);
     }
 }
コード例 #2
0
            public void DoActions(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType)
            {
                switch (executionType)
                {
                case vFSMComponentExecutionType.OnStateEnter:
                    for (int i = 0; i < actionsEnter.Count; i++)
                    {
                        actionsEnter[i].DoAction(fsmBehaviour, vFSMComponentExecutionType.OnStateEnter);
                    }
                    break;

                case vFSMComponentExecutionType.OnStateExit:
                    for (int i = 0; i < actionsExit.Count; i++)
                    {
                        actionsExit[i].DoAction(fsmBehaviour, vFSMComponentExecutionType.OnStateExit);
                    }
                    break;

                case vFSMComponentExecutionType.OnStateUpdate:

                    for (int i = 0; i < actionsUpdate.Count; i++)
                    {
                        actionsUpdate[i].DoAction(fsmBehaviour, vFSMComponentExecutionType.OnStateUpdate);
                    }
                    break;
                }
            }
コード例 #3
0
        public virtual void Attack(vIControlAICombat aICombat, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
        {
            if (executionType == vFSMComponentExecutionType.OnStateEnter)
            {
                aICombat.InitAttackTime();
                if (forceFirstAttack)
                {
                    aICombat.Attack(overrideStrongAttack ? strongAttack : false, overrideAttackID ? attackID : -1, true);
                }
            }

            if (aICombat != null && aICombat.currentTarget.transform)
            {
                var distance = aICombat.targetDistance;
                if (distance <= (overrideAttackDistance ? attackDistance : aICombat.attackDistance))
                {
                    aICombat.RotateTo(aICombat.currentTarget.transform.position - aICombat.transform.position);
                    if (!aICombat.isAttacking && aICombat.canAttack)
                    {
                        aICombat.Attack(overrideStrongAttack ? strongAttack : false, overrideAttackID ? attackID : -1);
                    }
                }
                else
                {
                    aICombat.SetSpeed(attackSpeed);
                    aICombat.MoveTo(aICombat.currentTarget.transform.position);
                }
            }
            if (executionType == vFSMComponentExecutionType.OnStateExit)
            {
                aICombat.ResetAttackTime();
            }
        }
コード例 #4
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (executionType == vFSMComponentExecutionType.OnStateEnter)
     {
         fsmBehaviour.aiController.SetDetectionTags(tags);
     }
 }
コード例 #5
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (fsmBehaviour.aiController.receivedDamage.lastSender)
     {
         fsmBehaviour.aiController.SetCurrentTarget(fsmBehaviour.aiController.receivedDamage.lastSender);
     }
 }
コード例 #6
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (fsmBehaviour != null && fsmBehaviour.aiController.currentTarget.transform && fsmBehaviour.aiController.targetInLineOfSight)
     {
         fsmBehaviour.aiController.RotateTo(fsmBehaviour.aiController.lastTargetPosition);
     }
 }
コード例 #7
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (executionType == vFSMComponentExecutionType.OnStateEnter)
     {
         fsmBehaviour.aiController.RemoveCurrentTarget();
     }
 }
コード例 #8
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (executionType == vFSMComponentExecutionType.OnStateEnter)
     {
         fsmBehaviour.aiController.SetObstaclesLayer(newLayer);
     }
 }
コード例 #9
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (fsmBehaviour.aiController is vIControlAIShooter)
     {
         ControlAttack(fsmBehaviour, fsmBehaviour.aiController as vIControlAIShooter);
     }
 }
コード例 #10
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (executionType == vFSMComponentExecutionType.OnStateEnter)
     {
         fsmBehaviour.aiController.SetLineOfSight(fieldOfView, minDistanceToDetect, maxDistanceToDetect, lostTargetDistance);
     }
 }
コード例 #11
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (fsmBehaviour.aiController != null)
     {
         if (fsmBehaviour.aiController.HasComponent <vAINoiseListener>())
         {
             fsmBehaviour.aiController.SetSpeed(speed);
             var    noiseListener = fsmBehaviour.aiController.GetAIComponent <vAINoiseListener>();
             vNoise noise         = null;
             if (findNewNoise)
             {
                 if (specificType)
                 {
                     noise = noiseListener.GetNearNoiseByTypes(noiseTypes);
                 }
                 else
                 {
                     noise = noiseListener.GetNearNoise();
                 }
             }
             else
             {
                 noise = noiseListener.lastListenedNoise;
             }
             if (noise != null)
             {
                 fsmBehaviour.aiController.MoveTo(noise.position);
                 if (lookToNoisePosition)
                 {
                     fsmBehaviour.aiController.LookTo(noise.position, offsetLookHeight: 0);
                 }
             }
         }
     }
 }
コード例 #12
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (fsmBehaviour.aiController.HasComponent <vAICompanion>())
     {
         fsmBehaviour.aiController.SetSpeed(speed);
         MoveToFriendPosition(fsmBehaviour.aiController.GetAIComponent <vAICompanion>());
     }
 }
コード例 #13
0
ファイル: vAddHealth.cs プロジェクト: nerodroid/dog_game
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (fsmBehaviour.aiController.isDead && !recoverWhenIsDead)
     {
         return;
     }
     AddHealth(fsmBehaviour);
 }
コード例 #14
0
ファイル: vAIFlee.cs プロジェクト: nerodroid/dog_game
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (executionType == vFSMComponentExecutionType.OnStateUpdate)
     {
         Flee(fsmBehaviour);
     }
     else if (executionType == vFSMComponentExecutionType.OnStateEnter)
     {
         Flee(fsmBehaviour);
         // force update path to be really fast for quick time, so the AI can react quickly and flee
         fsmBehaviour.aiController.ForceUpdatePath();
     }
 }
コード例 #15
0
ファイル: vGoToTarget.cs プロジェクト: nerodroid/dog_game
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     if (fsmBehaviour.aiController == null)
     {
         return;
     }
     if (executionType == vFSMComponentExecutionType.OnStateEnter)
     {
         fsmBehaviour.aiController.ForceUpdatePath(2f);
     }
     fsmBehaviour.aiController.SetSpeed(speed);
     if (useStrafeMovement)
     {
         fsmBehaviour.aiController.StrafeMoveTo(fsmBehaviour.aiController.lastTargetPosition, fsmBehaviour.aiController.lastTargetPosition - fsmBehaviour.transform.position);
     }
     else
     {
         fsmBehaviour.aiController.MoveTo(fsmBehaviour.aiController.lastTargetPosition);
     }
 }
コード例 #16
0
        public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
        {
            if (fsmBehaviour.aiController is vIControlAICombat)
            {
                var combatController = (fsmBehaviour.aiController as vIControlAICombat);
                switch (executionType)
                {
                case vFSMComponentExecutionType.OnStateEnter:
                    OnEnterCombat(combatController);
                    break;

                case vFSMComponentExecutionType.OnStateExit:
                    OnExitCombat(combatController);
                    break;

                case vFSMComponentExecutionType.OnStateUpdate:
                    OnUpdateCombat(combatController);
                    break;
                }
            }
        }
コード例 #17
0
        public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
        {
            vIControlAICombat combatController = fsmBehaviour.aiController as vIControlAICombat;

            if (combatController == null)
            {
                return;
            }
            combatController.SetSpeed(speed);
            if (executionType == vFSMComponentExecutionType.OnStateUpdate && fsmBehaviour.aiController.HasComponent <vAICover>())
            {
                var cover = fsmBehaviour.aiController.GetAIComponent <vAICover>();
                if (fsmBehaviour.aiController.currentTarget.transform)
                {
                    cover.GetCoverFromTargetThreat();
                }
                else
                {
                    cover.GetCoverFromRandomThreat();
                }
            }
            if (executionType == vFSMComponentExecutionType.OnStateExit)
            {
                if (fsmBehaviour.aiController.HasComponent <vAICover>())
                {
                    var cover = fsmBehaviour.aiController.GetAIComponent <vAICover>();
                    cover.OnExitCover();
                }
                (combatController).isInCombat = false;
                combatController.isCrouching  = false;
            }
            if (executionType == vFSMComponentExecutionType.OnStateEnter)
            {
                (combatController).isInCombat = true;
            }
        }
コード例 #18
0
        protected virtual void ControlAttack(vIFSMBehaviourController fsmBehaviour, vIControlAIShooter combat, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
        {
            switch (executionType)
            {
            case vFSMComponentExecutionType.OnStateEnter:
                InitAttack(combat);
                break;

            case vFSMComponentExecutionType.OnStateUpdate:
                HandleAttack(fsmBehaviour, combat);
                break;

            case vFSMComponentExecutionType.OnStateExit:
                FinishAttack(combat);
                break;
            }
        }
コード例 #19
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     fsmBehaviour.aiController.LookAround();
 }
コード例 #20
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     fsmBehaviour.ChangeBehaviour(newBehaviour);
 }
コード例 #21
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     fsmBehaviour.aiController.animator.Play(_animationState, _layer);
 }
コード例 #22
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     Attack(fsmBehaviour.aiController as vIControlAICombat, executionType);
 }
コード例 #23
0
ファイル: vWanderAction.cs プロジェクト: nerodroid/dog_game
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     DoWander(fsmBehaviour);
 }
コード例 #24
0
 public override void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate)
 {
     FindTarget(fsmBehaviour.aiController);
 }
コード例 #25
0
ファイル: vStateAction.cs プロジェクト: nerodroid/dog_game
 public abstract void DoAction(vIFSMBehaviourController fsmBehaviour, vFSMComponentExecutionType executionType = vFSMComponentExecutionType.OnStateUpdate);