1 package de.jos.game.objects.screen;
2
3 import java.awt.Color;
4 import java.awt.Graphics2D;
5 import java.awt.image.BufferedImage;
6
7 import org.apache.commons.lang.StringUtils;
8 import org.springframework.beans.factory.xml.XmlBeanFactory;
9
10 import com.golden.gamedev.GameEngine;
11 import com.golden.gamedev.engine.BaseIO;
12 import com.golden.gamedev.object.AnimatedSprite;
13 import com.golden.gamedev.object.GameFont;
14 import com.golden.gamedev.object.Sprite;
15 import com.golden.gamedev.object.Timer;
16 import com.golden.gamedev.object.background.ImageBackground;
17
18 import de.jos.game.Constants;
19 import de.jos.game.logic.LevelLoader;
20 import de.jos.game.objects.Countdown;
21 import de.jos.game.objects.ResourceContainer;
22 import de.jos.game.xml.Level;
23
24 public class IntroScreen extends AbstractGameObject implements Constants {
25
26 private Timer timer = null;
27 private StringBuilder dotStringBuilder = null;
28 private IntroThread introThread = null;
29
30 public IntroScreen(GameEngine gameEngine, ResourceContainer resourceContainer, XmlBeanFactory xmlBeanFactory) {
31 super(gameEngine, resourceContainer, xmlBeanFactory);
32 timer = new Timer(200);
33 dotStringBuilder = new StringBuilder(".");
34 }
35
36 @Override
37 public void initResources() {
38 introThread = new IntroThread(getResourceContainer());
39 introThread.start();
40
41
42 ResourceContainer resourceContainer = getResourceContainer();
43
44 GameFont ingameFont = fontManager.getFont(getImage("img/fonts/ingameFont.png"),
45 "!.:0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ");
46 resourceContainer.setIngameFont(ingameFont);
47
48 setFPS(10);
49 }
50
51 public void render(Graphics2D graphics) {
52 ResourceContainer resourceContainer = getResourceContainer();
53 GameFont font = resourceContainer.getIngameFont();
54 resourceContainer.getBackground().render(graphics);
55 String tmpString = resourceContainer.getLabelResources().getString("label.loadingDataMessage");
56
57 String text = tmpString + dotStringBuilder.toString();
58 font.drawString(graphics, StringUtils.upperCase(text), 170, 340);
59
60 graphics.setColor(new Color(192, 192, 192));
61 graphics.fillRect(PROGRESSBAR_WINDOW_BORDERX, PROGRESSBAR_WINDOW_BORDERY, WINDOW_WIDTH
62 - (2 * PROGRESSBAR_WINDOW_BORDERX), PROGRESSBAR_HEIGHT);
63
64
65 int status = introThread.getLoadingStatus();
66 int maxLength = WINDOW_WIDTH - (2 * PROGRESSBAR_WINDOW_BORDERX) - (2 * PROGRESSBAR_BORDER);
67 int length = (status * maxLength) / 100;
68
69 graphics.setColor(new Color(0, 192, 192));
70 graphics.fillRect(100 + PROGRESSBAR_BORDER, PROGRESSBAR_WINDOW_BORDERY + PROGRESSBAR_BORDER, length,
71 PROGRESSBAR_HEIGHT - (2 * PROGRESSBAR_BORDER));
72
73 }
74
75 public void update(long elapsedTime) {
76 if (timer.action(elapsedTime)) {
77 dotStringBuilder.append(".");
78 if (dotStringBuilder.length() == 7) {
79 dotStringBuilder.setLength(1);
80 }
81 }
82
83 if (introThread.getLoadingStatus() == 100) {
84 parent.nextGameID = Screen.START.ordinal();
85 finish();
86 }
87 }
88
89 private final class IntroThread extends Thread {
90
91 private int loadingStatus = 0;
92 private ResourceContainer resourceContainer = null;
93
94 public IntroThread(ResourceContainer resourceContainer) {
95 setName("INTROTHREAD");
96 this.resourceContainer = resourceContainer;
97 }
98
99 public void run() {
100
101
102 bsLoader.getBaseIO().setMode(BaseIO.CLASS_LOADER);
103
104
105 resourceContainer.setCanisterImage(Constants.COLOR_RED, getImages("img/canister/canister_red.png", 32, 1));
106 resourceContainer.setCanisterImage(Constants.COLOR_BLUE, getImages("img/canister/canister_blue.png", 32, 1));
107 resourceContainer.setCanisterImage(Constants.COLOR_YELLOW, getImages("img/canister/canister_yellow.png", 32, 1));
108 resourceContainer.setCanisterImage(Constants.COLOR_PINK, getImages("img/canister/canister_pink.png", 32, 1));
109 resourceContainer.setCanisterImage(Constants.COLOR_GREEN, getImages("img/canister/canister_green.png", 32, 1));
110 resourceContainer.setCanisterImage(Constants.COLOR_ORANGE, getImages("img/canister/canister_orange.png", 32, 1));
111
112 loadingStatus = 20;
113
114
115
116
117
118
119 BufferedImage bgPartImage = getImage ("img/backgrounds/background_part_infinite.png");
120 resourceContainer.setBgPartInfinite(bgPartImage);
121
122 BufferedImage bgImage = getImage("img/backgrounds/ingameBackground.jpg");
123 resourceContainer.setGameBackgroundImage(new ImageBackground(bgImage));
124
125
126 resourceContainer.setLevelAdvanceTop(new Sprite(getImage("img/level_advance.png").getSubimage(0, 0, 326,
127 (326 / 2) - 1)));
128 resourceContainer.setLevelAdvanceBottom(new Sprite(getImage("img/level_advance.png").getSubimage(0, (326 / 2),
129 326, 326 / 2)));
130
131 loadingStatus = 30;
132
133
134 Sprite countdownSprite = new Sprite(getImage(("img/countdown.png")));
135 countdownSprite.setX(550);
136 countdownSprite.setY(170);
137 countdownSprite.setBackground(resourceContainer.getGameBackgroundImage());
138 resourceContainer.setCountdownSprite(countdownSprite);
139
140
141 Sprite countdownBackground = new Sprite(getImage(("img/countdown_background.png")));
142 countdownBackground.setX(Countdown.COUNTDOWN_X_POS);
143 countdownBackground.setY(Countdown.COUNTDOWN_MAX_POS);
144 countdownBackground.setBackground(resourceContainer.getGameBackgroundImage());
145 resourceContainer.setCountdownBackground(countdownBackground);
146
147 loadingStatus = 40;
148
149
150 resourceContainer.setCursorSprite(new Sprite(getImage("img/cursor.png")));
151
152
153 BufferedImage[] buttonImages = getImages("img/buttons/stoneButton.png", 2, 1);
154 AnimatedSprite buttonImage = new AnimatedSprite(buttonImages, 0, 0);
155 resourceContainer.setAnimatedButtonSprite(buttonImage);
156
157 loadingStatus = 60;
158
159 createBulletResource(new BulletColor(Constants.COLOR_BLUE, "blue"));
160 createBulletResource(new BulletColor(Constants.COLOR_GREEN, "green"));
161 createBulletResource(new BulletColor(Constants.COLOR_YELLOW, "yellow"));
162 createBulletResource(new BulletColor(Constants.COLOR_RED, "red"));
163 createBulletResource(new BulletColor(Constants.COLOR_PINK, "pink"));
164 createBulletResource(new BulletColor(Constants.COLOR_ORANGE, "orange"));
165 createBulletResource(new BulletColor(Constants.COLOR_CYAN, "cyan"));
166 createBulletResource(new BulletColor(Constants.COLOR_VIOLET, "violet"));
167
168 resourceContainer.setGameFont(fontManager.getFont("FPS Font"));
169
170 loadingStatus = 70;
171
172
173 int numberPuzzleLevels = Integer.parseInt(getString("numberPuzzleLevels"));
174 int numberInifiniteLevels = Integer.parseInt(getString("numberInfiniteLevels"));
175
176 XmlBeanFactory factory = getXmlBeanFactory();
177 LevelLoader levelLoader = (LevelLoader) factory.getBean("levelLoader");
178 levelLoader.setResourceContainer(resourceContainer);
179 Level level = null;
180
181 for (int i = 0; i < numberPuzzleLevels; i++) {
182 level = levelLoader.loadLevel(Constants.MODE_PUZZLE, Integer.valueOf(i + 1));
183 resourceContainer.getPuzzleLevels().add(i, level);
184 }
185
186 loadingStatus = 85;
187
188 for (int i = 0; i < numberInifiniteLevels; i++) {
189 level = levelLoader.loadLevel(Constants.MODE_INFINITE, Integer.valueOf(i + 1));
190 resourceContainer.getInfiniteLevels().add(i, level);
191 }
192
193 loadingStatus = 99;
194
195 try {
196 Thread.sleep(100);
197 } catch (Exception e) {
198 }
199
200 loadingStatus = 100;
201 }
202
203 private void createBulletResource(BulletColor bulletColor) {
204 ResourceContainer rc = getResourceContainer();
205
206 BufferedImage[] imageBallHover = getImages("img/bullets/ball_" + bulletColor.getName() + "_anim.png", 13, 1);
207 rc.setBulletSpriteImage(bulletColor.getColor().intValue(), imageBallHover);
208
209 BufferedImage[] imageBallRotate = getImages("img/bullets/ball_" + bulletColor.getName() + "_rot.png", 6, 1);
210 rc.setBulletSpriteRotate(bulletColor.getColor().intValue(), imageBallRotate);
211
212 BufferedImage[] imageBallSmall = new BufferedImage[1];
213 imageBallSmall[0] = getImage("img/bullets/ball_" + bulletColor.getName() + "_small.png");
214 rc.setBulletSpriteImageSmall(bulletColor.getColor().intValue(), imageBallSmall);
215
216 try {
217
218 BufferedImage[] imageBallTiny = new BufferedImage[1];
219 imageBallTiny[0] = getImage("img/bullets/ball_" + bulletColor.getName() + "_tiny.png");
220 rc.setBulletSpriteImageTiny(bulletColor.getColor().intValue(), imageBallTiny);
221 } catch (Exception e) {
222 System.out.println("konnte " + "img/bullets/ball_" + bulletColor.getName() + "_tiny.png" + " laden !" );
223 }
224 }
225
226 public int getLoadingStatus() {
227 return loadingStatus;
228 }
229
230 private final class BulletColor {
231 private Integer color = null;
232 private String name = null;
233
234 public BulletColor(Integer color, String name) {
235 this.color = color;
236 this.name = name;
237 }
238
239 public Integer getColor() {
240 return color;
241 }
242
243 public String getName() {
244 return name;
245 }
246 }
247
248 }
249
250 }