Exemplo n.º 1
0
    //En función de donde este mirando el personaje paso una lista de tiles diferente.
    public override void Attack(UnitBase unitToAttack)
    {
        CalculateDamage(unitToAttack);
        CheckIfUnitHasMarks(unitToAttack);
        HideAttackEffect(unitToAttack);

        if (checkersAttack)
        {
            //UNDO
            CreateAttackCommand(unitToAttack);

            unitsCanJump--;

            //Importante esta llamada sea la primera
            CalculateAttackLogic(unitToAttack, true);

            //Quito el color del tile
            myCurrentTile.ColorDeselect();
            transform.DOJump(currentTileVectorToMove, 1, 1, 1);

            //Cambio la rotación
            NewRotationAfterJump(unitToAttack.myCurrentTile);
            unitsAttacked.Add(unitToAttack);

            //Hago daño
            DoDamage(unitToAttack);

            CheckPasiveUpgrades(unitToAttack);

            myPanelPortrait.GetComponent <Portraits>().specialSkillTurnsLeft.text = unitsCanJump.ToString();

            SoundManager.Instance.PlaySound(AppSounds.ROGUE_ATTACK);

            if (unitsCanJump >= 1)
            {
                LM.DeSelectUnit();
                hasAttacked = false;
                CheckUnitsAndTilesInRangeToAttack(true);

                hasMoved = true;

                UIM.RefreshTokens();
                LM.SelectUnit(0, this);

                UIM.CheckActionsAvaliable();


                for (int i = 0; i < unitsAttacked.Count; i++)
                {
                    currentUnitsAvailableToAttack.Remove(unitsAttacked[i]);
                }
            }
            else
            {
                //La base tiene que ir al final para que el bool de hasAttacked se active después del efecto.
                base.Attack(unitToAttack);
                hasAttacked = true;
            }
        }

        else if (extraTurnAttackAfterKill)
        {
            //UNDO
            CreateAttackCommand(unitToAttack);

            //Importante esta llamada sea la primera
            CalculateAttackLogic(unitToAttack, true);

            //Quito el color del tile
            myCurrentTile.ColorDeselect();
            transform.DOJump(currentTileVectorToMove, 1, 1, 1);

            //Cambio la rotación
            NewRotationAfterJump(unitToAttack.myCurrentTile);

            //Hago daño
            DoDamage(unitToAttack);

            CheckPasiveUpgrades(unitToAttack);

            SoundManager.Instance.PlaySound(AppSounds.ROGUE_ATTACK);

            if (unitToAttack.isDead && extraTurnCount > 0)
            {
                extraTurnCount--;
                hasAttacked = false;
                hasMoved    = false;
                UIM.RefreshTokens();
                LM.DeSelectUnit();
                UIM.CheckActionsAvaliable();
                myPanelPortrait.GetComponent <Portraits>().specialSkillTurnsLeft.text = "0";

                //Lo hago aquí para que cuando se seleccione nuevamente ya esté bien calculado.
                LM.tilesAvailableForMovement = new List <IndividualTiles>(LM.TM.OptimizedCheckAvailableTilesForMovement(movementUds, this, false));

                for (int i = 0; i < LM.tilesAvailableForMovement.Count; i++)
                {
                    LM.tilesAvailableForMovement[i].ColorMovement();
                }

                LM.SelectUnit(movementUds, this);
            }
            else
            {
                //La base tiene que ir al final para que el bool de hasAttacked se active después del efecto.
                base.Attack(unitToAttack);
                hasAttacked = true;
            }
        }
        else
        {
            //UNDO
            CreateAttackCommand(unitToAttack);

            //Importante esta llamada sea la primera
            CalculateAttackLogic(unitToAttack, true);

            //Quito el color del tile
            myCurrentTile.ColorDeselect();
            transform.DOJump(currentTileVectorToMove, 1, 1, 1);

            //Cambio la rotación
            NewRotationAfterJump(unitToAttack.myCurrentTile);

            //Hago daño
            DoDamage(unitToAttack);

            CheckPasiveUpgrades(unitToAttack);

            SoundManager.Instance.PlaySound(AppSounds.ROGUE_ATTACK);

            //La base tiene que ir al final para que el bool de hasAttacked se active después del efecto.
            base.Attack(unitToAttack);
            hasAttacked = true;
        }
    }