View Javadoc
1   package de.jos.game.objects.screen;
2   
3   import java.util.HashMap;
4   import java.util.Map;
5   
6   import org.apache.commons.logging.Log;
7   import org.apache.commons.logging.LogFactory;
8   import org.springframework.beans.factory.xml.XmlBeanFactory;
9   
10  import com.golden.gamedev.GameEngine;
11  import com.golden.gamedev.gui.TPanel;
12  
13  import de.jos.game.Constants;
14  import de.jos.game.objects.ResourceContainer;
15  import de.jos.game.objects.buttons.GameButton;
16  import de.jos.game.objects.buttons.PuzzleLevelButton;
17  import de.jos.game.objects.state.PuzzleLevelState;
18  import de.jos.game.objects.state.PuzzleLevelStateChangedListener;
19  
20  /***
21   * 
22   * @author root
23   * 
24   */
25  public class PuzzleLevelScreen extends MultiPageScreen implements PuzzleLevelStateChangedListener {
26  
27    private static Log LOG = LogFactory.getLog(PuzzleLevelScreen.class);
28  
29    /*** @deprecated durch puzzleLevelState ersetzen */
30    private Integer selectedLevel = null;
31  
32    private static final int LEVELS_PER_PAGE = 10;
33  
34    private static final int LEVEL_PER_ROW = 5;
35  
36    private Map<Integer, TPanel> pageIdToPanelMap = new HashMap<Integer, TPanel>();
37  
38    private final PuzzleLevelState puzzleLevelState;
39  
40    public PuzzleLevelScreen(GameEngine gameEngine, ResourceContainer resourceContainer, XmlBeanFactory xmlBeanFactory,
41        PuzzleLevelState puzzleLevelState) {
42      super(gameEngine, resourceContainer, xmlBeanFactory, Screen.START);
43      this.puzzleLevelState = puzzleLevelState;
44      this.puzzleLevelState.registerPuzzleLevelStateChangedListener(this);
45    }
46  
47    public void initResources() {
48      super.initResources();
49  
50      int numberOfLevels = Integer.parseInt(getString("numberPuzzleLevels"));
51      setNumberOfPages(((numberOfLevels - 1) / LEVELS_PER_PAGE) + 1);
52  
53      // die Panel Map erstellen und mit den Buttons befuellen
54      for (int i = 0; i < getNumberOfPages(); i++) {
55        Integer pageId = Integer.valueOf(i + 1);
56  
57        TPanel panel = new TPanel(0, 0, Constants.WINDOW_WIDTH, 300);
58        panel.UIResource().put("Background Color", Constants.DEFAULT_BACKGROUND_COLOR);
59        panel.setVisible(false);
60        getFramework().add(panel);
61  
62        // Panel in Map hinzufuegen
63        pageIdToPanelMap.put(pageId, panel);
64      }
65  
66      for (int i = 1; i <= numberOfLevels; i++) {
67        Integer level = Integer.valueOf(i);
68        Integer pageIndex = Integer.valueOf(((i - 1) / LEVELS_PER_PAGE) + 1);
69  
70        GameButton puzzleLevelButton = createGameButton(i, puzzleLevelState.isLevelSolved(level));
71  
72        getScreenButtons().add(i - 1, puzzleLevelButton);
73  
74        pageIdToPanelMap.get(pageIndex).add(puzzleLevelButton);
75      }
76  
77      // frame.add(down);
78      pageIdToPanelMap.get(Integer.valueOf(1)).setVisible(true);
79  
80      // validate ui interface -> not really neccessary
81      getFramework().validateUI();
82    }
83  
84    private GameButton createGameButton(int levelIndex, boolean solved) {
85      int indexOnPage = ((levelIndex - 1) % LEVELS_PER_PAGE);
86  
87      int x = 30 + ((indexOnPage) % LEVEL_PER_ROW) * 110;
88      int y = 100 + ((indexOnPage) / LEVEL_PER_ROW) * 100;
89  
90      GameButton puzzleLevelButton = new PuzzleLevelButton(this, x, y, levelIndex, solved);
91      return puzzleLevelButton;
92    }
93  
94    public void update(long elapsedTime) {
95      super.update(elapsedTime);
96    }
97  
98    @Override
99    public void executePagingAction() {
100     // aktuelle Panelseite auf visible setzen.
101     for (TPanel tmpPanel : pageIdToPanelMap.values()) {
102       tmpPanel.setVisible(false);
103     }
104     pageIdToPanelMap.get(Integer.valueOf(getCurrentPage())).setVisible(true);
105   }
106 
107   public Integer getSelectedLevel() {
108     return selectedLevel;
109   }
110 
111   public void setSelectedLevel(Integer selectedLevel) {
112     this.selectedLevel = selectedLevel;
113   }
114 
115   /***
116    * {@inheritDoc}
117    */
118   public void levelStateChanged(Integer level) {
119     Boolean result = puzzleLevelState.isLevelSolved(level);
120 
121     int l = level.intValue();
122 
123     GameButton puzzleLevelButton = createGameButton(level.intValue(), result.booleanValue());
124 
125     getScreenButtons().add(l - 1, puzzleLevelButton);
126     int pageIndex = ((l - 1) / LEVELS_PER_PAGE) + 1;
127 
128     pageIdToPanelMap.get(Integer.valueOf(pageIndex)).add(puzzleLevelButton);
129 
130   }
131 
132 }