1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 from fife import fife
19
20 from fife.extensions.loaders import loadMapFile
21 from scripts.common.utils import loadSettings
22
23
24 Settings = loadSettings()
25
26 -class GameMap(fife.MapChangeListener):
27 """Map class used to flag changes in the map"""
29
30 fife.MapChangeListener.__init__(self)
31 self.map = None
32 self.engine = engine
33 self.model = model
34
35
36 self.my_cam_id = None
37 self.cameras = {}
38 self.agent_layer = None
39 self.top_layer = None
40 self.fife_model = engine.getModel()
41 self.transitions = []
42 self.cur_cam2_x = 0
43 self.initial_cam2_x = 0
44 self.cam2_scrolling_right = True
45 self.target_rotation = 0
46 self.outline_renderer = None
47
49 """Reset the model to default settings.
50 @return: None"""
51
52 if self.map:
53 self.model.deleteObjects()
54 self.model.deleteMap(self.map)
55 self.transitions = []
56 self.map = None
57 self.agent_layer = None
58 self.top_layer = None
59
60
61
62 self.initial_cam2_x = 0
63 self.cam2_scrolling_right = True
64
65 self.cur_cam2_x = 0
66 self.target_rotation = 0
67 self.outline_renderer = None
68
70 """Makes this map the active one.
71 @return: None"""
72 self.cameras[self.my_cam_id].setEnabled(True)
73
74 - def load(self, filename):
75 """Load a map given the filename.
76 @type filename: String
77 @param filename: Name of map to load
78 @return: None"""
79 self.reset()
80 self.map = loadMapFile(filename, self.engine)
81 self.agent_layer = self.map.getLayer('ObjectLayer')
82 self.top_layer = self.map.getLayer('TopLayer')
83
84
85 size = len('TransitionLayer')
86 for layer in self.map.getLayers():
87
88 if(layer.getId()[:size] == 'TransitionLayer'):
89 self.transitions.append(self.map.getLayer(layer.getId()))
90
91 """ Initialize the camera.
92 Note that if we have more than one camera in a map file
93 we will have to rework how self.my_cam_id works. To make sure
94 the proper camera is set as the 'main' camera.
95 At this point we also set the viewport to the current resolution."""
96 for cam in self.map.getCameras():
97 width = self.engine.getSettings().getScreenWidth()
98 height = self.engine.getSettings().getScreenHeight()
99 viewport = fife.Rect(0, 0, width, height)
100 cam.setViewPort(viewport)
101 self.my_cam_id = cam.getId()
102 self.cameras[self.my_cam_id] = cam
103 cam.resetRenderers()
104
105 self.target_rotation = self.cameras[self.my_cam_id].getRotation()
106
107 self.outline_renderer = fife.InstanceRenderer.\
108 getInstance(
109 self.cameras[
110 self.my_cam_id
111 ])
112
113
114 rend = fife.FloatingTextRenderer.getInstance(self.cameras[
115 self.my_cam_id
116 ])
117 text = self.engine.getGuiManager().\
118 createFont('fonts/rpgfont.png', 0, \
119 Settings.get("FIFE", "FontGlyphs"))
120 rend.changeDefaultFont(text)
121 rend.activateAllLayers(self.map)
122 rend.setEnabled(True)
123
124
125 rend = self.cameras['map_camera'].getRenderer('GridRenderer')
126 rend.activateAllLayers(self.map)
127
128
129 rend = fife.CoordinateRenderer.getInstance(self.cameras[
130 self.my_cam_id
131 ])
132 rend.setColor(0, 0, 0)
133 rend.addActiveLayer(self.map.getLayer("GroundLayer"))
134
135
136 self.model.active_map = self
137
144
146 """Enable or disable a renderer.
147 @return: None"""
148 renderer = self.cameras[self.my_cam_id].getRenderer(str(r_name))
149 renderer.setEnabled(not renderer.isEnabled())
150
152 """Returns wheter the map is currentply paused or not"""
153
154 return not self.map.getTimeMultiplier() >= 1.0
155
156 - def pause(self, paused):
157 """ Pause/Unpause the game.
158 @return: nothing"""
159 if paused:
160 self.map.setTimeMultiplier(0.0)
161 if not paused and self.isPaused():
162 self.map.setTimeMultiplier(1.0)
163
165 """ Toggle paused state.
166 @return: nothing"""
167 self.pause(not self.isPaused())
168
170 """Center the camera on the player"""
171 camera = self.cameras[self.my_cam_id]
172 player_agent = self.model.game_state.player_character.behaviour.agent
173 camera.setLocation(player_agent.getLocation())
174