diff --git a/src/main/java/edu/rpi/legup/controller/ElementController.java b/src/main/java/edu/rpi/legup/controller/ElementController.java index be40088d0..e069c6878 100644 --- a/src/main/java/edu/rpi/legup/controller/ElementController.java +++ b/src/main/java/edu/rpi/legup/controller/ElementController.java @@ -13,7 +13,6 @@ import edu.rpi.legup.model.elements.Element; import edu.rpi.legup.model.elements.PlaceableElement; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.GridBoard; import edu.rpi.legup.model.gameboard.GridCell; import edu.rpi.legup.model.gameboard.PuzzleElement; @@ -163,11 +162,10 @@ public void mouseReleased(MouseEvent e) { } // funny if (elementView != null) { - if (board instanceof CaseBoard) { - CaseBoard caseBoard = (CaseBoard) board; + if (board.getCaseRule() != null) { AutoCaseRuleCommand autoCaseRuleCommand = new AutoCaseRuleCommand( - elementView, selection, caseBoard.getCaseRule(), caseBoard, e); + elementView, selection, board.getCaseRule(), board, e); if (autoCaseRuleCommand.canExecute()) { autoCaseRuleCommand.execute(); getInstance().getHistory().pushChange(autoCaseRuleCommand); @@ -498,10 +496,9 @@ public void keyReleased(KeyEvent e) { boardView = getInstance().getLegupUI().getEditorBoardView(); } Board board = boardView.getBoard(); - if (board instanceof CaseBoard) { - CaseBoard caseBoard = (CaseBoard) board; + if (board.getCaseRule() != null) { if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { - puzzle.notifyBoardListeners(listener -> listener.onCaseBoardAdded(caseBoard)); + puzzle.notifyBoardListeners(listener -> listener.onCaseBoardAdded(board)); } } } diff --git a/src/main/java/edu/rpi/legup/controller/RuleController.java b/src/main/java/edu/rpi/legup/controller/RuleController.java index 8ec1b58ea..acc0f99a3 100644 --- a/src/main/java/edu/rpi/legup/controller/RuleController.java +++ b/src/main/java/edu/rpi/legup/controller/RuleController.java @@ -6,7 +6,7 @@ import edu.rpi.legup.app.LegupPreferences; import edu.rpi.legup.history.*; import edu.rpi.legup.model.Puzzle; -import edu.rpi.legup.model.gameboard.CaseBoard; +import edu.rpi.legup.model.gameboard.Board; import edu.rpi.legup.model.rules.*; import edu.rpi.legup.model.tree.TreeElement; import edu.rpi.legup.model.tree.TreeElementType; @@ -70,19 +70,19 @@ public void buttonPressed(Rule rule) { updateErrorString = "Cases cannot be generated from a node with children."; } else { - try { // added try catch for scenarios where rules are cancelled by user - // ie. + try { // added try catch for scenarios where rules are canceled by user + // i.e. // Skyscraper cellForNumber - CaseBoard caseBoard = + Board caseBoard = caseRule.getApplicableLocationsBoard(element.getBoard()); - if (caseBoard != null && caseBoard.getCount() > 0) { + if (caseBoard != null && caseBoard.getCasePickableCount() > 0) { puzzle.notifyBoardListeners( listener -> listener.onCaseBoardAdded(caseBoard)); } else { updateErrorString = "This board cannot be applied with this case rule."; } - } // catch rule was cancelled exception + } // catch rule was canceled exception catch (Exception e) { updateErrorString = e.getMessage(); } diff --git a/src/main/java/edu/rpi/legup/history/AutoCaseRuleCommand.java b/src/main/java/edu/rpi/legup/history/AutoCaseRuleCommand.java index a8baa946a..db442cdf8 100644 --- a/src/main/java/edu/rpi/legup/history/AutoCaseRuleCommand.java +++ b/src/main/java/edu/rpi/legup/history/AutoCaseRuleCommand.java @@ -5,7 +5,6 @@ import edu.rpi.legup.app.GameBoardFacade; import edu.rpi.legup.model.Puzzle; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.*; import edu.rpi.legup.ui.boardview.ElementView; @@ -23,7 +22,7 @@ public class AutoCaseRuleCommand extends PuzzleCommand { private ElementView elementView; private TreeViewSelection selection; private CaseRule caseRule; - private CaseBoard caseBoard; + private Board board; private MouseEvent mouseEvent; private List caseTrans; @@ -37,23 +36,23 @@ public class AutoCaseRuleCommand extends PuzzleCommand { * @param elementView currently selected puzzle puzzleElement view that is being edited * @param selection currently selected tree puzzleElement views that is being edited * @param caseRule currently selected caseRule puzzleElement view that is being edited - * @param caseBoard currently selected caseBoard puzzleElement view that is being edited + * @param board currently selected board puzzleElement view that is being edited * @param mouseEvent currently selected mouseEvent puzzleElement view that is being edited */ public AutoCaseRuleCommand( ElementView elementView, TreeViewSelection selection, CaseRule caseRule, - CaseBoard caseBoard, + Board board, MouseEvent mouseEvent) { this.elementView = elementView; this.selection = selection.copy(); this.caseRule = caseRule; - this.caseBoard = caseBoard; + this.board = board; this.mouseEvent = mouseEvent; this.caseTrans = new ArrayList<>(); this.cases = - caseRule.getCasesFrom(caseBoard.getBaseBoard(), elementView.getPuzzleElement()); + caseRule.getCasesFrom(board, elementView.getPuzzleElement()); this.numberOfCaseRules = cases.size(); } @@ -72,7 +71,7 @@ public void executeCommand() { if (caseTrans.isEmpty()) { List cases = - caseRule.getCasesFrom(caseBoard.getBaseBoard(), elementView.getPuzzleElement()); + caseRule.getCasesFrom(board, elementView.getPuzzleElement()); for (Board board : cases) { final TreeTransition transition = (TreeTransition) tree.addTreeElement(node); // board.setModifiable(false); @@ -122,17 +121,17 @@ public String getErrorString() { return CommandError.NO_CHILDREN.toString(); } - if (!caseBoard.isPickable(elementView.getPuzzleElement(), mouseEvent)) { + if (!board.isPickable(elementView.getPuzzleElement(), mouseEvent)) { return "The selected data element is not pickable with this case rule."; } - if (caseRule.getCasesFrom(caseBoard.getBaseBoard(), elementView.getPuzzleElement()).size() + if (caseRule.getCasesFrom(board, elementView.getPuzzleElement()).size() == 0) { return "The selection must produce at least one case"; } int numberOfCaseRules = - caseRule.getCasesFrom(caseBoard.getBaseBoard(), elementView.getPuzzleElement()) + caseRule.getCasesFrom(board, elementView.getPuzzleElement()) .size(); System.out.println("Number of cases:" + numberOfCaseRules); if (numberOfCaseRules > caseRule.MAX_CASES) { diff --git a/src/main/java/edu/rpi/legup/model/gameboard/Board.java b/src/main/java/edu/rpi/legup/model/gameboard/Board.java index 210e920ce..718630735 100644 --- a/src/main/java/edu/rpi/legup/model/gameboard/Board.java +++ b/src/main/java/edu/rpi/legup/model/gameboard/Board.java @@ -1,6 +1,9 @@ package edu.rpi.legup.model.gameboard; import edu.rpi.legup.model.Goal; +import edu.rpi.legup.model.rules.CaseRule; + +import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -17,12 +20,18 @@ public abstract class Board { protected Goal goal; protected boolean isModifiable; + protected CaseRule caseRule; + protected Set casePickableElements; + /** Board Constructor creates an empty board. */ public Board() { this.puzzleElements = new ArrayList<>(); this.modifiedData = new HashSet<>(); this.isModifiable = true; this.goal = null; + + this.caseRule = null; + this.casePickableElements = new HashSet<>(); } /** @@ -90,6 +99,76 @@ public void setPuzzleElements(List puzzleElements) { this.puzzleElements = puzzleElements; } + /** + * Retrieves the case rule for this board. + * + * @return the case rule + */ + public CaseRule getCaseRule() { + return caseRule; + } + + /** + * Sets the case rule for this board. + * + * @param caseRule the new case rule + */ + public void setCaseRule(CaseRule caseRule) { + this.caseRule = caseRule; + } + + /** + * Retrieves the pickable puzzle elements for this board + * + * @return the pickable puzzle elements + */ + public Set getCasePickableElements() { return casePickableElements; } + + /** + * Sets the pickable puzzle elements for this board. + * + * @param casePickableElements the new pickable puzzle elements + */ + public void setCasePickableElements(Set casePickableElements) { this.casePickableElements = casePickableElements; } + + /** + * Adds a puzzle element to the set of pickable elements. + * + * @param puzzleElement the puzzle element to add + */ + public void addCasePickableElement(PuzzleElement puzzleElement) { + casePickableElements.add(puzzleElement); + } + + /** + * Removes a puzzle element from the set of pickable elements. + * + * @param puzzleElement the puzzle element to remove + */ + public void removeCasePickableElement(PuzzleElement puzzleElement) { + casePickableElements.remove(puzzleElement); + } + + /** + * Gets the count of pickable puzzle elements. + * + * @return the number of pickable elements + */ + public int getCasePickableCount() { + return casePickableElements.size(); + } + + /** + * Checks if a puzzle element is pickable based on the mouse event. + * + * @param puzzleElement the puzzle element to check + * @param e the mouse event + * @return true if the puzzle element is pickable, false otherwise + */ + public boolean isPickable(PuzzleElement puzzleElement, MouseEvent e) { + return casePickableElements.contains(getPuzzleElement(puzzleElement)); + } + /** * Gets the modifiable attribute for the board. * @@ -218,6 +297,7 @@ public boolean equalsBoard(Board board) { /** * Performs a deep copy of this board. + * Note: This method does not copy caseRule and pickablePuzzleElements. * * @return a new copy of the board that is independent of this one */ diff --git a/src/main/java/edu/rpi/legup/model/gameboard/CaseBoard.java b/src/main/java/edu/rpi/legup/model/gameboard/CaseBoard.java deleted file mode 100644 index 284296fea..000000000 --- a/src/main/java/edu/rpi/legup/model/gameboard/CaseBoard.java +++ /dev/null @@ -1,112 +0,0 @@ -package edu.rpi.legup.model.gameboard; - -import edu.rpi.legup.model.rules.CaseRule; -import java.awt.event.MouseEvent; -import java.util.HashSet; -import java.util.Set; - -/** - * Represents a game board with a small set of pickable elements, primarily used for choosing the - * origin point of a case rule. Extends the abstract `Board` class and adds functionality for - * handling pickable elements and case rules. - */ -public class CaseBoard extends Board { - protected Board baseBoard; - protected CaseRule caseRule; - protected Set pickablePuzzleElements; - - /** - * Constructs a CaseBoard with a base board and a case rule. - * - * @param baseBoard the base board to use for this CaseBoard - * @param caseRule the case rule applied to this CaseBoard - */ - public CaseBoard(Board baseBoard, CaseRule caseRule) { - this.baseBoard = baseBoard; - this.caseRule = caseRule; - this.pickablePuzzleElements = new HashSet<>(); - } - - /** - * Adds a puzzle element to the set of pickable elements. - * - * @param puzzleElement the puzzle element to add - */ - public void addPickableElement(PuzzleElement puzzleElement) { - pickablePuzzleElements.add(puzzleElement); - } - - /** - * Removes a puzzle element from the set of pickable elements. - * - * @param puzzleElement the puzzle element to remove - */ - public void removePickableElement(PuzzleElement puzzleElement) { - pickablePuzzleElements.remove(puzzleElement); - } - - /** - * Checks if a puzzle element is pickable based on the mouse event. - * - * @param puzzleElement the puzzle element to check - * @param e the mouse event - * @return true if the puzzle element is pickable, false otherwise - */ - public boolean isPickable(PuzzleElement puzzleElement, MouseEvent e) { - return pickablePuzzleElements.contains(baseBoard.getPuzzleElement(puzzleElement)); - } - - /** - * Retrieves the base board for this CaseBoard. - * - * @return the base board - */ - public Board getBaseBoard() { - return baseBoard; - } - - /** - * Sets the base board for this CaseBoard. - * - * @param baseBoard the new base board - */ - public void setBaseBoard(Board baseBoard) { - this.baseBoard = baseBoard; - } - - /** - * Retrieves the case rule for this CaseBoard. - * - * @return the case rule - */ - public CaseRule getCaseRule() { - return caseRule; - } - - /** - * Sets the case rule for this CaseBoard. - * - * @param caseRule the new case rule - */ - public void setCaseRule(CaseRule caseRule) { - this.caseRule = caseRule; - } - - /** - * Gets the count of pickable puzzle elements. - * - * @return the number of pickable elements - */ - public int getCount() { - return pickablePuzzleElements.size(); - } - - /** - * Performs a deep copy of this CaseBoard. CURRENTLY NOT IMPLEMENTED AND RETURNS NULL - * - * @return a new copy of the CaseBoard - */ - public CaseBoard copy() { - return null; - } -} diff --git a/src/main/java/edu/rpi/legup/model/observer/IBoardListener.java b/src/main/java/edu/rpi/legup/model/observer/IBoardListener.java index 7ba886fd4..8949b07ce 100644 --- a/src/main/java/edu/rpi/legup/model/observer/IBoardListener.java +++ b/src/main/java/edu/rpi/legup/model/observer/IBoardListener.java @@ -1,6 +1,6 @@ package edu.rpi.legup.model.observer; -import edu.rpi.legup.model.gameboard.CaseBoard; +import edu.rpi.legup.model.gameboard.Board; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.tree.TreeElement; @@ -21,7 +21,7 @@ public interface IBoardListener { * * @param caseBoard case board to be added */ - void onCaseBoardAdded(CaseBoard caseBoard); + void onCaseBoardAdded(Board caseBoard); /** * Called when a {@link PuzzleElement}'s data on the board has changed. diff --git a/src/main/java/edu/rpi/legup/model/rules/CaseRule.java b/src/main/java/edu/rpi/legup/model/rules/CaseRule.java index 25348aec2..10831665a 100644 --- a/src/main/java/edu/rpi/legup/model/rules/CaseRule.java +++ b/src/main/java/edu/rpi/legup/model/rules/CaseRule.java @@ -3,7 +3,6 @@ import static edu.rpi.legup.model.rules.RuleType.CASE; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.tree.TreeNode; import edu.rpi.legup.model.tree.TreeTransition; @@ -43,7 +42,7 @@ public CaseRule(String ruleID, String ruleName, String description, String image * @param board board to find locations where this case rule can be applied * @return a case board */ - public abstract CaseBoard getApplicableLocationsBoard(Board board); + public abstract Board getApplicableLocationsBoard(Board board); /** * Gets the possible cases for this {@link Board} at a specific {@link PuzzleElement} based on @@ -117,11 +116,11 @@ public String checkRuleRaw(TreeTransition transition) { List childBoards = new ArrayList<>(); childTransitions.forEach(t -> childBoards.add(t.getBoard())); - CaseBoard possibleCasesBoard = getApplicableLocationsBoard(parent.getBoard()); + Board possibleCasesBoard = getApplicableLocationsBoard(parent.getBoard()); // Locate a cell where a case rule can be applied Set> applicableLocations = new HashSet<>(); - for (PuzzleElement element : possibleCasesBoard.getBaseBoard().getPuzzleElements()) { + for (PuzzleElement element : possibleCasesBoard.getPuzzleElements()) { if (possibleCasesBoard.isPickable(element, null)) { applicableLocations.add(element); } diff --git a/src/main/java/edu/rpi/legup/puzzle/battleship/rules/SegmentTypeCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/battleship/rules/SegmentTypeCaseRule.java index 207c9e0b1..cb0668663 100644 --- a/src/main/java/edu/rpi/legup/puzzle/battleship/rules/SegmentTypeCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/battleship/rules/SegmentTypeCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.battleship.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -39,7 +38,7 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem * @return a case board */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; } diff --git a/src/main/java/edu/rpi/legup/puzzle/battleship/rules/ShipLocationCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/battleship/rules/ShipLocationCaseRule.java index c871f31a9..1e2d4d539 100644 --- a/src/main/java/edu/rpi/legup/puzzle/battleship/rules/ShipLocationCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/battleship/rules/ShipLocationCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.battleship.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -40,7 +39,7 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem * @return a case board */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; } diff --git a/src/main/java/edu/rpi/legup/puzzle/battleship/rules/ShipOrWaterCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/battleship/rules/ShipOrWaterCaseRule.java index fb9a13241..fae159e04 100644 --- a/src/main/java/edu/rpi/legup/puzzle/battleship/rules/ShipOrWaterCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/battleship/rules/ShipOrWaterCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.battleship.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -40,7 +39,7 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem * @return a case board */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; } diff --git a/src/main/java/edu/rpi/legup/puzzle/binary/rules/ZeroOrOneCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/binary/rules/ZeroOrOneCaseRule.java index f1b9d47c3..c839442ec 100644 --- a/src/main/java/edu/rpi/legup/puzzle/binary/rules/ZeroOrOneCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/binary/rules/ZeroOrOneCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.binary.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -21,23 +20,24 @@ public ZeroOrOneCaseRule() { } /** - * Generates a {@link CaseBoard} that includes all blank cells from the given board that this + * Generates a {@link Board} that includes all blank cells from the given board that this * case rule can be applied to * * @param board The board to find locations where this case rule can be applied - * @return A CaseBoard containing pickable elements where the case rule can be applied + * @return A Board containing pickable elements where the case rule can be applied */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { BinaryBoard binaryBoard = (BinaryBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(binaryBoard, this); + binaryBoard.setCaseRule(this); + binaryBoard.setModifiable(false); for (PuzzleElement element : binaryBoard.getPuzzleElements()) { if (((BinaryCell) element).getType() == BinaryType.UNKNOWN) { - caseBoard.addPickableElement(element); + binaryBoard.addCasePickableElement(element); } } - return caseBoard; + return binaryBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/fillapix/rules/BlackOrWhiteCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/fillapix/rules/BlackOrWhiteCaseRule.java index 9c4214632..45bf84ce0 100644 --- a/src/main/java/edu/rpi/legup/puzzle/fillapix/rules/BlackOrWhiteCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/fillapix/rules/BlackOrWhiteCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.fillapix.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -20,17 +19,18 @@ public BlackOrWhiteCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { FillapixBoard fillapixBoard = (FillapixBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(fillapixBoard, this); + fillapixBoard.setCaseRule(this); + fillapixBoard.setModifiable(false); for (PuzzleElement data : fillapixBoard.getPuzzleElements()) { FillapixCell cell = (FillapixCell) data; if (cell.getType() == FillapixCellType.UNKNOWN) { - caseBoard.addPickableElement(data); + fillapixBoard.addCasePickableElement(data); } } - return caseBoard; + return fillapixBoard; } @Override diff --git a/src/main/java/edu/rpi/legup/puzzle/fillapix/rules/SatisfyClueCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/fillapix/rules/SatisfyClueCaseRule.java index 1783c5def..99135195a 100644 --- a/src/main/java/edu/rpi/legup/puzzle/fillapix/rules/SatisfyClueCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/fillapix/rules/SatisfyClueCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.fillapix.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -21,19 +20,20 @@ public SatisfyClueCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { FillapixBoard fillapixBoard = (FillapixBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(fillapixBoard, this); + fillapixBoard.setCaseRule(this); + fillapixBoard.setModifiable(false); for (PuzzleElement data : fillapixBoard.getPuzzleElements()) { FillapixCell cell = (FillapixCell) data; if (cell.getNumber() >= 0 && cell.getNumber() <= 9 && FillapixUtilities.hasEmptyAdjacent(fillapixBoard, cell)) { - caseBoard.addPickableElement(data); + fillapixBoard.addCasePickableElement(data); } } - return caseBoard; + return fillapixBoard; } @Override diff --git a/src/main/java/edu/rpi/legup/puzzle/heyawake/rules/BlackOrWhiteCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/heyawake/rules/BlackOrWhiteCaseRule.java index ccf28b513..32fe059f5 100644 --- a/src/main/java/edu/rpi/legup/puzzle/heyawake/rules/BlackOrWhiteCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/heyawake/rules/BlackOrWhiteCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.heyawake.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -40,7 +39,7 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem * @return a case board */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; } diff --git a/src/main/java/edu/rpi/legup/puzzle/lightup/LightUpView.java b/src/main/java/edu/rpi/legup/puzzle/lightup/LightUpView.java index 23fce69bb..24823477d 100644 --- a/src/main/java/edu/rpi/legup/puzzle/lightup/LightUpView.java +++ b/src/main/java/edu/rpi/legup/puzzle/lightup/LightUpView.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.lightup; import edu.rpi.legup.controller.BoardController; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.tree.TreeElement; import edu.rpi.legup.ui.boardview.DataSelectionView; @@ -53,10 +52,7 @@ public LightUpView(@NotNull LightUpBoard board) { @Override public void onTreeElementChanged(@NotNull TreeElement treeElement) { super.onTreeElementChanged(treeElement); - LightUpBoard lightUpBoard = - board instanceof CaseBoard - ? (LightUpBoard) ((CaseBoard) board).getBaseBoard() - : (LightUpBoard) board; + LightUpBoard lightUpBoard = (LightUpBoard) board; lightUpBoard.fillWithLight(); repaint(); } diff --git a/src/main/java/edu/rpi/legup/puzzle/lightup/rules/LightOrEmptyCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/lightup/rules/LightOrEmptyCaseRule.java index f042615ef..7b50265d5 100644 --- a/src/main/java/edu/rpi/legup/puzzle/lightup/rules/LightOrEmptyCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/lightup/rules/LightOrEmptyCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.lightup.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -21,16 +20,17 @@ public LightOrEmptyCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { LightUpBoard lightUpBoard = (LightUpBoard) board.copy(); lightUpBoard.setModifiable(false); - CaseBoard caseBoard = new CaseBoard(lightUpBoard, this); + lightUpBoard.setCaseRule(this); + for (PuzzleElement data : lightUpBoard.getPuzzleElements()) { if (((LightUpCell) data).getType() == LightUpCellType.UNKNOWN) { - caseBoard.addPickableElement(data); + lightUpBoard.addCasePickableElement(data); } } - return caseBoard; + return lightUpBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/lightup/rules/SatisfyNumberCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/lightup/rules/SatisfyNumberCaseRule.java index 59094ee63..3d00c87dd 100644 --- a/src/main/java/edu/rpi/legup/puzzle/lightup/rules/SatisfyNumberCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/lightup/rules/SatisfyNumberCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.lightup.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -29,16 +28,17 @@ public SatisfyNumberCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { LightUpBoard lightUpBoard = (LightUpBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(lightUpBoard, this); + lightUpBoard.setCaseRule( this ); + lightUpBoard.setModifiable(false); for (PuzzleElement data : lightUpBoard.getPuzzleElements()) { if (((LightUpCell) data).getType() == LightUpCellType.NUMBER) { - caseBoard.addPickableElement(data); + lightUpBoard.addCasePickableElement(data); } } - return caseBoard; + return lightUpBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/masyu/rules/BlackSplitCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/masyu/rules/BlackSplitCaseRule.java index f3e9123cc..70ed1e74a 100644 --- a/src/main/java/edu/rpi/legup/puzzle/masyu/rules/BlackSplitCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/masyu/rules/BlackSplitCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.masyu.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -36,7 +35,7 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem * @return a case board */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; } diff --git a/src/main/java/edu/rpi/legup/puzzle/masyu/rules/NormalSplitCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/masyu/rules/NormalSplitCaseRule.java index 5bea26b28..5db2bce73 100644 --- a/src/main/java/edu/rpi/legup/puzzle/masyu/rules/NormalSplitCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/masyu/rules/NormalSplitCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.masyu.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -40,7 +39,7 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem * @return a case board */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; } diff --git a/src/main/java/edu/rpi/legup/puzzle/masyu/rules/WhiteSplitCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/masyu/rules/WhiteSplitCaseRule.java index 1010dc2c2..2bcc35f71 100644 --- a/src/main/java/edu/rpi/legup/puzzle/masyu/rules/WhiteSplitCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/masyu/rules/WhiteSplitCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.masyu.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -36,7 +35,7 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem * @return a case board */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; } diff --git a/src/main/java/edu/rpi/legup/puzzle/minesweeper/rules/MineOrEmptyCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/minesweeper/rules/MineOrEmptyCaseRule.java index ca37159ea..83ea64655 100644 --- a/src/main/java/edu/rpi/legup/puzzle/minesweeper/rules/MineOrEmptyCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/minesweeper/rules/MineOrEmptyCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.minesweeper.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -21,17 +20,18 @@ public MineOrEmptyCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { MinesweeperBoard minesweeperBoard = (MinesweeperBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(minesweeperBoard, this); minesweeperBoard.setModifiable(false); + minesweeperBoard.setCaseRule(this); + for (PuzzleElement data : minesweeperBoard.getPuzzleElements()) { MinesweeperCell cell = (MinesweeperCell) data; if (cell.getData().isUnset()) { - caseBoard.addPickableElement(data); + minesweeperBoard.addCasePickableElement(data); } } - return caseBoard; + return minesweeperBoard; } @Override diff --git a/src/main/java/edu/rpi/legup/puzzle/minesweeper/rules/SatisfyNumberCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/minesweeper/rules/SatisfyNumberCaseRule.java index 0ec6886ad..12175c6c2 100644 --- a/src/main/java/edu/rpi/legup/puzzle/minesweeper/rules/SatisfyNumberCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/minesweeper/rules/SatisfyNumberCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.minesweeper.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -19,19 +18,20 @@ public SatisfyNumberCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { MinesweeperBoard minesweeperBoard = (MinesweeperBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(minesweeperBoard, this); minesweeperBoard.setModifiable(false); + minesweeperBoard.setCaseRule(this); + for (PuzzleElement data : minesweeperBoard.getPuzzleElements()) { MinesweeperCell cell = (MinesweeperCell) data; if (cell.getTileNumber() > 0 && cell.getTileNumber() <= 8 && MinesweeperUtilities.hasEmptyAdjacent(minesweeperBoard, cell)) { - caseBoard.addPickableElement(data); + minesweeperBoard.addCasePickableElement(data); } } - return caseBoard; + return minesweeperBoard; } @Override diff --git a/src/main/java/edu/rpi/legup/puzzle/nurikabe/rules/BlackOrWhiteCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/nurikabe/rules/BlackOrWhiteCaseRule.java index 7b752cdd3..40191af03 100644 --- a/src/main/java/edu/rpi/legup/puzzle/nurikabe/rules/BlackOrWhiteCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/nurikabe/rules/BlackOrWhiteCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.nurikabe.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -29,16 +28,17 @@ public BlackOrWhiteCaseRule() { * @return a case board */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { NurikabeBoard nurikabeBoard = (NurikabeBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(nurikabeBoard, this); + nurikabeBoard.setCaseRule(this); + nurikabeBoard.setModifiable(false); for (PuzzleElement element : nurikabeBoard.getPuzzleElements()) { if (((NurikabeCell) element).getType() == NurikabeType.UNKNOWN) { - caseBoard.addPickableElement(element); + nurikabeBoard.addCasePickableElement(element); } } - return caseBoard; + return nurikabeBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/nurikabe/rules/FinishRoomCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/nurikabe/rules/FinishRoomCaseRule.java index 574287eb3..f07339b92 100644 --- a/src/main/java/edu/rpi/legup/puzzle/nurikabe/rules/FinishRoomCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/nurikabe/rules/FinishRoomCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.nurikabe.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -39,9 +38,10 @@ public FinishRoomCaseRule() { * @return a case board */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { NurikabeBoard nurikabeBoard = (NurikabeBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(nurikabeBoard, this); + nurikabeBoard.setCaseRule(this); + DisjointSets regions = NurikabeUtilities.getNurikabeRegions(nurikabeBoard); nurikabeBoard.setModifiable(false); @@ -67,11 +67,11 @@ public CaseBoard getApplicableLocationsBoard(Board board) { // if size of region is 1 less than the number block and the number block is only // number block in the region if (disRow.size() < ((NurikabeCell) element).getData() && only) { - caseBoard.addPickableElement(element); // add that room as a pickable element + nurikabeBoard.addCasePickableElement(element); // add that room as a pickable element } } } - return caseBoard; + return nurikabeBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/shorttruthtable/rules/caserule/CaseRuleAtomic.java b/src/main/java/edu/rpi/legup/puzzle/shorttruthtable/rules/caserule/CaseRuleAtomic.java index d6b6607b2..f7ae42ea4 100644 --- a/src/main/java/edu/rpi/legup/puzzle/shorttruthtable/rules/caserule/CaseRuleAtomic.java +++ b/src/main/java/edu/rpi/legup/puzzle/shorttruthtable/rules/caserule/CaseRuleAtomic.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.shorttruthtable.rules.caserule; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.tree.TreeTransition; import edu.rpi.legup.puzzle.shorttruthtable.ShortTruthTableBoard; @@ -21,16 +20,17 @@ public CaseRuleAtomic() { // Adds all elements that can be selected for this case rule @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { ShortTruthTableBoard sttBoard = (ShortTruthTableBoard) board.copy(); sttBoard.setModifiable(false); - CaseBoard caseBoard = new CaseBoard(sttBoard, this); + sttBoard.setCaseRule(this); + for (PuzzleElement element : sttBoard.getPuzzleElements()) { if (((ShortTruthTableCell) element).getType() == ShortTruthTableCellType.UNKNOWN) { - caseBoard.addPickableElement(element); + sttBoard.addCasePickableElement(element); } } - return caseBoard; + return sttBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/shorttruthtable/rules/caserule/CaseRule_GenericStatement.java b/src/main/java/edu/rpi/legup/puzzle/shorttruthtable/rules/caserule/CaseRule_GenericStatement.java index 497ef1133..64db90b48 100644 --- a/src/main/java/edu/rpi/legup/puzzle/shorttruthtable/rules/caserule/CaseRule_GenericStatement.java +++ b/src/main/java/edu/rpi/legup/puzzle/shorttruthtable/rules/caserule/CaseRule_GenericStatement.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.shorttruthtable.rules.caserule; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.puzzle.shorttruthtable.ShortTruthTableBoard; import edu.rpi.legup.puzzle.shorttruthtable.ShortTruthTableCell; @@ -42,11 +41,11 @@ public CaseRule_GenericStatement( // Adds all elements that can be selected for this caserule @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { // copy the board and add all elements that can be selected ShortTruthTableBoard sttBoard = (ShortTruthTableBoard) board.copy(); sttBoard.setModifiable(false); - CaseBoard caseBoard = new CaseBoard(sttBoard, this); + sttBoard.setCaseRule(this); // add all elements that can be selected for the case rule statement for (PuzzleElement element : sttBoard.getPuzzleElements()) { @@ -70,9 +69,9 @@ public CaseBoard getApplicableLocationsBoard(Board board) { continue; } // if the element has passed all the checks, it can be selected - caseBoard.addPickableElement(element); + sttBoard.addCasePickableElement(element); } - return caseBoard; + return sttBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/skyscrapers/SkyscrapersView.java b/src/main/java/edu/rpi/legup/puzzle/skyscrapers/SkyscrapersView.java index edd2cdbf5..0bab12e24 100644 --- a/src/main/java/edu/rpi/legup/puzzle/skyscrapers/SkyscrapersView.java +++ b/src/main/java/edu/rpi/legup/puzzle/skyscrapers/SkyscrapersView.java @@ -2,7 +2,6 @@ import edu.rpi.legup.controller.BoardController; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.ui.boardview.ElementView; import edu.rpi.legup.ui.boardview.GridBoardView; @@ -137,7 +136,7 @@ public void setBoard(Board board) { if (this.board != board) { this.board = board; - if (board instanceof CaseBoard) { + if (board.getCaseRule() != null) { setCasePickable(); } else { for (ElementView elementView : elementViews) { @@ -157,29 +156,27 @@ public void setBoard(Board board) { } } + @Override protected void setCasePickable() { - CaseBoard caseBoard = (CaseBoard) board; - Board baseBoard = caseBoard.getBaseBoard(); - for (ElementView elementView : elementViews) { PuzzleElement puzzleElement = - baseBoard.getPuzzleElement(elementView.getPuzzleElement()); + board.getPuzzleElement(elementView.getPuzzleElement()); elementView.setPuzzleElement(puzzleElement); elementView.setShowCasePicker(true); - elementView.setCaseRulePickable(caseBoard.isPickable(puzzleElement, null)); + elementView.setCaseRulePickable(board.isPickable(puzzleElement, null)); } for (SkyscrapersClueView clueView : northClues) { - PuzzleElement puzzleElement = baseBoard.getPuzzleElement(clueView.getPuzzleElement()); + PuzzleElement puzzleElement = board.getPuzzleElement(clueView.getPuzzleElement()); clueView.setPuzzleElement(puzzleElement); clueView.setShowCasePicker(true); - clueView.setCaseRulePickable(caseBoard.isPickable(puzzleElement, null)); + clueView.setCaseRulePickable(board.isPickable(puzzleElement, null)); } for (SkyscrapersClueView clueView : westClues) { - PuzzleElement puzzleElement = baseBoard.getPuzzleElement(clueView.getPuzzleElement()); + PuzzleElement puzzleElement = board.getPuzzleElement(clueView.getPuzzleElement()); clueView.setPuzzleElement(puzzleElement); clueView.setShowCasePicker(true); - clueView.setCaseRulePickable(caseBoard.isPickable(puzzleElement, null)); + clueView.setCaseRulePickable(board.isPickable(puzzleElement, null)); } } diff --git a/src/main/java/edu/rpi/legup/puzzle/skyscrapers/rules/CellForNumberCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/skyscrapers/rules/CellForNumberCaseRule.java index 5ca2db547..12b8321da 100644 --- a/src/main/java/edu/rpi/legup/puzzle/skyscrapers/rules/CellForNumberCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/skyscrapers/rules/CellForNumberCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.skyscrapers.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -22,17 +21,18 @@ public CellForNumberCaseRule() { private Integer selectedNumber; @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { SkyscrapersBoard currentBoard = (SkyscrapersBoard) board.copy(); currentBoard.setModifiable(false); - CaseBoard caseBoard = new CaseBoard(currentBoard, this); + currentBoard.setCaseRule(this); + for (SkyscrapersClue data : currentBoard.getWestClues()) { // System.out.println(data.getType()); - caseBoard.addPickableElement(data); + currentBoard.addCasePickableElement(data); } for (SkyscrapersClue data : currentBoard.getNorthClues()) { // System.out.println(data.getType()); - caseBoard.addPickableElement(data); + currentBoard.addCasePickableElement(data); } // selects integer before checking Command.canExecute for use in Command.getErrorString @@ -59,7 +59,7 @@ public CaseBoard getApplicableLocationsBoard(Board board) { } selectedNumber = (Integer) selectedValue; - return caseBoard; + return currentBoard; } public ArrayList getCasesFor(Board board, PuzzleElement puzzleElement, Integer number) { diff --git a/src/main/java/edu/rpi/legup/puzzle/skyscrapers/rules/NumberForCellCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/skyscrapers/rules/NumberForCellCaseRule.java index 5212f8734..7067a8ec9 100644 --- a/src/main/java/edu/rpi/legup/puzzle/skyscrapers/rules/NumberForCellCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/skyscrapers/rules/NumberForCellCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.skyscrapers.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -25,16 +24,17 @@ public NumberForCellCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { - SkyscrapersBoard lightUpBoard = (SkyscrapersBoard) board.copy(); - lightUpBoard.setModifiable(false); - CaseBoard caseBoard = new CaseBoard(lightUpBoard, this); - for (PuzzleElement data : lightUpBoard.getPuzzleElements()) { + public Board getApplicableLocationsBoard(Board board) { + SkyscrapersBoard skyscrapersboard = (SkyscrapersBoard) board.copy(); + skyscrapersboard.setModifiable(false); + skyscrapersboard.setCaseRule(this); + + for (PuzzleElement data : skyscrapersboard.getPuzzleElements()) { if (((SkyscrapersCell) data).getType() == SkyscrapersType.UNKNOWN) { - caseBoard.addPickableElement(data); + skyscrapersboard.addCasePickableElement(data); } } - return caseBoard; + return skyscrapersboard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/starbattle/rules/StarOrEmptyCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/starbattle/rules/StarOrEmptyCaseRule.java index 725ad3a1e..734839cf8 100644 --- a/src/main/java/edu/rpi/legup/puzzle/starbattle/rules/StarOrEmptyCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/starbattle/rules/StarOrEmptyCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.starbattle.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -21,16 +20,17 @@ public StarOrEmptyCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { StarBattleBoard starBattleBoard = (StarBattleBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(starBattleBoard, this); + starBattleBoard.setCaseRule(this); + starBattleBoard.setModifiable(false); for (PuzzleElement element : starBattleBoard.getPuzzleElements()) { if (((StarBattleCell) element).getType() == StarBattleCellType.UNKNOWN) { - caseBoard.addPickableElement(element); + starBattleBoard.addCasePickableElement(element); } } - return caseBoard; + return starBattleBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/sudoku/PossibleNumberCaseBoard.java b/src/main/java/edu/rpi/legup/puzzle/sudoku/PossibleNumberCaseBoard.java index c917e539b..5338f99cd 100644 --- a/src/main/java/edu/rpi/legup/puzzle/sudoku/PossibleNumberCaseBoard.java +++ b/src/main/java/edu/rpi/legup/puzzle/sudoku/PossibleNumberCaseBoard.java @@ -1,13 +1,14 @@ package edu.rpi.legup.puzzle.sudoku; -import edu.rpi.legup.model.gameboard.CaseBoard; +import edu.rpi.legup.model.gameboard.Board; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.puzzle.sudoku.rules.PossibleCellsForNumberRegionCaseRule; import java.awt.event.MouseEvent; import java.util.HashSet; import java.util.Set; -public class PossibleNumberCaseBoard extends CaseBoard { +/** PossibleNumberCaseBoard is seemingly not used */ +public abstract class PossibleNumberCaseBoard extends Board { private SudokuCell cell; private Set pickableRegions; @@ -17,7 +18,7 @@ public class PossibleNumberCaseBoard extends CaseBoard { /** is the constructor for finding the possible numbers. */ public PossibleNumberCaseBoard( SudokuBoard baseBoard, PossibleCellsForNumberRegionCaseRule caseRule, SudokuCell cell) { - super(baseBoard, caseRule); + baseBoard.setCaseRule( caseRule ); this.cell = cell; this.pickableRegions = new HashSet<>(); this.pickableRows = new HashSet<>(); diff --git a/src/main/java/edu/rpi/legup/puzzle/sudoku/SudokuView.java b/src/main/java/edu/rpi/legup/puzzle/sudoku/SudokuView.java index cf0c894de..3275a0f0c 100644 --- a/src/main/java/edu/rpi/legup/puzzle/sudoku/SudokuView.java +++ b/src/main/java/edu/rpi/legup/puzzle/sudoku/SudokuView.java @@ -102,7 +102,7 @@ public void drawCaseBoard(Graphics2D graphics2D) { drawGrid(graphics2D); PossibleNumberCaseBoard caseBoard = (PossibleNumberCaseBoard) board; - SudokuBoard sudokuBoard = (SudokuBoard) caseBoard.getBaseBoard(); + SudokuBoard sudokuBoard = (SudokuBoard) board; Graphics2D g = (Graphics2D) graphics2D.create(); g.setColor(UIManager.getColor("Sudoku.borderColor")); diff --git a/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberColumnCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberColumnCaseRule.java index cc93af563..b186f5ad0 100644 --- a/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberColumnCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberColumnCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.sudoku.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -43,15 +42,16 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { SudokuBoard sudokuBoard = (SudokuBoard) board.copy(); lagBoard = (SudokuBoard) sudokuBoard.copy(); - CaseBoard caseBoard = new CaseBoard(sudokuBoard, this); + sudokuBoard.setCaseRule(this); + for (PuzzleElement puzzleElement : sudokuBoard.getPuzzleElements()) { puzzleElement.setData(model.getModelColumnNumbers(puzzleElement.getIndex())); - caseBoard.addPickableElement(puzzleElement); + sudokuBoard.addCasePickableElement(puzzleElement); } - return caseBoard; + return sudokuBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberRegionCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberRegionCaseRule.java index a0a871afa..5742cecd6 100644 --- a/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberRegionCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberRegionCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.sudoku.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -40,15 +39,16 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { SudokuBoard sudokuBoard = (SudokuBoard) board.copy(); lagBoard = (SudokuBoard) sudokuBoard.copy(); - CaseBoard caseBoard = new CaseBoard(sudokuBoard, this); + sudokuBoard.setCaseRule(this); + for (PuzzleElement puzzleElement : sudokuBoard.getPuzzleElements()) { puzzleElement.setData(model.getModelRegionNumbers(puzzleElement.getIndex())); - caseBoard.addPickableElement(puzzleElement); + sudokuBoard.addCasePickableElement(puzzleElement); } - return caseBoard; + return sudokuBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberRowCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberRowCaseRule.java index 4ba6e1a75..01e51348b 100644 --- a/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberRowCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleCellsForNumberRowCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.sudoku.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -43,15 +42,16 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { SudokuBoard sudokuBoard = (SudokuBoard) board.copy(); lagBoard = (SudokuBoard) sudokuBoard.copy(); - CaseBoard caseBoard = new CaseBoard(sudokuBoard, this); + sudokuBoard.setCaseRule(this); + for (PuzzleElement puzzleElement : sudokuBoard.getPuzzleElements()) { puzzleElement.setData(model.getModelRowNumbers(puzzleElement.getIndex())); - caseBoard.addPickableElement(puzzleElement); + sudokuBoard.addCasePickableElement(puzzleElement); } - return caseBoard; + return sudokuBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleNumbersForCellCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleNumbersForCellCaseRule.java index 2bbd572b5..0d16c0384 100644 --- a/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleNumbersForCellCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/sudoku/rules/PossibleNumbersForCellCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.sudoku.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -34,15 +33,16 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { SudokuBoard sudokuBoard = (SudokuBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(sudokuBoard, this); + sudokuBoard.setCaseRule(this); + for (PuzzleElement puzzleElement : sudokuBoard.getPuzzleElements()) { if (((SudokuCell) puzzleElement).getData() == 0) { - caseBoard.addPickableElement(puzzleElement); + sudokuBoard.addCasePickableElement(puzzleElement); } } - return caseBoard; + return sudokuBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/thermometer/rules/MercuryOrBlockedCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/thermometer/rules/MercuryOrBlockedCaseRule.java index f07ec64af..32f872d7d 100644 --- a/src/main/java/edu/rpi/legup/puzzle/thermometer/rules/MercuryOrBlockedCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/thermometer/rules/MercuryOrBlockedCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.thermometer.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -33,16 +32,17 @@ public String checkRuleRawAt(TreeTransition transition, PuzzleElement puzzleElem } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { ThermometerBoard thermometerBoard = (ThermometerBoard) board.copy(); - CaseBoard caseBoard = new CaseBoard(thermometerBoard, this); thermometerBoard.setModifiable(false); + thermometerBoard.setCaseRule(this); + for (PuzzleElement element : thermometerBoard.getPuzzleElements()) { if (((ThermometerCell) element).getFill() == ThermometerFill.UNKNOWN) { - caseBoard.addPickableElement(element); + thermometerBoard.addCasePickableElement(element); } } - return caseBoard; + return thermometerBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/thermometer/rules/SatisfyMercuryCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/thermometer/rules/SatisfyMercuryCaseRule.java index bf970deb0..d98e55b01 100644 --- a/src/main/java/edu/rpi/legup/puzzle/thermometer/rules/SatisfyMercuryCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/thermometer/rules/SatisfyMercuryCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.thermometer.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -44,7 +43,7 @@ public ArrayList getCasesFrom(Board board, PuzzleElement puzzleElement) { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; } } diff --git a/src/main/java/edu/rpi/legup/puzzle/treetent/TreeTentController.java b/src/main/java/edu/rpi/legup/puzzle/treetent/TreeTentController.java index e89e36d24..e4eef8c04 100644 --- a/src/main/java/edu/rpi/legup/puzzle/treetent/TreeTentController.java +++ b/src/main/java/edu/rpi/legup/puzzle/treetent/TreeTentController.java @@ -8,7 +8,6 @@ import edu.rpi.legup.history.EditDataCommand; import edu.rpi.legup.history.ICommand; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.ui.boardview.BoardView; import edu.rpi.legup.ui.boardview.ElementView; @@ -66,11 +65,10 @@ public void mouseReleased(MouseEvent e) { TreeViewSelection selection = treeView.getSelection(); if (dragStart != null) { - if (board instanceof CaseBoard) { - CaseBoard caseBoard = (CaseBoard) board; + if (board.getCaseRule() != null) { AutoCaseRuleCommand autoCaseRuleCommand = new AutoCaseRuleCommand( - dragStart, selection, caseBoard.getCaseRule(), caseBoard, e); + dragStart, selection, board.getCaseRule(), board, e); if (autoCaseRuleCommand.canExecute()) { autoCaseRuleCommand.execute(); getInstance().getHistory().pushChange(autoCaseRuleCommand); diff --git a/src/main/java/edu/rpi/legup/puzzle/treetent/TreeTentView.java b/src/main/java/edu/rpi/legup/puzzle/treetent/TreeTentView.java index 6ba7dd2e5..da8935ee5 100644 --- a/src/main/java/edu/rpi/legup/puzzle/treetent/TreeTentView.java +++ b/src/main/java/edu/rpi/legup/puzzle/treetent/TreeTentView.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.treetent; import edu.rpi.legup.controller.BoardController; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.tree.TreeElement; import edu.rpi.legup.ui.boardview.ElementView; @@ -219,12 +218,7 @@ protected Dimension getProperSize() { @Override public void onTreeElementChanged(TreeElement treeElement) { super.onTreeElementChanged(treeElement); - TreeTentBoard treeTentBoard; - if (board instanceof CaseBoard) { - treeTentBoard = (TreeTentBoard) ((CaseBoard) board).getBaseBoard(); - } else { - treeTentBoard = (TreeTentBoard) board; - } + TreeTentBoard treeTentBoard = (TreeTentBoard) board; lineViews.clear(); for (TreeTentLine line : treeTentBoard.getLines()) { diff --git a/src/main/java/edu/rpi/legup/puzzle/treetent/rules/FillinRowCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/treetent/rules/FillinRowCaseRule.java index e1789120e..700283d9c 100644 --- a/src/main/java/edu/rpi/legup/puzzle/treetent/rules/FillinRowCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/treetent/rules/FillinRowCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.treetent.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -29,10 +28,11 @@ public FillinRowCaseRule() { * @return the case board object */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { TreeTentBoard treeTentBoard = (TreeTentBoard) board.copy(); treeTentBoard.setModifiable(false); - CaseBoard caseBoard = new CaseBoard(treeTentBoard, this); + treeTentBoard.setCaseRule(this); + ArrayList clues = treeTentBoard.getRowClues(); clues.addAll(treeTentBoard.getColClues()); for (PuzzleElement element : clues) { @@ -44,11 +44,11 @@ public CaseBoard getApplicableLocationsBoard(Board board) { // treeTentBoard.getRowCol(((TreeTentCell)element).getLocation().x, // TreeTentType.UNKNOWN, // false).size() != 0)) { - // caseBoard.addPickableElement(element); + // caseBoard.addCasePickableElement(element); // } - caseBoard.addPickableElement(element); + treeTentBoard.addCasePickableElement(element); } - return caseBoard; + return treeTentBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/treetent/rules/LinkTentCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/treetent/rules/LinkTentCaseRule.java index 01defd83d..90845355a 100644 --- a/src/main/java/edu/rpi/legup/puzzle/treetent/rules/LinkTentCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/treetent/rules/LinkTentCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.treetent.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -23,10 +22,11 @@ public LinkTentCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { TreeTentBoard treeTentBoard = (TreeTentBoard) board.copy(); treeTentBoard.setModifiable(false); - CaseBoard caseBoard = new CaseBoard(treeTentBoard, this); + treeTentBoard.setCaseRule(this); + for (PuzzleElement element : treeTentBoard.getPuzzleElements()) { if (((TreeTentCell) element).getType() == TreeTentType.TENT && !getCasesFrom(board, element).isEmpty()) { @@ -42,11 +42,11 @@ public CaseBoard getApplicableLocationsBoard(Board board) { } } if (canAdd) { - caseBoard.addPickableElement(element); + treeTentBoard.addCasePickableElement(element); } } } - return caseBoard; + return treeTentBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/treetent/rules/LinkTreeCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/treetent/rules/LinkTreeCaseRule.java index e15157d66..53cf02264 100644 --- a/src/main/java/edu/rpi/legup/puzzle/treetent/rules/LinkTreeCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/treetent/rules/LinkTreeCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.treetent.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -25,16 +24,17 @@ public LinkTreeCaseRule() { } /** - * Creates a CaseBoard representing all valid case selections for this rule. + * Creates a Board representing all valid case selections for this rule. * * @param board the current board state - * @return a CaseBoard containing all pickable elements for case generation + * @return a Board containing all pickable elements for case generation */ @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { TreeTentBoard treeTentBoard = (TreeTentBoard) board.copy(); treeTentBoard.setModifiable(false); - CaseBoard caseBoard = new CaseBoard(treeTentBoard, this); + treeTentBoard.setCaseRule(this); + for (PuzzleElement element : treeTentBoard.getPuzzleElements()) { if (((TreeTentCell) element).getType() == TreeTentType.TREE && !getCasesFrom(treeTentBoard, element).isEmpty()) { @@ -51,11 +51,11 @@ public CaseBoard getApplicableLocationsBoard(Board board) { } } if (canAdd) { - caseBoard.addPickableElement(element); + treeTentBoard.addCasePickableElement(element); } } } - return caseBoard; + return treeTentBoard; } /** diff --git a/src/main/java/edu/rpi/legup/puzzle/treetent/rules/TentOrGrassCaseRule.java b/src/main/java/edu/rpi/legup/puzzle/treetent/rules/TentOrGrassCaseRule.java index c79d9ab6e..f40baacef 100644 --- a/src/main/java/edu/rpi/legup/puzzle/treetent/rules/TentOrGrassCaseRule.java +++ b/src/main/java/edu/rpi/legup/puzzle/treetent/rules/TentOrGrassCaseRule.java @@ -1,7 +1,6 @@ package edu.rpi.legup.puzzle.treetent.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -21,16 +20,17 @@ public TentOrGrassCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { TreeTentBoard treeTentBoard = (TreeTentBoard) board.copy(); treeTentBoard.setModifiable(false); - CaseBoard caseBoard = new CaseBoard(treeTentBoard, this); + treeTentBoard.setCaseRule(this); + for (PuzzleElement element : treeTentBoard.getPuzzleElements()) { if (((TreeTentCell) element).getType() == TreeTentType.UNKNOWN) { - caseBoard.addPickableElement(element); + treeTentBoard.addCasePickableElement(element); } } - return caseBoard; + return treeTentBoard; } /** diff --git a/src/main/java/edu/rpi/legup/ui/PuzzleEditorPanel.java b/src/main/java/edu/rpi/legup/ui/PuzzleEditorPanel.java index 614fd3269..a7032d840 100644 --- a/src/main/java/edu/rpi/legup/ui/PuzzleEditorPanel.java +++ b/src/main/java/edu/rpi/legup/ui/PuzzleEditorPanel.java @@ -13,7 +13,6 @@ import edu.rpi.legup.model.Puzzle; import edu.rpi.legup.model.PuzzleExporter; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.GridBoard; import edu.rpi.legup.model.gameboard.GridCell; import edu.rpi.legup.model.gameboard.PuzzleElement; @@ -785,7 +784,7 @@ public void onTreeElementChanged(TreeElement treeElement) { } @Override - public void onCaseBoardAdded(CaseBoard caseBoard) { + public void onCaseBoardAdded(Board caseBoard) { // not relevant for goal text updates } diff --git a/src/main/java/edu/rpi/legup/ui/boardview/BoardView.java b/src/main/java/edu/rpi/legup/ui/boardview/BoardView.java index 617fb86a0..c88489111 100644 --- a/src/main/java/edu/rpi/legup/ui/boardview/BoardView.java +++ b/src/main/java/edu/rpi/legup/ui/boardview/BoardView.java @@ -3,7 +3,6 @@ import edu.rpi.legup.controller.BoardController; import edu.rpi.legup.controller.ElementController; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.observer.IBoardListener; import edu.rpi.legup.model.tree.TreeElement; @@ -121,7 +120,7 @@ public void setBoard(@NotNull Board board) { if (this.board != board) { this.board = board; - if (board instanceof CaseBoard) { + if (board.getCaseRule() != null) { setCasePickable(); } else { for (ElementView elementView : elementViews) { @@ -135,15 +134,12 @@ public void setBoard(@NotNull Board board) { /** Configures the view to handle case interactions */ protected void setCasePickable() { - CaseBoard caseBoard = (CaseBoard) board; - Board baseBoard = caseBoard.getBaseBoard(); - for (ElementView elementView : elementViews) { PuzzleElement puzzleElement = - baseBoard.getPuzzleElement(elementView.getPuzzleElement()); + board.getPuzzleElement(elementView.getPuzzleElement()); elementView.setPuzzleElement(puzzleElement); elementView.setShowCasePicker(true); - elementView.setCaseRulePickable(caseBoard.isPickable(puzzleElement, null)); + elementView.setCaseRulePickable(board.isPickable(puzzleElement, null)); } } @@ -165,7 +161,7 @@ public void onTreeElementChanged(@NotNull TreeElement treeElement) { * @param caseBoard case board to be added */ @Override - public void onCaseBoardAdded(@NotNull CaseBoard caseBoard) { + public void onCaseBoardAdded(@NotNull Board caseBoard) { setBoard(caseBoard); repaint(); } diff --git a/src/test/java/puzzles/testpuzzle/rules/InvalidCaseRule.java b/src/test/java/puzzles/testpuzzle/rules/InvalidCaseRule.java index becf0c07b..4c89307fe 100644 --- a/src/test/java/puzzles/testpuzzle/rules/InvalidCaseRule.java +++ b/src/test/java/puzzles/testpuzzle/rules/InvalidCaseRule.java @@ -1,7 +1,6 @@ package puzzles.testpuzzle.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -17,7 +16,7 @@ public InvalidCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; } diff --git a/src/test/java/puzzles/testpuzzle/rules/ValidCaseRule.java b/src/test/java/puzzles/testpuzzle/rules/ValidCaseRule.java index f48360144..cb7eb5b9b 100644 --- a/src/test/java/puzzles/testpuzzle/rules/ValidCaseRule.java +++ b/src/test/java/puzzles/testpuzzle/rules/ValidCaseRule.java @@ -1,7 +1,6 @@ package puzzles.testpuzzle.rules; import edu.rpi.legup.model.gameboard.Board; -import edu.rpi.legup.model.gameboard.CaseBoard; import edu.rpi.legup.model.gameboard.PuzzleElement; import edu.rpi.legup.model.rules.CaseRule; import edu.rpi.legup.model.tree.TreeTransition; @@ -17,7 +16,7 @@ public ValidCaseRule() { } @Override - public CaseBoard getApplicableLocationsBoard(Board board) { + public Board getApplicableLocationsBoard(Board board) { return null; }