Esempio n. 1
0
 protected virtual void EngageTarget(vIControlAICombat controller)
 {
     if (controller.currentTarget.transform == null)
     {
         return;
     }
     controller.SetSpeed(engageSpeed);
     if (controller.targetDistance <= controller.attackDistance)
     {
         controller.Stop();
         controller.Attack();
     }
     else if (!controller.animatorStateInfos.HasAnyTag("Attack", "LockMovement", "CustomAction"))
     {
         if (engageInStrafe)
         {
             controller.StrafeMoveTo(controller.currentTarget.transform.position, (controller.currentTarget.transform.position - controller.transform.position).normalized);
         }
         else
         {
             controller.MoveTo(controller.currentTarget.transform.position);
         }
     }
     else
     {
         controller.Stop();
     }
 }
Esempio n. 2
0
        private void DrawGizmos(vIControlAICombat combatControl)
        {
            minDistColor.a  = .2f;
            maxDistColor.a  = .2f;
            lostDistColor.a = .2f;
            combatColor.a   = .2f;

            var   transform = (eyes != null && eyes.objectReferenceValue != null ? (eyes.objectReferenceValue as Transform) : (target as MonoBehaviour).transform);
            float _fov      = fov != null ? fov.floatValue : 0;

            if (combatControl != null)
            {
                Handles.color = combatColor;
                Handles.DrawSolidDisc((target as MonoBehaviour).transform.position, Vector3.up, combatControl.combatRange);
            }

            if (maxDist != null)
            {
                Handles.color = maxDistColor;
                var forward = transform.forward;
                forward.y = 0;

                Handles.DrawSolidArc(transform.position, Vector3.up, forward, _fov * 0.5f, maxDist.floatValue);
                Handles.DrawSolidArc(transform.position, Vector3.up, forward, -(_fov * 0.5f), maxDist.floatValue);
                Handles.color = lostDistColor;
                Handles.DrawSolidDisc(transform.position, Vector3.up, maxDist.floatValue + lostDist.floatValue);
            }

            if (minDist != null)
            {
                Handles.color = minDistColor;
                Handles.DrawSolidDisc(transform.position, Vector3.up, minDist.floatValue);
            }
        }
Esempio n. 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();
            }
        }
Esempio n. 4
0
        protected virtual void StrafeCombatMovement(vIControlAICombat controller)
        {
            bool moveForward     = controller.targetDistance > controller.combatRange * 0.8f;
            bool moveBackWard    = controller.targetDistance < controller.minDistanceOfTheTarget;
            var  forwardMovement = (controller.currentTarget.transform.position - controller.transform.position).normalized * (moveForward ? 1 + controller.stopingDistance : (moveBackWard ? -(1 + controller.stopingDistance) : 0));

            controller.StrafeMoveTo(controller.transform.position + (controller.transform.right * ((controller.stopingDistance + 1f)) * controller.strafeCombatSide) + forwardMovement, (controller.currentTarget.transform.position - controller.transform.position).normalized);
        }
Esempio n. 5
0
 protected virtual void ControlLookPoint(vIControlAICombat controller)
 {
     if (controller.currentTarget.transform == null || !controller.currentTarget.hasCollider || !controller.targetInLineOfSight)
     {
         return;
     }
     controller.LookTo(controller.currentTarget.transform.position);
 }
Esempio n. 6
0
 public override void ClearTarget()
 {
     base.ClearTarget();
     healthController  = null;
     meleeFighter      = null;
     character         = null;
     combateController = null;
 }
Esempio n. 7
0
 protected virtual void OnExitCombat(vIControlAICombat controller)
 {
     if (controller.currentTarget.transform == null || controller.currentTarget.isDead || !controller.targetInLineOfSight)
     {
         controller.ResetAttackTime();
     }
     controller.isInCombat = false;
 }
        protected virtual void SimpleCombatMovement(vIControlAICombat controller)
        {
            bool moveForward     = controller.targetDistance > controller.combatRange * 0.8f;
            bool moveBackward    = controller.targetDistance < controller.minDistanceOfTheTarget;
            var  movepoint       = (controller.lastTargetPosition);
            var  forwardMovement = (movepoint - controller.transform.position).normalized * (moveForward ? 1 + controller.stopingDistance : (moveBackward ? -(1 + controller.stopingDistance) : 0));

            controller.StrafeMoveTo(controller.transform.position + forwardMovement, (movepoint - controller.transform.position).normalized);
        }
        protected virtual void HandleShotAttack(vIControlAICombat controller)
        {
            controller.AimToTarget();

            if (controller.canAttack)
            {
                controller.Attack();
            }
        }
Esempio n. 10
0
        protected virtual void ControlLookPoint(vIControlAICombat controller)
        {
            if (controller.currentTarget.transform == null || !controller.currentTarget.hasCollider)
            {
                return;
            }

            var movepoint = (controller.lastTargetPosition);

            controller.LookTo(movepoint);
        }
Esempio n. 11
0
 public virtual void OnReceiveAttack(vIControlAICombat controller, ref vDamage damage, vIMeleeFighter attacker, ref bool canBlock)
 {
     //HandleDefensiveCombat(controller, true);
     if (damage.damageValue > 0)
     {
         if (attacker != null && attacker.character != null && !attacker.character.isDead)
         {
             controller.SetCurrentTarget(attacker.transform);
         }
     }
 }
Esempio n. 12
0
        private void DrawDebugWindow(vIControlAICombat combatControl)
        {
            Handles.BeginGUI();
            GUILayout.BeginArea(new Rect(Screen.width - 170, Screen.height - 195, 170, 195));
            minDistColor.a  = .8f;
            maxDistColor.a  = .8f;
            lostDistColor.a = .8f;
            combatColor.a   = .8f;
            var color = GUI.color;

            GUILayout.BeginVertical("VISUAL DEBUG", skin.window, GUILayout.Width(150));
            GUILayout.Label(m_Logo, skin.label, GUILayout.MaxHeight(25));
            GUILayout.Space(10);

            GUI.color = minDistColor;
            GUILayout.BeginHorizontal("box");
            {
                GUI.color = color;
                GUILayout.Box("Min Distance To Detect", labelStyle);
            }
            GUILayout.EndHorizontal();

            GUI.color = maxDistColor;
            GUILayout.BeginHorizontal("box");
            {
                GUI.color = color;
                GUILayout.Label("Max Distance To Detect", labelStyle);
            }
            GUILayout.EndHorizontal();

            GUI.color = lostDistColor;
            GUILayout.BeginHorizontal("box");
            {
                GUI.color = color;
                GUILayout.Box("Lost Target Distance", labelStyle);
            }
            GUILayout.EndHorizontal();

            if (combatControl != null)
            {
                GUI.color = combatColor;
                GUILayout.BeginHorizontal("box");
                {
                    GUI.color = color;
                    GUILayout.Box("Combat Range", labelStyle);
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.EndVertical();
            GUI.color = color;
            GUILayout.EndArea();
            Handles.EndGUI();
        }
Esempio n. 13
0
 public override void InitTarget(Transform target)
 {
     base.InitTarget(target);
     if (target)
     {
         healthController     = target.GetComponent <vIHealthController>();
         _hadHealthController = this.healthController != null;
         meleeFighter         = target.GetComponent <vIMeleeFighter>();
         character            = target.GetComponent <vICharacter>();
         combateController    = target.GetComponent <vIControlAICombat>();
     }
 }
Esempio n. 14
0
 protected virtual void CombatMovement(vIControlAICombat controller)
 {
     controller.SetSpeed(engageSpeed);
     if (controller.strafeCombatMovement)
     {
         StrafeCombafeMovement(controller);
     }
     else
     {
         SimpleCombatMovement(controller);
     }
 }
Esempio n. 15
0
 protected override void CombatMovement(vIControlAICombat controller)
 {
     controller.SetSpeed(combatSpeed);
     if (controller.strafeCombatMovement)
     {
         StrafeCombatMovement(controller);
     }
     else
     {
         SimpleCombatMovement(controller);
     }
 }
Esempio n. 16
0
        protected virtual void EngageTarget(vIControlAICombat controller)
        {
            if (controller.currentTarget.transform == null)
            {
                return;
            }

            controller.SetSpeed(engageSpeed);

            if (!controller.animatorStateInfos.HasAnyTag("Attack", "LockMovement", "CustomAction"))
            {
                var movepoint = (controller.lastTargetPosition);
                controller.StrafeMoveTo(movepoint, movepoint - controller.transform.position);
            }
        }
Esempio n. 17
0
 protected virtual bool TargetIsInCombatRange(vIControlAICombat ctrlCombat)
 {
     if (ctrlCombat == null)
     {
         return(false);
     }
     if (ctrlCombat.currentTarget.transform == null)
     {
         return(false);
     }
     if (!ctrlCombat.currentTarget.transform.gameObject.activeSelf)
     {
         return(false);
     }
     return(ctrlCombat.targetDistance <= ctrlCombat.combatRange);
 }
Esempio n. 18
0
        protected virtual void OnSceneGUI()
        {
            if (debug == null || !debug.boolValue)
            {
                return;
            }
            vIControlAICombat combatControl = null;

            if (target is vIControlAICombat)
            {
                combatControl = target as vIControlAICombat;
            }

            DrawGizmos(combatControl);
            DrawDebugWindow(combatControl);
        }
Esempio n. 19
0
 protected virtual void CombatMovement(vIControlAICombat controller)
 {
     controller.SetSpeed(combatSpeed);
     if (controller.strafeCombatMovement)
     {
         StrafeCombatMovement(controller);
     }
     else
     {
         SimpleCombatMovement(controller);
     }
     if (controller.canBlockInCombat)
     {
         controller.Blocking();
     }
 }
Esempio n. 20
0
        protected virtual void OnUpdateCombat(vIControlAICombat controller)
        {
            if (controller.currentTarget.transform == null || controller.currentTarget.isLost)
            {
                return;
            }

            if (controller != null)
            {
                if (controller.canAttack)
                {
                    EngageTarget(controller);
                }
                else
                {
                    CombatMovement(controller);
                }
                ControlLookPoint(controller);
            }
        }
Esempio n. 21
0
        protected override void UpdateCombatState(vIControlAICombat controller)
        {
            if (controller.currentTarget.transform == null)
            {
                return;
            }

            if (controller != null)
            {
                if (controller.targetDistance > controller.attackDistance)
                {
                    EngageTarget(controller);
                }
                else
                {
                    CombatMovement(controller);
                }

                ControlLookPoint(controller);
                HandleShotAttack(controller);
            }
        }
        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;
            }
        }
Esempio n. 23
0
 /// <summary>
 /// Called from UpdateState if vIControlAI is a vIControlAICombat
 /// </summary>
 /// <param name="ctrlAICombat"></param>
 protected abstract void UpdateCombatState(vIControlAICombat ctrlAICombat);
Esempio n. 24
0
 protected virtual void OnEnterCombat(vIControlAICombat controller)
 {
     controller.InitAttackTime();
     controller.isInCombat = true;
 }
Esempio n. 25
0
 protected virtual void Start()
 {
     controller = GetComponent <vIControlAICombat>();
     controller.onDead.AddListener(RemoveCoverOnDead);
 }