//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); }
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); }
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; }
//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); }
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 }