Ejemplo n.º 1
0
    //Calcular los tiles en frente de un personaje según a dónde esté mirando
    public List <IndividualTiles> GetTilesInFrontOfTheCharacter(UnitBase.FacingDirection _referenceDirection, int _numberOfTilesInThatDirection)
    {
        translatedTilesInFront.Clear();

        if (_referenceDirection == UnitBase.FacingDirection.North)
        {
            CheckTilesForFront(tilesInLineUp, _numberOfTilesInThatDirection);
        }

        if (_referenceDirection == UnitBase.FacingDirection.East)
        {
            CheckTilesForFront(tilesInLineRight, _numberOfTilesInThatDirection);
        }

        if (_referenceDirection == UnitBase.FacingDirection.South)
        {
            CheckTilesForFront(tilesInLineDown, _numberOfTilesInThatDirection);
        }

        if (_referenceDirection == UnitBase.FacingDirection.West)
        {
            CheckTilesForFront(tilesInLineLeft, _numberOfTilesInThatDirection);
        }

        return(translatedTilesInFront);
    }
Ejemplo n.º 2
0
    public void RotatePlayerInNewDirection(UnitBase.FacingDirection newDirection)
    {
        UnitBase currentPlayer = LM.selectedCharacter;

        ICommand command = new MoveCommand(newDirection, currentPlayer.currentFacingDirection,
                                           currentPlayer.myCurrentTile, LM.tileToMoveAfterRotate,
                                           LM.TM.currentPath, currentPlayer,
                                           currentPlayer.buffbonusStateDamage, currentPlayer.turnsWithBuffOrDebuff, currentPlayer.movementUds, currentPlayer.turnsWithMovementBuffOrDebuff);

        CommandInvoker.AddCommand(command);
    }
Ejemplo n.º 3
0
    public MoveCommand(UnitBase.FacingDirection newRotation, UnitBase.FacingDirection previousRotation,
                       IndividualTiles previousTile, IndividualTiles tileToMove,
                       List <IndividualTiles> currentPath, UnitBase pj,
                       int _pjDamageBuffDebuff, int _pjTurnsDamageBuffDebuff, int _pjMovementBuffDebuff, int _pjTurnsMovementBuffDebuff)
    {
        this.newRotation      = newRotation;
        this.previousRotation = previousRotation;

        this.previousTile = previousTile;
        this.tileToMove   = tileToMove;

        this.currentPath = currentPath;
        this.pj          = pj;

        pj_damageBuffDebuff      = _pjDamageBuffDebuff;
        pj_turnsDamageBuffDebuff = _pjTurnsDamageBuffDebuff;

        pj_movementBuffDebuff      = _pjMovementBuffDebuff;
        pj_turnsMovementBuffDebuff = _pjTurnsMovementBuffDebuff;
    }
Ejemplo n.º 4
0
    //Decide que tile es derecha, izquierda, arriba o abajo en función de la dirección que recibe.
    //Por defecto las listas de tile dan por hecho que el norte es arriba, este derecha y así.
    //Al pasarle otra dirección como por ejemplo el este, arriba pasaría a ser el este y derecha el norte. Con esto podemos calcular los tiles laterales con una única función.
    public List <IndividualTiles> GetLateralTilesBasedOnDirection(UnitBase.FacingDirection _referenceDirection, int _numberOfTilesInThatDirection)
    {
        translatedLateralTiles.Clear();

        if (_referenceDirection == UnitBase.FacingDirection.North || _referenceDirection == UnitBase.FacingDirection.South)
        {
            //Compruebo que el número recibido no es más grande que los tiles que hay en la derecha
            if (_numberOfTilesInThatDirection > tilesInLineRight.Count)
            {
                maxTilesRightUpSide = tilesInLineRight.Count;
            }

            else
            {
                maxTilesRightUpSide = _numberOfTilesInThatDirection;
            }

            for (int i = 0; i < maxTilesRightUpSide; i++)
            {
                if (tilesInLineRight[i] != null && !tilesInLineRight[i].isEmpty && !tilesInLineRight[i].isObstacle)
                {
                    translatedLateralTiles.Add(tilesInLineRight[i]);
                }
            }


            //Hago lo mismo para la izquierda
            if (_numberOfTilesInThatDirection > tilesInLineLeft.Count)
            {
                maxTilesLeftDownSide = tilesInLineLeft.Count;
            }

            else
            {
                maxTilesLeftDownSide = _numberOfTilesInThatDirection;
            }

            for (int i = 0; i < maxTilesLeftDownSide; i++)
            {
                if (tilesInLineLeft[i] != null && !tilesInLineLeft[i].isEmpty && !tilesInLineLeft[i].isObstacle)
                {
                    translatedLateralTiles.Add(tilesInLineLeft[i]);
                }
            }
        }

        if (_referenceDirection == UnitBase.FacingDirection.East || _referenceDirection == UnitBase.FacingDirection.West)
        {
            //Compruebo que el número recibido no es más grande que los tiles que hay arriba
            if (_numberOfTilesInThatDirection > tilesInLineUp.Count)
            {
                maxTilesRightUpSide = tilesInLineUp.Count;
            }

            else
            {
                maxTilesRightUpSide = _numberOfTilesInThatDirection;
            }

            for (int i = 0; i < maxTilesRightUpSide; i++)
            {
                if (tilesInLineUp[i] != null && !tilesInLineUp[i].isEmpty && !tilesInLineUp[i].isObstacle)
                {
                    translatedLateralTiles.Add(tilesInLineUp[i]);
                }
            }

            //Hago lo mismo para la abajo
            if (_numberOfTilesInThatDirection > tilesInLineDown.Count)
            {
                maxTilesLeftDownSide = tilesInLineDown.Count;
            }

            else
            {
                maxTilesLeftDownSide = _numberOfTilesInThatDirection;
            }

            for (int i = 0; i < maxTilesLeftDownSide; i++)
            {
                if (tilesInLineDown[i] != null && !tilesInLineDown[i].isEmpty && !tilesInLineDown[i].isObstacle)
                {
                    translatedLateralTiles.Add(tilesInLineDown[i]);
                }
            }
        }

        return(translatedLateralTiles);
    }
Ejemplo n.º 5
0
    public bool isAlone; //ESTO EN REALIDAD IRIA EN EL MOVIMIENTO, COMPROBAR QUE FUNCIONA (HACER LO MISMO CON EL CABALLERO Y SI SE PONE A PROTEGER A LOS LADOS
    #endregion

    public AttackCommand(UnitBase.FacingDirection _enemypreviousRotation, UnitBase.FacingDirection _pjpreviousRotation,
                         IndividualTiles _enemyPreviousTile, IndividualTiles _pjPreviousTile,
                         int _enemyPreviousHealth, int _pjPreviousHealth,
                         UnitBase _pj, UnitBase _enemy,
                         int _pjArmor, int _objArmor,
                         bool _pjIsStunned, bool _objIsStunned,
                         bool _pjIsMarked, bool _objIsMarked, int _pjnumberOfMarks, int _objnumberOfMarks,
                         bool _pjHasMoved, bool _objHasMoved, bool _pjHasAttacked, bool _objHasAttacked,
                         int _pjDamageBuffDebuff, int _objDamageBuffDebuff, int _pjMovementBuffDebuff, int _objMovementBuffDebuff,
                         int _pjTurnsDamageBuffDebuff, int _objTurnsDamageBuffDebuff, int _pjTurnsMovementBuffDebuff, int _objTurnsMovementBuffDebuff)
    {
        objPreviousRotation = _enemypreviousRotation;
        pjPreviousRotation  = _pjpreviousRotation;

        objPreviousTile = _enemyPreviousTile;
        pjPreviousTile  = _pjPreviousTile;

        objPreviousHealth = _enemyPreviousHealth;
        pjPreviousHealth  = _pjPreviousHealth;

        pj  = _pj;
        obj = _enemy;

        pjArmor  = _pjArmor;
        objArmor = _objArmor;

        pjIsStunned  = _pjIsStunned;
        objIsStunned = _objIsStunned;

        pjIsMarked       = _pjIsMarked;
        objIsMarked      = _objIsMarked;
        pjnumberOfMarks  = _pjnumberOfMarks;
        objnumberOfMarks = _objnumberOfMarks;

        pjHasMoved     = _pjHasMoved;
        objHasMoved    = _objHasMoved;
        pjHasAttacked  = _pjHasAttacked;
        objHasAttacked = _objHasAttacked;

        pj_damageBuffDebuff      = _pjDamageBuffDebuff;
        pj_turnsDamageBuffDebuff = _pjTurnsDamageBuffDebuff;

        obj_damageBuffDebuff      = _objDamageBuffDebuff;
        obj_turnsDamageBuffDebuff = _objTurnsDamageBuffDebuff;

        pj_movementBuffDebuff      = _pjMovementBuffDebuff;
        pj_turnsMovementBuffDebuff = _pjTurnsMovementBuffDebuff;

        obj_movementBuffDebuff      = _objMovementBuffDebuff;
        obj_turnsMovementBuffDebuff = _objTurnsMovementBuffDebuff;

        #region Specific

        if (pj.GetComponent <Rogue>())
        {
            Rogue refPj = pj.GetComponent <Rogue>();

            unitsAttacked.Clear();

            for (int i = 0; i < refPj.unitsAttacked.Count; i++)
            {
                unitsAttacked.Add(refPj.unitsAttacked[i]);
            }

            ninjaExtraTurns = refPj.extraTurnCount;
            ninjaExtraJumps = refPj.unitsCanJump;

            smokeTiles.Clear();
            for (int i = 0; i < refPj.realBombsSpawned.Count; i++)
            {
                smokeTiles.Add(refPj.realBombsSpawned[i]);
            }

            ninjaBonusDamage = refPj.baseDamage;
        }

        else if (pj.GetComponent <Mage>())
        {
            Mage refPj = pj.GetComponent <Mage>();

            if (refPj.myDecoys.Count > 0)
            {
                oldDecoy = refPj.myDecoys[0];
            }

            //Esto lo tenia apuntado hace tiempo pero en principio funciona bien
            //newDecoy; //Esto da problemas seguro, mirar quizas en el execute que quite el actual en vez de guardarlo antes.
            //hasMovedWithDecoy = refPj.hasMoved; //Quizás es poner simplemente si ha movido
        }

        else if (pj.GetComponent <Samurai>())
        {
            Samurai refPj = pj.GetComponent <Samurai>();

            unitToParry = refPj.unitToParry;
            honor       = pj.GetComponent <Samurai>().currentHonor;
        }

        else if (pj.GetComponent <Druid>())
        {
            Druid refPj = pj.GetComponent <Druid>();

            for (int i = 0; i < refPj.realTilesSpawned.Count; i++)
            {
                _realTilesInstantiated.Add(refPj.realTilesSpawned[i]);
            }

            for (int i = 0; i < refPj.damageTilesReplaced.Count; i++)
            {
                _damageTilesReplaced.Add(refPj.damageTilesReplaced[i]);
            }

            _healedLife = refPj.healedLife;
            _buffHeal   = refPj.buffHeal;
            //damageTileReplaced =;

            //El druida parece que afecta a movementUDs ¿Esto esta bien? ¿o debería ser un bufo?
        }

        //Este no es else if.
        if (obj.GetComponent <Berserker>())
        {
            Berserker refPj = obj.GetComponent <Berserker>();

            isInRage      = refPj.isInRage;
            rageTurnsLeft = refPj.turnsLeftToRageOff;
        }

        #endregion
    }