// Vérifie l'ensemble des actions spéciales qui peuvent etre exécutées depuis la case actuelle vers la direction ciblée public void checkAdjacentCell(CaseBehavior currentCell, int dir) { if (!currentCell.debordement(dir)) { CaseBehavior nextCell = currentCell.getCaseVers(dir); if (!nextCell.isCaseRevealed()) { // Si une salle non ouverte est adjacente et accessible, en permettre l'ouverture if (currentCell.cheminDegage(currentCell.versDirection(dir))) { RegisterAction(ActionType.REVEAL, nextCell, 0); } } else { // Accès à la case pour vérifier que l'on peut s'y déplacer if (currentCell.cheminDegage(currentCell.versDirection(dir)) && nextCell.cheminDegage(nextCell.versDirection(CaseBehavior.opposee(dir)))) { // Regarder si un combat est possible if (nextCell.enemyFighterPresent(currentCharacter.gameObject)) { RegisterAction(ActionType.ATTACK, nextCell, 0); } if (currentCharacter is CB_Clerc) { // Regarder si un allie peut etre soigne if (nextCell.woundedCharacterReadyForHealing()) { RegisterAction(ActionType.HEAL, nextCell, 0); } } } // Si une herse non brisee relie cette case if (nextCell.herse != null && currentCell.herse == nextCell.herse && !nextCell.herse.GetComponent <HerseBehavior>().herseBrisee) { if (currentCharacter is CB_Guerrier) { RegisterAction(ActionType.DESTROYDOOR, nextCell, 0); } else if (currentCharacter is CB_Voleuse) { if (currentCell.herse.GetComponent <HerseBehavior>().herseOuverte) { RegisterAction(ActionType.CLOSEDOOR, nextCell, 0); } else { RegisterAction(ActionType.OPENDOOR, nextCell, 0); } } } } } if (currentCharacter is CB_PasseMuraille) { if (!currentCell.debordement(dir)) { // Peut franchir les murs adjacents CaseBehavior nextCell = currentCell.getCaseVers(dir); if (nextCell.isCaseRevealed()) { if (currentCell.versDirection(dir) == CaseBehavior.cheminCaseAdjacente.mur || nextCell.versDirection(CaseBehavior.opposee(dir)) == CaseBehavior.cheminCaseAdjacente.mur ) { if (currentCharacter.canStayOnCell(nextCell)) { RegisterAction(ActionType.WALLWALK, currentCell, 0); RegisterAction(ActionType.WALLWALK, nextCell, 1, currentCell); } } } } } }