root/src/main.py @ 604

Revision 604, 10.7 KB (checked in by jelinson, 2 years ago)

fixed buildmenu overlapping bu

Line 
1'''
2Created on Mar 24, 2012
3
4@author: TechTrek
5'''
6
7import sys
8import random
9#import cProfile # uncomment to test performance
10
11import pygame
12from pygame.locals import *
13#import pygame._view # uncomment to use pygame2exe.py
14
15from top import Top
16from toolbar import Toolbar
17from background import Background
18from mainMenu import MainMenu
19from stats import Stats
20from inGameMenu import InGameMenu
21from onScreenButton import OnScreenButton
22from menuEntry import MenuEntry
23import map as map_
24from mainMenuButton import MainMenuButton
25from info import Info
26from researchMenu import ResearchMenu
27from dialogue import Dialogue
28from tutorial import Tutorial
29from buildMenu import BuildMenu
30from buildMenuEntry import BuildMenuEntry
31from alert import Alert
32from upDown import UpDown
33import alertUpdateFunc
34from researchMenuEntry import ResearchMenuEntry
35from tutorialButton import TutorialButton as TutBut
36from buildables import loadAllBuildings
37from hoverDescription import HoverDescription
38from simpleButton import SimpleButton
39import strings as STR
40from dim import mainDim as DIM
41from fileio import log
42from globals import *
43from cat import *
44
45
46def initialize():
47    """
48        Returns the top object with everything fully initialized.
49
50        input type: none
51        return type: top
52    """
53    random.seed()
54    loadAllBuildings()
55
56    # surface
57    screenSurface = pygame.display.set_mode((SCREEN_W, SCREEN_H), RESIZABLE)
58    pygame.display.set_caption(STR.WINDOW_TITLE)
59    screenSurface.fill(BLACK)
60    ###########################################################################
61    # loading screen
62    loadScreen = Background((0, 0), True, 'loading', True)
63    loadScreen.event(pygame.event.Event(VIDEORESIZE, {'w': SCREEN_W,
64                                    'h': SCREEN_H}))
65    loadScreen.render(screenSurface)
66    pygame.display.update()
67    pygame.time.wait(1200)
68    ###########################################################################
69
70    top = Top(screenSurface)
71
72    gameBackground = Background(DIM.GAME_BG_POS, True, None, True)
73    ###########################################################################
74
75    menuBackground = Background((0, 0), True, 'menuBackground')
76
77    mainMenuWindow = MainMenu((0, 0), True)
78    top.setMenuModifier(mainMenuWindow.setConfiguration)
79
80    ###########################################################################
81    # main menu screen buttons
82    newGameButton = MainMenuButton((0, 0), True, STR.MENU_NEW, 1)
83    newGameButton.addResponse((top.newGame, ))
84
85    resumeButton = MainMenuButton((0, 0), False, STR.MENU_RESUME, 0)
86    resumeButton.addResponse((top.resume,))
87
88    loadForm = Dialogue(STR.LOAD_SAVE_MSG, STR.MENU_LOAD)
89    loadForm.setYesResponse((top.loadGame, loadForm.getValue))
90
91    loadButton = MainMenuButton((0, 0), True, STR.MENU_LOAD, 2)
92    loadButton.addResponse((loadButton.openSubwindow,))
93    loadButton.addWindow(loadForm)
94
95    saveForm = Dialogue(STR.LOAD_SAVE_MSG, STR.MENU_SAVE, STR.SAVED)
96    saveForm.setYesResponse((top.saveGame, saveForm.getValue))
97    saveForm.setYesResponse((saveForm.close,))
98    saveButton = MainMenuButton((0, 0), False, STR.MENU_SAVE, 3)
99    saveButton.addWindow(saveForm)
100    saveButton.addResponse((saveButton.openSubwindow,))
101
102    quitButton = MainMenuButton((0, 0), True, STR.MENU_QUIT, 4)
103    quitButton.addResponse((top.quitWarning,))
104
105    mainMenuWindow.addWindow(newGameButton)
106    mainMenuWindow.addWindow(resumeButton)
107    mainMenuWindow.addWindow(loadButton)
108    mainMenuWindow.addWindow(saveButton)
109    mainMenuWindow.addWindow(quitButton)
110    mainMenuWindow.update(None)
111
112    menuBackground.addWindow(mainMenuWindow)
113
114    ###########################################################################
115    # build and research buttons
116    rButton = OnScreenButton(DIM.RESEARCH_POS, True, STR.RESEARCH.upper(), False)
117    rButtonIn = OnScreenButton(DIM.RESEARCH_POS, False, STR.RESEARCH.upper(), True)
118
119    rButton.addWindow(rButtonIn)
120
121    bButton = OnScreenButton(DIM.BUILD_POS, True, STR.BUILD.upper(), False)
122    bButtonIn = OnScreenButton(DIM.BUILD_POS, False, STR.BUILD.upper(), True)
123
124    bButton.addWindow(bButtonIn)
125
126    ###########################################################################
127    # building category menu
128    bCatMenu = InGameMenu(DIM.CAT_MENU, False, (bButtonIn.close,))
129
130    bTutList = []
131    for i, cat in enumerate(CAT_LUT):
132        bMenu2 = BuildMenu(DIM.CAT_MENU, False, i, top.build,
133                                         (bButtonIn.close,))
134        bTutList.append(bMenu2)
135
136        buildInfo = Info(cat, buildCatDescrip[i], buttonDir + cat)
137        bMenuButton = MenuEntry((DIM.ENTRY_L, DIM.ENTRY_T + ENTRY_SHIFT * i),
138                                False, buildInfo)
139        bMenuButton.addResponse((bMenu2.open,))
140        bMenuButton.addResponse((bCatMenu.toggleHidden,))
141        bMenu2.setBackResponse((bCatMenu.toggleHidden,))
142        bMenuButton.addWindow(bMenu2)
143        bCatMenu.addWindow(bMenuButton)
144
145    ###########################################################################
146    # research category menu
147    rCatMenu = ResearchMenu(DIM.CAT_MENU, False, top.research,
148                                                (rButtonIn.close,))
149
150    ###########################################################################
151
152    toolbarBack = Toolbar((0, 0), True, 'toolbar_background')
153
154    # responses for research and build buttons
155    rButton.addResponse((rButtonIn.open,))
156    rButton.addResponse((bButtonIn.close,))
157    rButton.hoverDescription = HoverDescription(STR.RESEARCH_HOVER)
158
159    rButtonIn.addWindow(rCatMenu)
160    rButtonIn.addResponse((rButtonIn.close,))
161    rButtonIn.addResponse((rButton.open,))
162    rButtonIn.addResponse((rCatMenu.toggleVisible,))
163
164    rButtonIn.hoverDescription = HoverDescription(STR.RESEARCH_HOVER)
165
166    bButton.addResponse((bButtonIn.open,))
167    bButton.addResponse((rButtonIn.close,))
168    bButton.hoverDescription = HoverDescription(STR.BUILD_HOVER)
169
170    bButtonIn.addWindow(bCatMenu)
171    bButtonIn.addResponse((bButtonIn.close,))
172    bButtonIn.addResponse((bButton.open,))
173    bButtonIn.addResponse((bCatMenu.toggleVisible,))
174    bButtonIn.hoverDescription = HoverDescription(STR.BUILD_HOVER)
175    # end turn button
176    endTurnButton = OnScreenButton(DIM.END_POS, True, 'END TURN')
177
178    endTurnResponses = [(top.endTurn,),
179                       (top.update, top.gameData.currentState)]
180    endTurnAlert = Alert(DIM.ALERT_POS, False, '', endTurnResponses)
181    endTurnAlert.defineUpdate(alertUpdateFunc.endUpdate)
182    endTurnButton.addResponse((endTurnAlert.open, ))
183    endTurnButton.addWindow(endTurnAlert)
184
185    endTurnButton.hoverDescription = HoverDescription(STR.END_TURN_HOVER)
186    # undo turn button
187    undoTurnButton = OnScreenButton(DIM.UNDO_POS, True, 'UNDO TURN')
188
189    undoAlert = Alert(DIM.ALERT_POS, False, STR.UNDO_ACTIVE, [(top.undoTurn,)])
190    undoAlert.defineUpdate(alertUpdateFunc.undoUpdate)
191    undoTurnButton.addResponse((undoAlert.open, ))
192    undoTurnButton.addWindow(undoAlert)
193    undoTurnButton.hoverDescription = HoverDescription(STR.UNDO_HOVER)
194    # main menu button
195    menuButton = OnScreenButton(DIM.MENU_POS, True, 'MAIN MENU')
196    menuButton.addResponse((top.menu, False))
197
198    menuButton.hoverDescription = HoverDescription(STR.MAIN_MENU_HOVER)
199
200    ###########################################################################
201
202    newMap = map_.Map(DIM.MAP_POS, True, top.deleteBuilding,
203                      (top.mainScreen,))
204
205    ###########################################################################
206
207    statsWindow = Stats((0, 0), True, top.getSpec())
208
209    ###########################################################################
210
211    top.addMenuWindow(menuBackground)
212    toolbarBack.addWindow(menuButton)
213    toolbarBack.addWindow(bButton)
214    toolbarBack.addWindow(rButton)
215    toolbarBack.addWindow(undoTurnButton)
216    toolbarBack.addWindow(endTurnButton)
217    toolbarBack.addResponse((top.mainScreen,))
218    gameBackground.addWindow(toolbarBack)
219    gameBackground.addWindow(statsWindow)
220    gameBackground.addWindow(newMap)
221
222    ###########################################################################
223    # Setup tutorial
224    tutorial = Tutorial((0, 0), True)
225
226    # Research button
227    tutorial.addWindow(TutBut(rButton))
228
229    # Research power button
230    rPowButtonIndex = rCatMenu.getElementByAttr(ResearchMenuEntry, "researchCat", POWER)
231    tutorial.addWindow(TutBut(rCatMenu.subwindows[rPowButtonIndex]))
232
233    # Research power description spinner up button
234    fakeUp = TutBut(rCatMenu.subwindows[rPowButtonIndex].getElementByAttrRecursive(UpDown, "isUp")) 
235    fakeUp.addResponse((rCatMenu.subwindows[rPowButtonIndex].updateSpinner, ))
236    tutorial.addWindow(fakeUp)
237
238    # Research power description research button
239    tutorial.addWindow(TutBut(rCatMenu.subwindows[rPowButtonIndex].getElementByAttrRecursive(SimpleButton, "affirmative")))
240
241    # Build Button
242    tutorial.addWindow(TutBut(bButton))
243
244    # Build power button
245    tutorial.addWindow(TutBut(bCatMenu.subwindows[POWER + 1]))
246
247    # Build power windmill button
248    pageOffset = bTutList[POWER].pageOffset
249    windmillIndex = bTutList[POWER].subwindows[pageOffset].getElementByAttr(BuildMenuEntry, "buildingName", "windmill")
250    tutorial.addWindow(TutBut(bTutList[POWER].subwindows[pageOffset].subwindows[windmillIndex]))
251
252    # Build power windmill description build button
253    windmillBuildButton = bTutList[POWER].subwindows[pageOffset].subwindows[windmillIndex].getElementByAttrRecursive(SimpleButton, "affirmative")
254    tutorial.addWindow(TutBut(windmillBuildButton))
255    #tutorial.addWindow(TutBut(bTutList[0].subwindows[2].subwindows[2].\
256    #                            subwindows[0].subwindows[0]))
257    # EndTurn Button
258    tutorial.addWindow(TutBut(endTurnButton))
259
260    top.addTutorialWindow(tutorial)
261
262    top.addGameWindow(gameBackground)
263
264    ###########################################################################
265
266    top.event(pygame.event.Event(VIDEORESIZE, {'w': SCREEN_W,
267                                                  'h': SCREEN_H}))
268    top.render(screenSurface)
269
270    pygame.display.update()
271    return top
272
273
274def main():
275    # initialize pygame modules
276    pygame.init()
277    if not pygame.display.get_init():
278        log.error("Could not initialize display; quitting")
279        pygame.quit()
280        sys.exit()
281
282    # initialize our game
283    top = initialize()
284
285    # run our game!
286    while True:
287        for e in pygame.event.get():
288            top.event(e)
289        pygame.time.wait(10)
290
291
292if __name__ == '__main__':
293    main()
294    #cProfile.run('main()')
Note: See TracBrowser for help on using the browser.