View Javadoc
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      // set the window title
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      // TODO hier nicht direkt den gameLoader zurückgeben, da dieser sonst nicht
64      // ueber die properties gesetzt werden kann
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        // START Screen wurde noch nie angezeigt
95        if (gameObject == null) {
96          gameObject = new StartScreen(this, resourceContainer, xmlBeanFactory);
97          screenMap.put(Screen.START, gameObject);
98          
99          // initial PuzzleLevelState instanzieren / initialiseren
100         puzzleLevelState = new PuzzleLevelState(resourceContainer.getPuzzleLevels().size());
101       }
102 
103       // start music if not already running
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           // stop music in puzzle mode
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       // if we are returning from the game show the old level screen
153       // else create a new object
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       // TODO cachen, damit man nach dem level wieder
163       // auf die richtige seite kommt
164 
165       // gameObject = screenMap.get(Screen.LEVEL_ONE);
166       // if (gameObject == null) {
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 }