示例#1
0
 public List <Vector3Int> TilesInAttack(RangeDefined range)
 {
     if (range.IsTileValid == null)
     {
         range.IsTileValid = GridHelper.CanAttackThrough;
     }
     return(GridHelper.TilesInRange(Coords(), range));
 }
示例#2
0
    public static List <Vector3Int> TilesInRange(Vector3Int startPos, RangeDefined range)
    {
        if (range.basicRange)
        {
            Debug.LogError("Invalid request in GridHelper.TilesInRange. You should request range.basicRange from a PlayerManager");
            return(new List <Vector3Int>());
        }

        if (range.allowedDirections == null)
        {
            range.allowedDirections = new List <int>();
        }

        if (range.allowedDirections.Count == 0)
        {
            for (int i = 0; i < 6; ++i)
            {
                range.allowedDirections.Add(i);
            }
        }

        if (range.dist == -1)  // i want to do this even if (range.straight == true) accidenatly
        {
            List <Vector3Int> tiles = TilesInDistance(startPos, -1, range.self);
            return(FilterInvalidTiles(tiles, range.IsTileValid));
        }

        if (range.straight)
        {
            List <Vector3Int> tiles = new List <Vector3Int>();
            foreach (int dir in range.allowedDirections)
            {
                List <Vector3Int> temp = TilesInDirection(startPos, dir, range.dist, range.piercing, range.IsTileValid);
                foreach (var tile in temp)
                {
                    tiles.Add(tile);
                }
            }
            if (range.self)
            {
                tiles.Add(startPos);
            }
            return(tiles); //filtering must be done in TilesInDirection, so no need to do it here
        }

        List <Vector3Int> tiles1 = TilesInDistance(startPos, range.dist, range.self);

        return(FilterInvalidTiles(tiles1, range.IsTileValid));
    }
示例#3
0
    public void CardSelectTile(Vector3Int start, RangeDefined range, SelectTileDel SelectTileFunction)
    {
        List <Vector3Int> tiles;

        if (range.basicRange)
        {
            tiles = TilesInBasic(range.allowedDirections);
        }
        else
        {
            tiles = GridHelper.TilesInRange(start, range);
        }

        StartCoroutine(CardSelectTileRoutine(tiles, SelectTileFunction));
    }
示例#4
0
 public void CardAttack(int cardDmg, bool weaponAtk, RangeDefined range, CardActionExecutor cae, int currentAction)
 {
     CardAttack(cardDmg, weaponAtk, DamageTarget, range, cae, currentAction);
 }
示例#5
0
 public void CardAttack(int cardDmg, RangeDefined range, CardActionExecutor cae, int currentAction)
 {
     CardAttack(cardDmg, false, DamageTarget, range, cae, currentAction);
 }
示例#6
0
    public void CardAttack(int cardDmg, bool weaponAtk, DealDamageDel DamageFunction, RangeDefined range, CardActionExecutor cae, int currentAction)
    {
        if (range.IsTileValid == null) //this gets done in  TilesInAttack anyway, but whatever
        {
            range.IsTileValid = GridHelper.CanAttackThrough;
        }

        List <Vector3Int> tiles;

        if (range.basicRange)
        {
            tiles = TilesInBasic(range.allowedDirections);
        }
        else
        {
            tiles = TilesInAttack(range);
        }

        foreach (var tile in tiles)
        {
            GridHelper.groundTilemap.SetColor(tile, atkRangeColor);
        }

        List <RaycastHit2D> hits    = GridHelper.RaycastTiles(tiles);
        List <IAttackable>  targets = new List <IAttackable>();

        foreach (var hit in hits)
        {
            IAttackable target = hit.collider.gameObject.transform.parent.GetComponent <IAttackable>();
            if (target != null)
            {
                target.SetAttackableOutline(true);
                targets.Add(target);
            }
        }

        StartCoroutine(CardAttackRoutine(
                           tiles,
                           (range.basicRange && playerInfo.basicIsPiercing && playerInfo.basicIsStraight) ||
                           (!range.basicRange && range.straight && range.piercing),
                           cae,
                           currentAction,
                           cardDmg,
                           weaponAtk,
                           DamageFunction,
                           targets));
    }
示例#7
0
 public void CardSelectTile(RangeDefined range, SelectTileDel SelectTileFunction)
 {
     CardSelectTile(Coords(), range, SelectTileFunction);
 }
示例#8
0
 public List <Vector3Int> TilesInAnyMove(RangeDefined range)
 {
     range.IsTileValid = GridHelper.CanStandOn;
     return(GridHelper.TilesInRange(Coords(), range));
 }