root/src/top.py @ 282

Revision 282, 5.4 KB (checked in by mmorton, 2 years ago)
Line 
1'''
2Created on Mar 24, 2012
3
4@author: TechTrek
5'''
6
7from globals import *
8from pygame.locals import *
9
10import dimensions
11import pygame
12import os, sys
13from gameData import GameData
14from spec import Spec
15from state import State
16
17class Top:
18    '''
19        Top handles all interactions between game logic and graphical
20        objects.
21    '''
22################################### GRAPHICS ##################################
23
24    def __init__(self,surface):
25        '''
26            Initializes Top.
27           
28            input type: none
29            return type: none
30        '''
31        self.subwindows = []
32        self.surface = surface
33        self.gameData = GameData(State(Spec()))
34       
35       
36    def event(self,e):
37        """
38            Checks if event applies to visible child windows.
39           
40            input type: pygame.event
41           
42            output type: none
43        """
44        for window in self.subwindows:
45            if window.isVisible() == True and window.event(e) == True:
46                self.subwindows.remove(window)
47                self.subwindows.insert(0,window)
48                self.resize(float(dimensions.SCREEN_W) / float(ORIG_SCREEN_W), float(dimensions.SCREEN_H) / float(ORIG_SCREEN_H))
49                self.render(self.surface)
50       
51        # if quit signal, quit
52        if e.type == QUIT:
53            pygame.quit()
54            sys.exit()
55           
56        # video resize signal occurs when dragging edge of screen
57        if e.type == VIDEORESIZE:
58           
59            # set the global values of screen width and height to the new values
60            global SCREEN_W
61            dimensions.SCREEN_W = e.w
62            global SCREEN_H
63            dimensions.SCREEN_H = e.h
64           
65            # resize all windows that currently exist so that the whole
66            # game resizes correctly.
67            for window in self.subwindows:
68                window.resize(float(e.w) / float(ORIG_SCREEN_W), float(e.h) / float(ORIG_SCREEN_H))
69           
70            # rerender the screen with the new dimensions
71            screenSurface = pygame.display.set_mode((dimensions.SCREEN_W,dimensions.SCREEN_H),RESIZABLE)                   
72            screenSurface.fill(BLACK)
73            self.render(screenSurface)
74               
75    def render(self, surface):
76        """
77            draws contents to surface; order of render is rectangles, images
78            and then text
79
80            input type: pygame.Surface
81            return type: None
82        """
83        for window in reversed(self.subwindows):
84            window.render(surface)
85        pygame.display.update()
86           
87    def resize(self, xScale, yScale):
88        """
89            resize the window based on new dimension
90
91            input type: (int, int)
92            return type: None
93        """
94        for window in self.subwindows:
95            window.resize(xScale, yScale)
96           
97    def update(self,state):
98        """
99            takes in a state and updates window as neccesary.
100           
101            input type: state
102            return type: none
103        """
104        for window in self.subwindows:
105            window.update(state)
106           
107    def addWindow(self,window):
108        """
109            adds a window to the list of subwindows.
110           
111            input type: Window
112            return type: none
113        """
114        self.subwindows.append(window)
115       
116################################### GAME LOGIC ################################
117   
118    def endTurn(self):
119        """
120            undoes all actions from the current turn.
121           
122            input type: none
123            return type: none
124        """
125        self.gameData.endTurn()
126       
127    def deleteBuilding(self,blockNumber,indexNumber):
128        """
129            deletes the current building from the map.
130           
131            input type: blockNumber(int), indexNumber(int)
132            return type: none
133        """
134        self.gameData.deleteBuilding(blockNumber,indexNumber)
135       
136    def getBlockBuildings(self,blockNumber):
137        """
138            returns the images associated with the buildings that exist in the
139            designated block.
140           
141            input type: blockNumber(int)
142            return type: none
143        """
144        return self.gameData.getBlockBuildings(blockNumber)
145   
146    def build(self,building):
147        """
148            first, checks that there is room in the current block, then builds the building.
149           
150            input type: building(str)
151            return type: none
152        """
153        for window in self.subwindows:
154            if type(window) == map:
155                blockNumber = window.currentBlock
156        if self.gameData.blockHasSpace(blockNumber):
157            self.gameData.build(building,blockNumber)
158
159    def research(self,researchType,value):
160        """
161            adds research to a designated type.
162           
163            input type: type(int), value(int)
164            return type: none
165        """
166        self.gameData.research(researchType,value)
167       
168    def getSpec(self):
169        """
170            returns the spec containing values of current resources.
171           
172            input type: none
173            return type: spec
174        """
175        return self.gameData.getSpec()
176       
177       
178       
Note: See TracBrowser for help on using the browser.