public void Attack(Unit attacker, Unit target) { if (attacker.HasMoveLeft()) { playGrid.SetReachable(attacker.GetCellPos(), true); Vector3Int nextPos = playGrid.GetAttackCell(target.GetCellPos()); Stack <Vector3> path = playGrid.GetPath(attacker.GetCellPos(), nextPos); if (path.Count != 0) { attacker.StartMoving(path, playGrid.GetWorldPos(attacker.GetCellPos()), 3f); playGrid.MoveUnit(attacker.GetCellPos(), nextPos, attacker.isEnemy()); attacker.SetCellPos(nextPos); moving = true; } } //Target Dies if (attacker.Attack(target, true)) { playGrid.ResetTile(target.GetCellPos()); if (attacker.isEnemy()) { FriendlyUnits.Remove(target); } else { EnemyUnits.Remove(target); } } //CounterAttack else if (target.GetRange() >= attacker.GetRange()) { //Attacker Dies if (target.Attack(attacker, false)) { playGrid.ResetTile(attacker.GetCellPos()); if (attacker.isEnemy()) { EnemyUnits.Remove(attacker); } else { FriendlyUnits.Remove(attacker); } } } }