root/src/scene.py @ 401

Revision 401, 5.1 KB (checked in by rthomas, 2 years ago)

added win scene and back/forward responses

Line 
1'''
2    Created on Mar 29, 2012
3
4    @author: TechTrek
5'''
6
7from pygame.locals import *
8
9from window import Window
10from still import Still
11from leftRight import LeftRight
12from globals import *
13
14
15class Scene(Window):
16    def __init__(self, pos, visible, response):
17        """
18            Initalizes a scene
19
20            input type: (int(x),int(y)), bol(visible)
21
22        """
23        Window.__init__(self, pos, visible)
24        self.currentStill = 0
25        self.numStills = 0
26        self.backResponse = 1
27        self.forwardResponse = 0
28        self.responseFunctions = response
29        if DEBUG == 0:
30            print "Response List is: ", self.responseList
31
32        left = LeftRight((10, SCREEN_H + 50),
33                          True, False)
34        left.addResponse((self.prevStill,))
35        right = LeftRight((SCREEN_W - 60, SCREEN_H + 50),
36                         True, True)
37        right.addResponse((self.nextStill,))
38
39        self.subwindows.append(left)
40        self.subwindows.append(right)
41
42    def openWindow(self):
43        """
44            Opens the scene to its first still
45
46            input type: None
47            return type: None
48        """
49        self.visible = True
50        self.currentStill = 0
51        self.subwindows[0].openWindow()
52        self.subwindows[1].openWindow()
53        self.subwindows[self.numStills - self.currentStill + 1].openWindow()
54
55    def closeWindow(self):
56        """
57            closes the open scene and reopens the game window
58        """
59        self.visible = False
60        for window in self.subwindows:
61            window.closeWindow()
62
63    def nextStill(self):
64        """
65            Moves to the previous still
66
67            input type: None
68            return type: None
69
70        """
71        if self.currentStill < self.numStills - 1:
72            self.subwindows[self.numStills - self.currentStill + 1].closeWindow()
73            self.currentStill += 1
74            self.subwindows[self.numStills - self.currentStill + 1].openWindow()
75        else:
76            print "next still last"
77            self.closeWindow()
78            self.responseFunctions.pop(self.forwardResponse)
79            self.runAddedResponses()
80
81    def prevStill(self):
82        """
83            Moves to the next still
84
85            input type: None
86            return type: None
87
88            """
89        if self.currentStill > 0:
90            self.subwindows[self.numStills - self.currentStill + 1].closeWindow()
91            self.currentStill -= 1
92            self.subwindows[self.numStills - self.currentStill + 1].openWindow()
93        else:
94            self.closeWindow()
95            self.responseFunctions.pop(self.backResponse)
96            self.runAddedResponses()
97
98    def addStill(self, still):
99        """
100            Adds a new still to the scene
101
102            input type: Still(still)
103            return type: None
104
105        """
106        self.subwindows.insert(2, still)
107        self.numStills += 1
108
109    def event(self, e):
110        """
111            Checks if event applies to visible child windows. If so, return
112            true.
113
114            Otherwise, checks if events apply to this object. If they do,
115            return true and take appropriate action.
116
117            Else, returns false.
118
119            input type: pygame.event
120
121            output type: boolean
122            """
123
124        for window in self.subwindows:
125            if window.isVisible() == True and window.event(e) == True:
126                return True
127
128        if self.response(e) == True:
129            return True
130        else:
131            return False
132
133    def response(self, e):
134        if e.type == KEYDOWN:
135            if e.key == K_LEFT:
136                self.prevStill()
137                return True
138            elif e.key == K_RIGHT:
139                self.nextStill()
140                return True
141        Window.response(self, e)
142       
143    def parseResponse(self, response):
144        print response
145        if response == "main_menu":
146            return 1
147        elif response == "game":
148            return 0
149        else:
150            return 0
151
152    def setBackResponse(self, response):
153        self.backResponse = self.parseResponse(response)
154   
155    def setForwardResponse(self, response):
156        self.forwardResponse = self.parseResponse(response)
157
158
159def loadScene(fileName, response):
160    """
161        Loads a scene from a file
162
163        input type: str(filename)
164    """
165    try:
166        sceneData = open(sceneDir + fileName + ".txt")
167    except IOError:
168        print "Error: could not open file: " + sceneDir + fileName + ".txt"
169        return False
170    else:
171        scene = Scene((0, 0), True, response)
172        backResponse = sceneData.readline().rstrip('\n')
173        scene.setBackResponse(backResponse)
174       
175        forwardResponse = sceneData.readline().rstrip('\n')
176        scene.setForwardResponse(forwardResponse)
177       
178        textLine = sceneData.readline()
179        while textLine != "":
180            print textLine
181            img = sceneData.readline()
182            img = img.rstrip('\n')
183            nextStill = Still((0, 0), False, textLine, img)
184            scene.addStill(nextStill)
185            textLine = sceneData.readline()
186
187        return scene
Note: See TracBrowser for help on using the browser.