1 package de.jos.game.objects.screen;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import java.util.ResourceBundle;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
10 import org.springframework.beans.factory.xml.XmlBeanFactory;
11 import org.springframework.core.io.ClassPathResource;
12
13 import com.golden.gamedev.GameEngine;
14 import com.golden.gamedev.GameObject;
15
16 import de.jos.game.Constants;
17 import de.jos.game.loader.IGameLoader;
18 import de.jos.game.music.MusicManager;
19 import de.jos.game.objects.ResourceContainer;
20 import de.jos.game.objects.state.PuzzleLevelState;
21
22 public class PushinGLMain extends GameEngine implements Constants {
23
24 private static Log LOG = LogFactory.getLog(PushinGLMain.class);
25
26 private Map<Screen, AbstractGameObject> screenMap = new HashMap<Screen, AbstractGameObject>();
27
28 private XmlBeanFactory xmlBeanFactory = null;
29
30 private Screen lastScreen = null;
31
32 private ResourceContainer resourceContainer = null;
33
34 private IGameLoader gameLoader = null;
35
36 private PuzzleLevelState puzzleLevelState = null;
37
38 public void setDistribute(boolean doDistribute) {
39 distribute = doDistribute;
40 }
41
42 public void initResources() {
43
44 ResourceBundle bundle = resourceContainer.getLabelResources();
45 bsGraphics.setWindowTitle(" " + bundle.getString("app.name") + " " + bundle.getString("app.version"));
46
47 super.initEngine();
48 }
49
50 public void finish() {
51 super.finish();
52 }
53
54 public static void main(String[] args) {
55
56 ClassPathResource res = new ClassPathResource("gameBean.xml");
57 XmlBeanFactory factory = new XmlBeanFactory(res);
58 PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();
59 ClassPathResource resProperties = new ClassPathResource("gameBean.properties");
60 cfg.setLocation(resProperties);
61 cfg.postProcessBeanFactory(factory);
62
63
64
65 PushinGLMain pushinGLMain = (PushinGLMain) factory.getBean("gameMainClass");
66 pushinGLMain.setXmlBeanFactory(factory);
67 pushinGLMain.getGameLoader().initLoader();
68 pushinGLMain.getGameLoader().start();
69 }
70
71 /***
72 * gameId in Screen enum konvertieren, damit wir damit besser arbeiten koennen
73 */
74 @Override
75 public GameObject getGame(int gameId) {
76 LOG.info("Screen.getById(gameId) : " + Screen.getById(gameId));
77
78 return getGame(Screen.getById(gameId));
79 }
80
81 /***
82 * Den naecshten Screen ermitteln, der angezeigt werden soll.
83 *
84 * @param screen
85 * @return
86 */
87 private GameObject getGame(Screen screen) {
88
89 AbstractGameObject gameObject = null;
90
91 if (Screen.START == screen) {
92 gameObject = screenMap.get(Screen.START);
93
94
95 if (gameObject == null) {
96 gameObject = new StartScreen(this, resourceContainer, xmlBeanFactory);
97 screenMap.put(Screen.START, gameObject);
98
99
100 puzzleLevelState = new PuzzleLevelState(resourceContainer.getPuzzleLevels().size());
101 }
102
103
104 MusicManager musicManager = (MusicManager) getXmlBeanFactory().getBean("musicManager");
105 if (musicManager != null) {
106 musicManager.startMusic();
107 }
108
109 lastScreen = Screen.START;
110 } else if (Screen.GAME == screen) {
111 System.out.println("########### GAME");
112
113 StartScreen startScreen = (StartScreen) screenMap.get(Screen.START);
114 if (startScreen == null) {
115 System.out.println("FATALER FEHLER ");
116 } else {
117 if (Screen.HELP_COMBINATIONS == lastScreen) {
118 gameObject = screenMap.get(Screen.GAME);
119 } else if (Screen.START == lastScreen) {
120 gameObject = new TheGame(this, resourceContainer, xmlBeanFactory);
121 ((TheGame) gameObject).setMode(Constants.MODE_INFINITE);
122 screenMap.put(Screen.GAME, gameObject);
123 } else if (Screen.LEVEL == lastScreen) {
124
125
126 MusicManager musicManager = (MusicManager) getXmlBeanFactory().getBean("musicManager");
127 if (musicManager != null) {
128 musicManager.stopMusic();
129 }
130
131 gameObject = new TheGame(this, resourceContainer, xmlBeanFactory);
132 ((TheGame) gameObject).setMode(Constants.MODE_PUZZLE);
133
134 PuzzleLevelScreen puzzleLevelScreen = (PuzzleLevelScreen) screenMap.get(lastScreen);
135
136 puzzleLevelState.setCurrentlySelectedLevel(puzzleLevelScreen.getSelectedLevel());
137
138 ((TheGame) gameObject).setPuzzleLevelState(puzzleLevelState);
139 screenMap.put(Screen.GAME, gameObject);
140 }
141 }
142 lastScreen = Screen.GAME;
143 } else if (Screen.HELP_COMBINATIONS == screen) {
144 TheGame theGameObject = (TheGame) screenMap.get(Screen.GAME);
145 gameObject = screenMap.get(Screen.HELP_COMBINATIONS);
146 gameObject = new CombinationScreen(this, theGameObject.getGameLogic().getLevel(), resourceContainer);
147
148 lastScreen = Screen.HELP_COMBINATIONS;
149 } else if (Screen.LEVEL == screen) {
150 System.out.println("########### LEVEL");
151
152
153
154 if (Screen.GAME == lastScreen) {
155 gameObject = screenMap.get(Screen.LEVEL);
156 } else {
157 System.out.println("########### puzzle levels");
158 gameObject = new PuzzleLevelScreen(this, resourceContainer, xmlBeanFactory, puzzleLevelState);
159 screenMap.put(Screen.LEVEL, gameObject);
160 }
161
162
163
164
165
166
167
168
169 lastScreen = Screen.LEVEL;
170 } else if (Screen.CREDITS == screen) {
171 gameObject = new CreditsScreen(this, resourceContainer);
172 lastScreen = Screen.CREDITS;
173 } else if (Screen.HELP_GENERAL == screen) {
174 gameObject = new HelpScreen(this, resourceContainer);
175 lastScreen = Screen.HELP_GENERAL;
176 } else if (Screen.INTRO == screen) {
177 gameObject = new IntroScreen(this, resourceContainer, xmlBeanFactory);
178 }
179
180 return gameObject;
181 }
182
183 public ResourceContainer getResourceContainer() {
184 return resourceContainer;
185 }
186
187 public void setResourceContainer(ResourceContainer resourceContainer) {
188 this.resourceContainer = resourceContainer;
189 }
190
191 public IGameLoader getGameLoader() {
192 return gameLoader;
193 }
194
195 public void setGameLoader(IGameLoader gameLoader) {
196 this.gameLoader = gameLoader;
197 }
198
199 public XmlBeanFactory getXmlBeanFactory() {
200 return xmlBeanFactory;
201 }
202
203 public void setXmlBeanFactory(XmlBeanFactory factory) {
204 xmlBeanFactory = factory;
205 }
206
207 }