public List <Tile> GetPosibleMoveableTiles(Tile fromTile, MOVEDIRECTIONTYPE moveDirection, int movementAmount) { List <Tile> posibleMoveableTiles = new List <Tile>(); // Filtramos esas tiles y las ponemos en la lista FilterMoveableWithBoardStrategyPattern filterMoveable = new FilterMoveableWithBoardStrategyPattern(fromTile, moveDirection, game.board2DManager.GridArray, movementAmount); posibleMoveableTiles = filterMoveable.moveableTiles; return(posibleMoveableTiles); }
public void OnTryMove(IOcuppy occupier, Tile endPosition) { if (CanIEnterMoveState(occupier) == false) { return; } if (occupier == null || endPosition == null) { if (debugOn) { Debug.Log("No Tile Object or Ocuppier"); } return; } ///////////////////////////////////////////////////////////////// // CREAMOS POSIBLE MOVEABLE TILES, SOLO LA LISTA SIN PINTARLAS NI NADA // TILE EN DONDE ESTAMOS PARADOS Tile fromTile = game.board2DManager.GetUnitPosition(occupier); if (fromTile == null) { if (debugOn) { Debug.Log("You are walking on the sky my men"); } return; } // TIPO DE MOVIMIENTO DE NUESTRA UNIDAD MOVEDIRECTIONTYPE moveDirection = occupier.MoveDirectionerType; if (moveDirection == MOVEDIRECTIONTYPE.NONE) { return; } // CANTIDA DE CASILLA QUE PUEDO MOVERME int movementAmount = occupier.Stats[STATTYPE.MOVERANGE].ActualStatValue; if (movementAmount == 0) { return; } // 3 - QUE SEA UNA DISTANCIA VALIDA SEGUN MI RANGO DE MOVIMIENTO // CANTIDA DE CASILLA QUE PUEDO MOVERME DEBERIA RESTAR A LA POS INICIAL LA POS FINAL Y VER LA DIFERENCIA EN DISTANCIA // Filtramos esas tiles y las ponemos en la lista FilterMoveableWithBoardStrategyPattern filterMoveable = new FilterMoveableWithBoardStrategyPattern(fromTile, moveDirection, game.board2DManager.GridArray, movementAmount); posibleMoveableTiles = filterMoveable.moveableTiles; // 2- SI NO HAY TILES LIBRES PARA MOVERSE if (posibleMoveableTiles.Count == 0) { return; } ///////////////////////////////////// if (!IsLegalMovement(occupier, endPosition)) { if (debugOn) { Debug.Log("Ilegal MOVE"); } return; } if (occupier.Abilities.ContainsKey(ABILITYTYPE.MOVE) == false) { if (debugOn) { Debug.Log("ERROR HABILIDAD MOVE NO ENCONTRADA EN OCUPPIER"); } return; } MoveAbility moveAb = (MoveAbility)occupier.Abilities[ABILITYTYPE.MOVE]; if (moveAb == null) { if (debugOn) { Debug.Log("ERROR HABILIDAD MOVE NO ENCONTRADA EN EL OCCUPIER"); } return; } MoveAbilityEventInfo movInfo = new MoveAbilityEventInfo(occupier, fromTile, endPosition); moveAb.SetRequireGameData(movInfo); StartPerform(moveAb); if (moveAb.CanIExecute() == false) { if (debugOn) { Debug.Log("SPAWN ABILITY NO SE PUEDE EJECUTAR"); } return; } Move(movInfo); Perform(moveAb); EndPerform(moveAb); }