예제 #1
0
    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);
                }
            }
        }
    }