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); } }
private void EnterInDefenseState() { actualState = TroopStates.DEFENDING; ActualTarget = null; movementAction.WaitOnActualPosition(); }
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); } }