root/src/main.py @ 700

Revision 700, 10.6 KB (checked in by ecoughlan, 2 years ago)

Added other icons used to new_images folder

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