Ejemplo n.º 1
0
    public void DamageFunction(int dmg, IAttackable target, bool wpnAtk) ///WORKS ONLY WITH ATKDIST = 2
    {
        int dir = -1;

        Vector3Int[] adjs = GridHelper.GetAdjacentTiles(playerManager.Coords());
        for (int i = 0; i < 6; ++i)
        {
            if (target.Coords() == adjs[i] || target.Coords() == GridHelper.GetTileInDirection(adjs[i], i))
            {
                dir = i;
                break;
            }
        }

        Vector3Int toStandOn = GridHelper.GetTileInDirection(target.Coords(), dir);

        if (GridHelper.CanStandOn(toStandOn))
        {
            target.MoveTo(toStandOn);
        }
        else
        {
            playerManager.DamageTarget(dmg, target, wpnAtk);
        }
    }
Ejemplo n.º 2
0
    public void DamageFunction(int dmg, IAttackable target, bool wpatk)
    {
        int dmgDir = GridHelper.GetAdjDirection(playerManager.Coords(), target.Coords());

        playerManager.cardManager.AddCardToBottom(Resources.Load("Data/Cards/Upgrades/Knight/Plunge " + dmgDir) as Card);
        playerManager.DamageTarget(dmg, target, wpatk);
    }
Ejemplo n.º 3
0
    public void AttackBasedOnPiercing(IAttackable target)
    {
        if (!playerInfo.basicIsStraight || !playerInfo.basicIsPiercing)   //non piercing atk
        {
            DamageTarget(BasicDamage(), target, true);
        }
        else   ///this only for piercing atks (so ranger)
        {
            int targetDir = -1;
            int basicDist = BasicRange();
            List <Vector3Int>[] tilesInDir = new List <Vector3Int> [6];

            for (int i = 0; i < 6; ++i)
            {
                tilesInDir[i] = GridHelper.TilesInDirection(Coords(), i, basicDist, true, GridHelper.CanAttackThrough);
                if (GridHelper.TileInList(target.Coords(), tilesInDir[i]))
                {
                    targetDir = i;
                    break;
                }
            }

            List <RaycastHit2D> hits = GridHelper.RaycastTilesNoEmptyHits(tilesInDir[targetDir]);
            foreach (var hit1 in hits)
            {
                IAttackable piercedTarget = hit1.transform.parent.GetComponent <IAttackable>();
                if (piercedTarget != null)
                {
                    DamageTarget(BasicDamage(), piercedTarget, true);
                }
            }
        }
    }
Ejemplo n.º 4
0
    private void PushTarget(IAttackable target)
    {
        Vector3Int[]      adjs       = GridHelper.GetAdjacentTiles(target.Coords());
        List <Vector3Int> standables = new List <Vector3Int>();

        foreach (var tile in adjs)
        {
            if (GridHelper.CanStandOn(tile))
            {
                standables.Add(tile);
            }
        }

        target.MoveTo(standables[Random.Range(0, standables.Count)]);
    }
Ejemplo n.º 5
0
    public override IEnumerator LandAttack(IAttackable target)   //doesnt check if I have enought resolve?
    {
        if (playerManager.playerInfo.attacked)
        {
            yield break;
        }

        PlayerInfo pi = playerManager.playerInfo;

        if (!pi.basicIsStraight || !pi.basicIsPiercing)
        {
            playerManager.DamageTarget(playerManager.BasicDamage(), target, true);
            target.SetAttackableOutline(false); //false = !attacked
        }
        else                                    ///this only for piercing atks (so ranger)
        {
            int targetDir = -1;
            int basicDist = playerManager.BasicRange();
            List <Vector3Int>[] tilesInDir = new List <Vector3Int> [6];

            for (int i = 0; i < 6; ++i)
            {
                tilesInDir[i] = GridHelper.TilesInDirection(playerManager.Coords(), i, basicDist, true, GridHelper.CanAttackThrough);
                if (GridHelper.TileInList(target.Coords(), tilesInDir[i]))
                {
                    targetDir = i;
                    break;
                }
            }

            List <RaycastHit2D> hits = GridHelper.RaycastTilesNoEmptyHits(tilesInDir[targetDir]);
            foreach (var hit in hits)
            {
                IAttackable piercedTarget = hit.transform.parent.GetComponent <IAttackable>();
                if (piercedTarget != null)
                {
                    playerManager.DamageTarget(playerManager.BasicDamage(), piercedTarget);
                    target.SetAttackableOutline(false);
                }
            }
        }

        playerManager.UpdateResolve(playerManager.playerInfo.resolve - playerManager.BasicCost());
        playerManager.playerInfo.attacked = true;

        playerManager.HideAttack();
        yield break;
    }
Ejemplo n.º 6
0
    private IEnumerator CardAttackRoutine(List <Vector3Int> tiles, bool piercing, CardActionExecutor cae, int currentAction, int cardDmg, bool weaponAtk, DealDamageDel DamageFunction, List <IAttackable> targets)
    {
        while (true)
        {
            if (Input.GetMouseButtonDown(0))
            {
                if (!GridHelper.TileInList(MouseCoords(), tiles))
                {
                    CardAttackCancel();
                    break;
                }

                List <RaycastHit2D> hits = GridHelper.RaycastTile(MouseCoords());
                if (hits.Count == 0)
                {
                    CardAttackCancel();
                    break;
                }

                bool landedHit = false;
                foreach (var hit in hits)
                {
                    IAttackable target = hit.transform.parent.GetComponent <IAttackable>();
                    if (target == null)
                    {
                        continue;
                    }
                    landedHit = true;

                    //actually hit something
                    if (piercing)
                    {
                        int targetDir = -1;
                        int basicDist = BasicRange();
                        List <Vector3Int>[] tilesInDir = new List <Vector3Int> [6];

                        for (int i = 0; i < 6; ++i)
                        {
                            tilesInDir[i] = GridHelper.TilesInDirection(Coords(), i, basicDist, true, GridHelper.CanAttackThrough);
                            if (GridHelper.TileInList(target.Coords(), tilesInDir[i]))
                            {
                                targetDir = i;
                                break;
                            }
                        }

                        List <RaycastHit2D> hits1 = GridHelper.RaycastTilesNoEmptyHits(tilesInDir[targetDir]);
                        foreach (var dirHit in hits1)
                        {
                            IAttackable piercedTarget = dirHit.transform.parent.GetComponent <IAttackable>();
                            if (piercedTarget != null)
                            {
                                DamageFunction(cardDmg, piercedTarget, weaponAtk);
                                target.SetAttackableOutline(false);
                            }
                        }
                    }
                    else
                    {
                        DamageFunction(cardDmg, target, weaponAtk);
                    }

                    break;
                }

                if (!landedHit)
                {
                    CardAttackCancel();
                    break;
                }

                CardAttackHide();
                cae.cardPlayState[currentAction] = 1;
                break;
            }
            else if (Input.GetMouseButtonDown(1))
            {
                foreach (var tile in tiles)
                {
                    GridHelper.groundTilemap.SetColor(tile, Color.white);
                }
                cae.cardPlayState[currentAction] = 2;
                break;
            }
            yield return(null);
        }

        void CardAttackHide()
        {
            foreach (var tile in tiles)
            {
                GridHelper.groundTilemap.SetColor(tile, Color.white);
            }
            foreach (var target in targets)
            {
                target.SetAttackableOutline(false);
            }
        }

        void CardAttackCancel()
        {
            CardAttackHide();
            cae.cardPlayState[currentAction] = 2;
        }
    }