root/src/scene.py @ 378

Revision 378, 4.3 KB (checked in by jelinson, 2 years ago)

implemented framework for gameData to queue and play a scene; added restore to main game screen

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