View Javadoc

1   package de.jos.game.aspect.plugins;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   import java.util.Map;
6   import java.util.TreeMap;
7   
8   import org.apache.commons.lang.StringUtils;
9   
10  import de.jos.game.Constants;
11  import de.jos.game.actions.permanent.ActionCanister;
12  import de.jos.game.logic.AbstractGameBoard;
13  import de.jos.game.objects.Canister;
14  import de.jos.game.objects.screen.AbstractGameObject;
15  import de.jos.game.objects.screen.TheGame;
16  
17  public class CanisterPlugin implements DebugPlugin {
18  
19    private static final Map<String, CanisterCommand> canisterCommandMap = new TreeMap<String, CanisterCommand>();
20  
21    private static final String CMD_C0 = "C0";
22    private static final String CMD_C1 = "C1";
23    private static final String CMD_C2 = "C2";
24    private static final String CMD_C3 = "C3";
25    private static final String CMD_C4 = "C4";
26    private static final String CMD_C5 = "C5";
27    private static final String CMD_C6 = "C6";
28    private static final String CMD_CD = "CD";
29  
30    private static final String CMD_MAIN = "CANISTER";
31  
32    public CanisterPlugin() {
33      canisterCommandMap.put(CMD_C0, new CanisterCommand(CMD_C0, "blue", Constants.COLOR_BLUE));
34      canisterCommandMap.put(CMD_C1, new CanisterCommand(CMD_C1, "red", Constants.COLOR_RED));
35      canisterCommandMap.put(CMD_C2, new CanisterCommand(CMD_C2, "yellow", Constants.COLOR_YELLOW));
36      canisterCommandMap.put(CMD_C3, new CanisterCommand(CMD_C3, "pink", Constants.COLOR_PINK));
37      canisterCommandMap.put(CMD_C4, new CanisterCommand(CMD_C4, "green", Constants.COLOR_GREEN));
38      canisterCommandMap.put(CMD_C5, new CanisterCommand(CMD_C5, "orange", Constants.COLOR_ORANGE));
39      canisterCommandMap.put(CMD_C6, new CanisterCommand(CMD_C6, "violet", Constants.COLOR_VIOLET));
40      canisterCommandMap.put(CMD_CD, new CanisterCommand(CMD_CD, "delete", null));
41    }
42  
43    public String getPluginName() {
44      return StringUtils.upperCase("canister - show canister commands");
45    }
46  
47    public List<String> getPluginHelp() {
48  
49      List<String> helpString = new ArrayList<String>();
50  
51      for (String key : canisterCommandMap.keySet()) {
52        CanisterCommand canisterCommand = canisterCommandMap.get(key);
53        String tmpString = canisterCommand.getCommand() + " - " + canisterCommand.getColorName();
54        helpString.add(StringUtils.upperCase(tmpString));
55      }
56  
57      return helpString;
58    }
59  
60    public String getPluginHelpCommand() {
61      return CMD_MAIN;
62    }
63  
64    // TODO hier sollte ein interface mit gameboard, oder gamelogic hin
65    public void executeCommand(AbstractGameObject gameObject, String command) {
66      if (gameObject instanceof TheGame) {
67        AbstractGameBoard board = ((TheGame) gameObject).getGameLogic().getBoard();
68        if (command.equals(CMD_CD)) {
69          deleteAllCanisters(board);
70        } else {
71          CanisterCommand cc = canisterCommandMap.get(command);
72          addCanister(board, cc.getColor());
73        }
74      }
75    }
76  
77    public boolean possibleCommandMatch(String command) {
78      boolean match = canisterCommandMap.containsKey(command);
79      if (match == false) {
80        match = command.equals(CMD_MAIN);
81      }
82  
83      return match;
84    }
85  
86    private void addCanister(AbstractGameBoard gameBoard, Integer color) {
87      ActionCanister ac = gameBoard.getActionContainer().getActionCanister();
88      int canisterNumber = ac.getNumberCanisters();
89  
90      Canister canister = new Canister();
91      canister.setResourceContainer(gameBoard.getResourceContainer());
92      canister.init(canisterNumber, color);
93  
94      if (ac.combinationMatchPossible(canister, gameBoard.getLevel().getAccumulatedCombinations()) == true) {
95        ac.addCanister(canister);
96      } else {
97        ac.clearCanisters();
98      }
99    }
100 
101   private void deleteAllCanisters(AbstractGameBoard gameBoard) {
102     ActionCanister ac = gameBoard.getActionContainer().getActionCanister();
103     ac.clearCanisters();
104   }
105 
106   private static final class CanisterCommand implements Comparable<CanisterCommand> {
107 
108     private String colorName = null;
109     private String command = null;
110     private Integer color = null;
111 
112     public CanisterCommand(String command, String colorName, Integer color) {
113       setCommand(command);
114       setColorName(colorName);
115       setColor(color);
116     }
117 
118     public int compareTo(CanisterCommand other) {
119       if (getColor() == null) {
120         return -1;
121       } else if (other.getColor() == null) {
122         return 1;
123       }
124       return color.compareTo(other.getColor());
125     }
126 
127     public Integer getColor() {
128       return color;
129     }
130 
131     public void setColor(Integer color) {
132       this.color = color;
133     }
134 
135     public String getColorName() {
136       return colorName;
137     }
138 
139     public void setColorName(String colorName) {
140       this.colorName = colorName;
141     }
142 
143     public String getCommand() {
144       return command;
145     }
146 
147     public void setCommand(String command) {
148       this.command = command;
149     }
150 
151   }
152 
153 }