Esempio n. 1
0
    private void Update()
    {
        if (ActualTarget == null)
        {
            if (actualState != TroopStates.DEFENDING)
            {
                ActualTarget = PickAnTarget();
            }
        }
        else
        {
            if (!IsInRange(ActualTarget.position, troopData.attackDistance))
            {
                actualState = TroopStates.MOVING;
                movementAction.actualTarget = ActualTarget.position;
            }
            else
            {
                if (troopData.troopObjective == PhaseObjectives.DEFEND && ActualTarget.CompareTag("Tower"))
                {
                    EnterInDefenseState();
                }
                else if (!attackAction.IsAttacking)
                {
                    AttackTarget(ActualTarget);
                }
            }
        }

        if (attackAction.IsAttacking && actualState == TroopStates.ATTACKING)
        {
            attackingTowerEvent.Raise(troopData);
        }
    }
Esempio n. 2
0
    private void EnterInDefenseState()
    {
        actualState = TroopStates.DEFENDING;

        ActualTarget = null;

        movementAction.WaitOnActualPosition();
    }
Esempio n. 3
0
    private void AttackTarget(Transform attackTarget)
    {
        if (attackTarget.CompareTag("Tower"))
        {
            actualState = TroopStates.ATTACKING;
        }
        else if (attackTarget.CompareTag("Troop") || attackTarget.CompareTag("Hero"))
        {
            actualState = TroopStates.FIGHTING;
        }

        // TO:DO use Entity class from RunTimeDate to pass on attackAction.Attack()
        RunTimeData targetData = attackTarget.GetComponent <RunTimeData>();

        if (targetData != null)
        {
            attackAction.Attack(targetData);
        }
    }