root/src/scene.py @ 451

Revision 451, 4.7 KB (checked in by jelinson, 2 years ago)

added building interlude

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):
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
29        left = LeftRight((10, SCREEN_H + 50),
30                          True, False)
31        left.addResponse((self.prevStill,))
32        right = LeftRight((SCREEN_W - 60, SCREEN_H + 50),
33                         True, True)
34        right.addResponse((self.nextStill,))
35
36        self.subwindows.append(left)
37        self.subwindows.append(right)
38
39    def openWindow(self):
40        """
41            Opens the scene to its first still
42
43            input type: None
44            return type: None
45        """
46        self.visible = True
47        self.currentStill = 0
48        self.subwindows[0].openWindow()
49        self.subwindows[1].openWindow()
50        self.subwindows[self.numStills - self.currentStill + 1].openWindow()
51
52    def closeWindow(self):
53        """
54            closes the open scene and reopens the game window
55        """
56        self.visible = False
57        for window in self.subwindows:
58            window.closeWindow()
59
60    def nextStill(self):
61        """
62            Moves to the previous still
63
64            input type: None
65            return type: None
66
67        """
68        if self.currentStill < self.numStills - 1:
69            self.subwindows[self.numStills - self.currentStill + 1].closeWindow()
70            self.currentStill += 1
71            self.subwindows[self.numStills - self.currentStill + 1].openWindow()
72        else:
73            self.closeWindow()
74            self.forwardResponse()
75
76    def prevStill(self):
77        """
78            Moves to the next still
79
80            input type: None
81            return type: None
82
83            """
84        if self.currentStill > 0:
85            self.subwindows[self.numStills - self.currentStill + 1].closeWindow()
86            self.currentStill -= 1
87            self.subwindows[self.numStills - self.currentStill + 1].openWindow()
88        else:
89            self.closeWindow()
90            self.backResponse()
91
92    def addStill(self, still):
93        """
94            Adds a new still to the scene
95
96            input type: Still(still)
97            return type: None
98
99        """
100        self.subwindows.insert(2, still)
101        self.numStills += 1
102
103    def event(self, e):
104        """
105            Checks if event applies to visible child windows. If so, return
106            true.
107
108            Otherwise, checks if events apply to this object. If they do,
109            return true and take appropriate action.
110
111            Else, returns false.
112
113            input type: pygame.event
114            output type: boolean
115            """
116
117        for window in self.subwindows:
118            if window.isVisible() == True and window.event(e) == True:
119                return True
120
121        if self.response(e) == True:
122            return True
123        else:
124            return False
125
126    def response(self, e):
127        if e.type == KEYDOWN:
128            if e.key == K_LEFT:
129                self.prevStill()
130                return True
131            elif e.key == K_RIGHT or e.key == K_RETURN:
132                self.nextStill()
133                return True
134        Window.response(self, e)
135
136    def runAddedResponses(self):
137        print "Running added scene response"
138        print "Response functions: "
139        print self.responseFunctions
140        Window.runAddedResponses(self)
141
142    def setBackResponse(self, response):
143        self.backResponse = response
144
145    def setForwardResponse(self, response):
146        self.forwardResponse = response
147
148
149def loadScene(fileName, auxText=''):
150    """
151        Loads a scene from a file
152
153        input type: str(filename)
154    """
155    try:
156        sceneData = open(sceneDir + fileName + ".txt")
157    except IOError:
158        print "Error: could not open file: " + sceneDir + fileName + ".txt"
159        return False
160    else:
161        scene = Scene((0, 0), True)
162        backResponse = sceneData.readline().rstrip('\n')
163        forwardResponse = sceneData.readline().rstrip('\n')
164
165        textLine = sceneData.readline()
166        while textLine != "":
167            img = sceneData.readline()
168            img = img.rstrip('\n')
169            nextStill = Still((0, 0), False, textLine.format(auxText), img)
170            scene.addStill(nextStill)
171            textLine = sceneData.readline()
172
173        sceneData.close()
174        return (scene, backResponse, forwardResponse)
Note: See TracBrowser for help on using the browser.