View Javadoc

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      // get font we need for the intro screen
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      // this is the progressbar
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       // set the baseIO 'CLASSLOADER'
102       bsLoader.getBaseIO().setMode(BaseIO.CLASS_LOADER);
103 
104       // canisters
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       // background image
115       // BufferedImage bgImage =
116       // getImage("img/backgrounds/ingameBackground.png");
117    //   BufferedImage infiniteBgImage = getImage("img/backgrounds/background.jpg");
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       // old version -> simple sprite
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       // countdown sprite
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       // countdown background sprite
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       // cursor sprite
150       resourceContainer.setCursorSprite(new Sprite(getImage("img/cursor.png")));
151 
152       // animated button sprite
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       // start loading all the levels
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       // button animated sprite
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         // TODO remove try catch sobald es tut
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 }