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
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 }