1 package de.jos.game.objects.buttons;
2
3 import java.awt.Graphics2D;
4 import java.awt.image.BufferedImage;
5 import java.util.Set;
6
7 import org.apache.commons.lang.builder.ToStringBuilder;
8
9 import de.jos.game.Constants;
10 import de.jos.game.logic.CombinationUtils;
11 import de.jos.game.objects.Bullet;
12 import de.jos.game.objects.screen.AbstractGameObject;
13 import de.jos.game.objects.screen.PuzzleLevelScreen;
14 import de.jos.game.objects.screen.Screen;
15 import de.jos.game.xml.Level;
16
17 public class PuzzleLevelButton extends GameButton {
18
19 private int level = -1;
20
21 public PuzzleLevelButton(AbstractGameObject gameObject, int x, int y, int level, boolean solved) {
22 super("", x, y, 80, 80, gameObject);
23
24 System.out.println("PuzzleLevelButton render !");
25
26
27 setButtonClickCallback(new PuzzleLevelButtonClickCallback(gameObject));
28
29 this.level = level;
30
31
32 Level puzzleLevel = gameObject.getResourceContainer().getPuzzleLevels().get(level - 1);
33 puzzleLevel.initBullets(gameObject.getResourceContainer());
34
35 BufferedImage bg = gameObject.getImage("img/buttons/background_small_puzzle.png");
36 BufferedImage rahmenDefault = gameObject.getImage("img/buttons/rahmen_default.png");
37 BufferedImage rahmenSelected = gameObject.getImage("img/buttons/rahmen_selected.png");
38 BufferedImage haken = gameObject.getImage("img/buttons/haken.png");
39
40 /*** Klon Instanzen erzeugen, damit das Aussehen des Levels erhalten bleibt */
41 Set<Bullet> bullets = puzzleLevel.getBullets();
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 BufferedImage buttonImageDefault = renderButton(gameObject, bg, bullets, rahmenDefault, haken, solved);
62 BufferedImage buttonImageSelected = renderButton(gameObject, bg, bullets, rahmenSelected, haken, solved);
63
64 BufferedImage[] images = new BufferedImage[4];
65 images[0] = buttonImageDefault;
66 images[1] = buttonImageSelected;
67 images[2] = buttonImageSelected;
68 images[3] = buttonImageSelected;
69
70
71
72 setExternalUI(images, true);
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 }
93
94 /***
95 * Rendert ein kleinen Puzzlelevel Button ohne Rahmen.
96 *
97 * @param gameObject
98 * @param background
99 * @param levelBullets
100 * @return
101 */
102 private BufferedImage renderButton(AbstractGameObject gameObject, BufferedImage background, Set<Bullet> levelBullets,
103 BufferedImage rahmen, BufferedImage haken, boolean solved) {
104
105 final int offset = ((95 - (Constants.PUZZLE_SPRITE_WIDTH_X * Constants.PUZZLE_SPRITE_WIDTH_X)) / 2);
106
107 BufferedImage tmpImage = new BufferedImage(95, 95, BufferedImage.TYPE_INT_RGB);
108 Graphics2D graphics = tmpImage.createGraphics();
109 graphics.drawImage(background, 0, 0, null);
110
111 for (Bullet tmpBullet : levelBullets) {
112 if (CombinationUtils.isOnBoard(tmpBullet)) {
113 BufferedImage tinySprite = gameObject.getResourceContainer().getBulletSpriteImageTiny(
114 tmpBullet.getColor().intValue())[0];
115 graphics.drawImage(tinySprite, offset
116 + ((tmpBullet.getBoardX() - Constants.LEFT_BORDER) * (Constants.PUZZLE_SPRITE_WIDTH_X)), offset
117 + ((tmpBullet.getBoardY() - Constants.TOP_BORDER) * (Constants.PUZZLE_SPRITE_WIDTH_Y)), null);
118 }
119 }
120
121 if (solved) {
122 graphics.drawImage(haken, 20, 20, null);
123 }
124
125 graphics.drawImage(rahmen, 0, 0, null);
126 graphics.dispose();
127
128 return tmpImage;
129 }
130
131 @Override
132 public Action getAction() {
133 return Action.PUZZLE_LEVEL;
134 }
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150 public int getLevel() {
151 return level;
152 }
153
154 @Override
155 public String toString() {
156 ToStringBuilder tsb = new ToStringBuilder(this);
157 tsb.append("action", getAction());
158 tsb.append("level", getLevel());
159 return tsb.toString();
160 }
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179 /***
180 * Callback fuer einen Button click.
181 *
182 * @author root
183 *
184 */
185 private final class PuzzleLevelButtonClickCallback implements ButtonClickCallback {
186
187 AbstractGameObject gameObject = null;
188
189 public PuzzleLevelButtonClickCallback(AbstractGameObject gameObject) {
190 this.gameObject = gameObject;
191 }
192
193 /***
194 * {@inheritDoc}
195 */
196 public void performClickAction() {
197 PuzzleLevelScreen puzzleLevelScreen = (PuzzleLevelScreen) gameObject;
198
199 puzzleLevelScreen.setNextScreen(Screen.GAME);
200 puzzleLevelScreen.setSelectedLevel(getLevel());
201 }
202
203 }
204
205 }