Exemplo n.º 1
0
    virtual public void StartNewAction()
    {
        float shouldMoveConfidence   = 0;
        float shouldAttackConfidence = 0;

        if (movementBehaviour)
        {
            shouldMoveConfidence = movementBehaviour.ShouldMove();
        }
        if (attackBehaviour)
        {
            shouldAttackConfidence = attackBehaviour.ShouldAttack();
        }

        if (shouldMoveConfidence == 0 && shouldAttackConfidence == 0)
        {
            return;
        }

        float totalConfidence = shouldMoveConfidence + shouldAttackConfidence;
        float random          = UnityEngine.Random.Range(0, totalConfidence);

        if (random < shouldMoveConfidence)
        {
            movementBehaviour.Move();
        }
        else
        {
            attackBehaviour.Attack();
        }
    }
Exemplo n.º 2
0
    void AttackBehaviourRoutine()
    {
        if (NavMeshAgent == null || AttackBehaviour == null)
        {
            return;
        }

        if (AttackBehaviour.CurrentEnemy)
        {
            float DistanceFromEnemyToNavDestination = Vector3.Distance(AttackBehaviour.CurrentEnemy.transform.position, NavMeshAgent.destination);

            AttackBehaviour.Attack();

            if (DistanceFromEnemyToNavDestination > 0.2f)
            {
                NavMeshAgent.SetDestination(AttackBehaviour.CurrentEnemy.transform.position);
                NavMeshAgent.Resume();
            }
            if (NavMeshAgent.remainingDistance < 2.0f)
            {
                NavMeshAgent.Stop();
                return;
            }
        }
    }
Exemplo n.º 3
0
 void Update()
 {
     //ATTACK ANIMATION AND ENABLE ATTACK HITBOX DEPENDING ON DIRECTION
     if (_animator.GetCurrentAnimatorStateInfo(0).IsName("Attack"))
     {
         if (_spriteRenderer.flipX == false)
         {
             _attackBehaviour.FlipAttack(false);
         }
         else
         {
             _attackBehaviour.FlipAttack(true);
         }
         _attackBehaviour.Attack(1);
     }
     else
     {
         _attackBehaviour.FlipAttack(true);
         _attackBehaviour.Attack(0);
         _attackBehaviour.FlipAttack(false);
         _attackBehaviour.Attack(0);
     }
 }
Exemplo n.º 4
0
 private void LateUpdate()
 {
     if (Target)
     {
         if ((Agent.transform.position - Target.transform.position).magnitude < DistanceToTarget)
         {
             AttackBehaviour.Attack(Target);
         }
         else
         {
             Agent.SetDestination(Target.transform.position);
         }
     }
     else if (AttackBehaviour.IsAttackTarget)
     {
         AttackBehaviour.Untarget();
     }
 }
Exemplo n.º 5
0
    private void Update()
    {
        if (!Active)
        {
            return;
        }

        if (Input.GetButtonDown("Fire_P" + playerStat.playerNumber))
        {
            if (attackBehaviour != null)
            {
                attackBehaviour.Attack();
            }
        }

        if (Input.GetButtonDown("Dash_P" + playerStat.playerNumber))
        {
            movementController.Dash();
        }
    }
Exemplo n.º 6
0
        /// <summary>
        /// Pick the next target.
        /// </summary>
        private void PickTarget()
        {
            if (Body.IsIncapacitated)
            {
                return;
            }

            GameLiving target = Aggression.PrimaryTarget;

            if (target == null)
            {
                AttackBehaviour.Retreat();
                Aggression.Clear();
                Body.TargetObject = null;
                AttackBehaviour   = PassiveBehaviour;
                Body.WalkToSpawn();
            }
            else
            {
                if (AttackBehaviour is PassiveBehaviour)
                {
                    AttackBehaviour = (Body.CanCastHarmfulSpells)
                        ? CastingBehaviour
                        : MeleeBehaviour;
                }
                else
                {
                    if (AttackBehaviour is MeleeBehaviour)
                    {
                        if (Body.CanCastHarmfulSpells && Util.Chance(Properties.GAMENPC_CHANCES_TO_CAST))
                        {
                            AttackBehaviour = CastingBehaviour;
                        }
                    }
                }

                AttackBehaviour.Attack(target);
            }
        }
    void FixedUpdate()
    {
        if (deadbehaviour.isDead)
        {
            return;
        }

        float horizontal = Input.GetAxisRaw("Horizontal");

        physics.Move(horizontal, buttons["Jump"]);
        if (buttons["Grappling gun"])
        {
            grapplingGun.UseGrapplingHook();
        }
        if (buttons["Attack"])
        {
            attackBehaviour.Attack();
        }

        foreach (var key in keys)
        {
            buttons[key] = false;
        }
    }
Exemplo n.º 8
0
 public void Attack()
 {
     AttackBehaviour.Attack();
 }
Exemplo n.º 9
0
    // @TODO: Rewrite this to utilize a sphere collider instead of
    //        recasting a Ray over and over again
    void Update()
    {
        if (AssociatedLane == null)
        {
            return;
        }

        switch (CurrentState)
        {
        case AIState.Attacking:
            if (AttackBehaviour.CurrentEnemy == null)
            {
                if (!EngageInCombat(Map.EntityTypes.Minion) && !EngageInCombat(Map.EntityTypes.Minion) && !EngageInCombat(Map.EntityTypes.Building))
                {
                    CurrentState = AIState.Idle;
                }
            }
            else
            {
                // If a minion is attacking a hero, constantly search for
                // minions to attack with higher priority
                if (CurrentlyAttackedType == Map.EntityTypes.Hero)
                {
                    if (!EngageInCombat(Map.EntityTypes.Minion))
                    {
                        EngageInCombat(Map.EntityTypes.Building);
                    }
                }

                float DistanceFromEnemyToNavDestination = Vector3.Distance(AttackBehaviour.CurrentEnemy.transform.position, NavMeshAgent.destination);

                AttackBehaviour.Attack();

                if (DistanceFromEnemyToNavDestination > 0.2f)
                {
                    NavMeshAgent.SetDestination(AttackBehaviour.CurrentEnemy.transform.position);
                    NavMeshAgent.Resume();
                }
                if (NavMeshAgent.remainingDistance < 2.0f)
                {
                    NavMeshAgent.Stop();
                    return;
                }
            }
            break;

        case AIState.Idle:
            if (EngageInCombat(Map.EntityTypes.Minion) || EngageInCombat(Map.EntityTypes.Hero) || EngageInCombat(Map.EntityTypes.Building))
            {
                CurrentState = AIState.Attacking;
                NavMeshAgent.SetDestination(AttackBehaviour.CurrentEnemy.transform.position);
                NavMeshAgent.Resume();
                break;
            }

            if (NavMeshAgent.remainingDistance < 3.0f && !NavMeshAgent.pathPending)
            {
                ProgressToNextNode();
            }
            break;
        }
    }