View Javadoc

1   package de.jos.game.objects.screen;
2   
3   import java.awt.Graphics2D;
4   
5   import org.springframework.beans.factory.xml.XmlBeanFactory;
6   
7   import com.golden.gamedev.GameEngine;
8   
9   import de.jos.game.Constants;
10  import de.jos.game.actions.ActionContainer;
11  import de.jos.game.aspect.DebugConsoleAware;
12  import de.jos.game.logic.AbstractGameBoard;
13  import de.jos.game.logic.AbstractGameLogic;
14  import de.jos.game.logic.InfiniteGameBoard;
15  import de.jos.game.logic.InfiniteGameLogic;
16  import de.jos.game.logic.PuzzleGameBoard;
17  import de.jos.game.logic.PuzzleGameLogic;
18  import de.jos.game.objects.ResourceContainer;
19  import de.jos.game.objects.buttons.RestartButton;
20  import de.jos.game.objects.buttons.UndoButton;
21  import de.jos.game.objects.state.PuzzleLevelState;
22  import de.jos.game.xml.Level;
23  
24  public class TheGame extends AbstractGameObject implements Constants {
25  
26    private AbstractGameBoard board = null;
27  
28    private AbstractGameLogic gameLogic = null;
29  
30    private Integer mode = null;
31  
32    private PuzzleLevelState puzzleLevelState = null;
33  
34    private static final int INFINITE_MODE_START_LEVEL = 1;
35  
36    public TheGame(GameEngine parent, ResourceContainer resourceContainer, XmlBeanFactory xmlBeanFactory) {
37      super(parent, resourceContainer, xmlBeanFactory);
38    }
39  
40    public void initResources() {
41      ResourceContainer resourceContainer = getResourceContainer();
42  
43      Level level = null;
44      if (mode.equals(Constants.MODE_PUZZLE)) {
45        board = new PuzzleGameBoard();
46        board.setActionContainer(new ActionContainer(resourceContainer, board, true));
47        gameLogic = new PuzzleGameLogic();
48        level = resourceContainer.getPuzzleLevels().get(puzzleLevelState.getCurrentlySelectedLevel() - 1);
49        level.initBullets(getResourceContainer());
50      } else if (mode.equals(Constants.MODE_INFINITE)) {
51        board = new InfiniteGameBoard();
52        board.setActionContainer(new ActionContainer(resourceContainer, board, false));
53        gameLogic = new InfiniteGameLogic();
54        level = resourceContainer.getInfiniteLevels().get(INFINITE_MODE_START_LEVEL - 1);
55        level.getAccumulatedCombinations().clear();
56        level.getAccumulatedCombinations().addAll(level.getCombinations());
57      }
58  
59      gameLogic.setResourceContainer(resourceContainer);
60      gameLogic.setBoard(board);
61      gameLogic.setLevel(level);
62      gameLogic.init();
63  
64      board.setResourceContainer(resourceContainer);
65      board.setGameLogic(gameLogic);
66      // init the current level on the board
67      board.initLevel(level);
68  
69      // ActionFadeBullets actionFadeBullets = new
70      // ActionFadeBullets(Bullet.State.FADEIN);
71      // actionFadeBullets.setResourceContainer(getResourceContainer());
72      // actionFadeBullets.getBulletList().add(board.getBulletList().get(0));
73      // actionFadeBullets.init();
74      // board.getActionContainer().addAction(actionFadeBullets);
75  
76      // undo button
77      addButtonToScreen(new UndoButton(this, 500, 330));
78      addButtonToScreen(new RestartButton(this, 500, 250));
79  
80      // Timer Engine
81      setFPS(60);
82    }
83  
84    @DebugConsoleAware
85    public void update(long elapsedTime) {
86      gameLogic.update(elapsedTime, this);
87  
88      getResourceContainer().getCursorSprite().setX(getMouseX());
89      getResourceContainer().getCursorSprite().setY(getMouseY());
90  
91      if (gameLogic.isGameFinished() == true) {
92        if (getMode().equals(Constants.MODE_PUZZLE)) {
93          // Status des Levels noch aktualisieren
94          puzzleLevelState.setLevelSolved(puzzleLevelState.getCurrentlySelectedLevel(), gameLogic.isGameSolved());
95          setNextScreen(Screen.LEVEL);
96        } else if (getMode().equals(Constants.MODE_INFINITE)) {
97          setNextScreen(Screen.START);
98        }
99        finish();
100     }
101 
102     super.update(elapsedTime);
103   }
104 
105   @DebugConsoleAware
106   public void render(Graphics2D graphics) {
107     // hier kann eigentlich am schluss der mauscursor gerendert werden !!
108     gameLogic.render(graphics, this);
109 
110     // render the buttons only in puzzle mode
111     if (mode.equals(Constants.MODE_PUZZLE)) {
112       getFramework().render(graphics);
113     }
114 
115     getResourceContainer().getCursorSprite().render(graphics);
116   }
117 
118   public Integer getMode() {
119     return mode;
120   }
121 
122   public void setMode(Integer mode) {
123     this.mode = mode;
124   }
125 
126   public AbstractGameLogic getGameLogic() {
127     return gameLogic;
128   }
129 
130   public AbstractGameBoard getBoard() {
131     return board;
132   }
133 
134   public void setPuzzleLevelState(PuzzleLevelState puzzleLevelState) {
135     this.puzzleLevelState = puzzleLevelState;
136   }
137 
138 }