package dev.llan.model.board.generation; import dev.llan.model.board.DisplayType; import dev.llan.model.board.Tile.TileType; import dev.llan.model.board.Tile; public class DisplayHelper { private enum TileDisplay { WALL(true, false, false), VOID(false, true, false), FLOOR(false, false, true); private final boolean isWall; private final boolean isVoid; private final boolean isFloor; TileDisplay(boolean isWall, boolean isVoid, boolean isFloor) { this.isWall = isWall; this.isVoid = isVoid; this.isFloor = isFloor; } } public static DisplayType getDisplayType(int row, int col, Tile[][] map) { Tile tile = map[row][col]; if (tile.getType() == TileType.VACANT) { return DisplayType.FLOOR; } TileDisplay up = getTileDisplay(map[row - 1][col]); TileDisplay down = getTileDisplay(map[row + 1][col]); TileDisplay left = getTileDisplay(map[row][col - 1]); TileDisplay right = getTileDisplay(map[row][col + 1]); if(left.isWall && right.isWall) { if(down.isFloor && up.isVoid) { return DisplayType.WALL_TOP; } else if (down.isVoid && up.isFloor) { return DisplayType.WALL_BOTTOM; } } if(up.isWall && down.isWall) { if(left.isFloor && right.isVoid) { return DisplayType.WALL_RIGHT; } else if (left.isVoid && right.isFloor) { return DisplayType.WALL_LEFT; } } TileDisplay upLeft = getTileDisplay(map[row - 1][col - 1]); TileDisplay downRight = getTileDisplay(map[row + 1][col + 1]); if (down.isWall && right.isWall) { if(downRight.isFloor && upLeft.isVoid) { return DisplayType.WALL_LEFT; } else if (downRight.isVoid && upLeft.isFloor) { return DisplayType.CONNECT_BOTTOM_LEFT; } } if(up.isWall && left.isWall) { if(upLeft.isFloor && downRight.isVoid) { return DisplayType.WALL_BOTTOM_RIGHT; } else if (upLeft.isVoid && downRight.isFloor) { return DisplayType.WALL_TOP; } } TileDisplay downLeft = getTileDisplay(map[row + 1][col - 1]); TileDisplay upRight = getTileDisplay(map[row - 1][col + 1]); if(left.isWall && down.isWall) { if (downLeft.isFloor && upRight.isVoid) { return DisplayType.WALL_RIGHT; } else if (downLeft.isVoid && upRight.isFloor) { return DisplayType.CONNECT_BOTTOM_RIGHT; } } if(right.isWall && up.isWall) { if(upRight.isFloor && downLeft.isVoid) { return DisplayType.WALL_BOTTOM_LEFT; } else if (upRight.isVoid && downLeft.isFloor) { return DisplayType.WALL_TOP; } } return DisplayType.NONE; } private static TileDisplay getTileDisplay(Tile tile) { if(tile == null) { return TileDisplay.VOID; } if(tile.getType() == TileType.VACANT) { return TileDisplay.FLOOR; } return TileDisplay.WALL; } }