root/src/scene.py @ 575

Revision 575, 5.0 KB (checked in by ecoughlan, 2 years ago)

DIM files and unused imports

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 fileio import loadText
13from dim import sceneDim as DIM
14from globals import sceneDir
15
16
17class Scene(Window):
18    def __init__(self, pos, visible):
19        """
20            Initalizes a scene
21
22            input type: (int(x),int(y)), bool(visible)
23        """
24        Window.__init__(self, pos, visible)
25        self.currentStill = 0
26        self.numStills = 0
27        self.backResponse = 1
28        self.forwardResponse = 0
29
30        left = LeftRight(DIM.LEFT_POS, True, False)
31        left.addResponse((self.prevStill,))
32        right = LeftRight(DIM.RIGHT_POS, True, True)
33        right.addResponse((self.nextStill,))
34
35        self.addWindow(left)
36        self.addWindow(right)
37
38    def open(self):
39        """
40            Opens the scene to its first still
41
42            input type: None
43            return type: None
44        """
45        self.visible = True
46        self.currentStill = 0
47        self.subwindows[0].open()
48        self.subwindows[1].open()
49        self.subwindows[self.numStills - self.currentStill + 1].open()
50
51    def close(self):
52        """
53            closes the open scene and reopens the game window
54           
55            input type: none
56            return type: none
57        """
58        self.visible = False
59        for window in self.subwindows:
60            window.close()
61
62    def nextStill(self):
63        """
64            Moves to the previous still
65
66            input type: None
67            return type: None
68        """
69        if self.currentStill < self.numStills - 1:
70            self.subwindows[self.numStills - self.currentStill + 1].close()
71            self.currentStill += 1
72            self.subwindows[self.numStills - self.currentStill + 1].open()
73        else:
74            self.close()
75            self.forwardResponse()
76
77    def prevStill(self):
78        """
79            Moves to the next still
80
81            input type: None
82            return type: None
83        """
84        if self.currentStill > 0:
85            self.subwindows[self.numStills - self.currentStill + 1].close()
86            self.currentStill -= 1
87            self.subwindows[self.numStills - self.currentStill + 1].open()
88        else:
89            self.close()
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        self.subwindows.insert(2, still)
100        self.numStills += 1
101
102    def event(self, e):
103        """
104            Checks if event applies to visible child windows. If so, return
105            true.
106
107            Otherwise, checks if events apply to this object. If they do,
108            return true and take appropriate action.
109
110            Else, returns false.
111           
112            Does not reorder scenes.
113
114            input type: pygame.event
115            output type: boolean
116            """
117
118        for window in self.subwindows:
119            if window.isVisible() == True and window.event(e) == True:
120                return True
121
122        if self.response(e) == True:
123            return True
124        else:
125            return False
126
127    def response(self, e):
128        """
129            custom response which allows for left/right key presses
130            as well as the return key
131           
132            input type: pygame.event(e)
133            return type: bool
134        """
135        if e.type == KEYDOWN:
136            if e.key == K_LEFT:
137                self.prevStill()
138                return True
139            elif e.key == K_RIGHT or e.key == K_RETURN:
140                self.nextStill()
141                return True
142        return Window.response(self, e)
143
144    def setBackResponse(self, response):
145        """
146            sets the response for the back button at the end of a Scene
147           
148            input type: function pointer(response)
149            return type: none
150        """
151        self.backResponse = response
152
153    def setForwardResponse(self, response):
154        """
155            sets the response for the next button at the beginning of a scene
156
157            input type: function pointer(response)
158            return type: none
159        """
160        self.forwardResponse = response
161
162
163def loadScene(fileName, auxText=''):
164    """
165        Loads a scene from a file
166
167        input type: str(filename)
168        return type: (Scene(scene), str(backResponse), str(forwardResponse))
169    """
170    sceneData = loadText(sceneDir + fileName + ".txt", False)
171    scene = Scene((0, 0), True)
172    backResponse = sceneData.readline().rstrip()
173    forwardResponse = sceneData.readline().rstrip()
174
175    textLine = sceneData.readline()
176    while textLine != "":
177        img = sceneData.readline()
178        img = img.rstrip('\n')
179        nextStill = Still((0, 0), False, textLine.format(auxText), img)
180        scene.addStill(nextStill)
181        textLine = sceneData.readline()
182
183    sceneData.close()
184    return (scene, backResponse, forwardResponse)
Note: See TracBrowser for help on using the browser.