Mercurial > traipse
comparison orpg/mapper/fog.py @ 18:97265586402b ornery-orc
Traipse 'OpenRPG' {090827-00}
Traipse is a distribution of OpenRPG that is designed to be easy to setup and go. Traipse also makes it easy for developers to work on code without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the code. 'Ornery-Orc''s main goal is to offer more advanced features and enhance the productivity of the user.
Update Summary:
Update Manager is now in version 0.8. While not every button works, users can now browse the different revisions and their different changesets. The code has been refined some with feature from Core added to it. A Crash report is now created if the users software crashes. Update Manager has been moved to the Traipse Suite menu item, and a Debug Console as been added as well.
author | sirebral |
---|---|
date | Thu, 27 Aug 2009 01:04:43 -0500 |
parents | 211ac836b6a0 |
children | baee049045be |
comparison
equal
deleted
inserted
replaced
17:265b987cce4f | 18:97265586402b |
---|---|
31 import traceback | 31 import traceback |
32 COURSE = 10 | 32 COURSE = 10 |
33 | 33 |
34 class FogArea: | 34 class FogArea: |
35 def __init__(self, outline, log): | 35 def __init__(self, outline, log): |
36 self.log = log | |
37 self.log.log("Enter FogArea", ORPG_DEBUG) | |
38 self.outline = outline | 36 self.outline = outline |
39 self.log.log("Exit FogArea", ORPG_DEBUG) | |
40 | 37 |
41 def set_fog_props(self, str): | 38 def set_fog_props(self, str): |
42 self.log.log("Enter FogArea->set_fog_props(self, str)", ORPG_DEBUG) | |
43 self.outline = str | 39 self.outline = str |
44 self.log.log("Exit FogArea->set_fog_props(self, str)", ORPG_DEBUG) | |
45 | 40 |
46 def points_to_elements(self, points=None): | 41 def points_to_elements(self, points=None): |
47 self.log.log("Enter FogArea->points_to_elements(self, points)", ORPG_DEBUG) | |
48 result = [] | 42 result = [] |
49 if points == None: | 43 if points == None: |
50 self.log.log("Exit FogArea->points_to_elements(self, points)", ORPG_DEBUG) | |
51 return result | 44 return result |
45 | |
52 for pairs in string.split( points, ';' ): | 46 for pairs in string.split( points, ';' ): |
53 pair = string.split( pairs, ',' ) | 47 pair = string.split( pairs, ',' ) |
54 p = Element( "point" ) | 48 p = Element( "point" ) |
55 p.setAttribute( "x", pair[0] ) | 49 p.setAttribute( "x", pair[0] ) |
56 p.setAttribute( "y", pair[1] ) | 50 p.setAttribute( "y", pair[1] ) |
57 result.append( p ) | 51 result.append( p ) |
58 self.log.log("Exit FogArea->points_to_elements(self, points)", ORPG_DEBUG) | |
59 return result | 52 return result |
60 | 53 |
61 def toxml(self, action="update"): | 54 def toxml(self, action="update"): |
62 self.log.log("Enter FogArea->toxml(self, " + action + ")", ORPG_DEBUG) | |
63 xml_str = "" | 55 xml_str = "" |
64 localOutline = self.outline | 56 localOutline = self.outline |
65 if localOutline != None and localOutline != "all" and localOutline != "none": | 57 if localOutline != None and localOutline != "all" and localOutline != "none": |
66 localOutline = "points" | 58 localOutline = "points" |
67 elem = Element( "poly" ) | 59 elem = Element( "poly" ) |
71 if localOutline == 'points': | 63 if localOutline == 'points': |
72 list = self.points_to_elements( self.outline ) | 64 list = self.points_to_elements( self.outline ) |
73 for p in list: elem.appendChild( p ) | 65 for p in list: elem.appendChild( p ) |
74 str = elem.toxml() | 66 str = elem.toxml() |
75 elem.unlink() | 67 elem.unlink() |
76 self.log.log(str, ORPG_DEBUG) | |
77 self.log.log("Exit FogArea->toxml(self, " + action + ")", ORPG_DEBUG) | |
78 return str | 68 return str |
79 elem.setAttribute( "action", action ) | 69 elem.setAttribute( "action", action ) |
80 if localOutline != None: | 70 if localOutline != None: |
81 elem.setAttribute( "outline", localOutline ) | 71 elem.setAttribute( "outline", localOutline ) |
82 if localOutline == 'points': | 72 if localOutline == 'points': |
83 list = self.points_to_elements( self.outline ) | 73 list = self.points_to_elements( self.outline ) |
84 for p in list: elem.appendChild( p ) | 74 for p in list: elem.appendChild( p ) |
85 xml_str = elem.toxml() | 75 xml_str = elem.toxml() |
86 elem.unlink() | 76 elem.unlink() |
87 self.log.log(xml_str, ORPG_DEBUG) | |
88 self.log.log("Exit FogArea->toxml(self, " + action + ")", ORPG_DEBUG) | |
89 return xml_str | 77 return xml_str |
90 | 78 |
91 class fog_layer(layer_base): | 79 class fog_layer(layer_base): |
92 def __init__(self, canvas): | 80 def __init__(self, canvas): |
93 self.canvas = canvas | 81 self.canvas = canvas |
94 self.log = self.canvas.log | |
95 self.log.log("Enter fog_layer", ORPG_DEBUG) | |
96 layer_base.__init__(self) | 82 layer_base.__init__(self) |
97 self.color = wx.Color(128,128,128) | 83 self.color = wx.Color(128,128,128) |
98 if "__WXGTK__" not in wx.PlatformInfo: self.color = wx.Color(128,128,128, 128) | 84 if "__WXGTK__" not in wx.PlatformInfo: self.color = wx.Color(128,128,128, 128) |
99 self.fogregion = wx.Region() | 85 self.fogregion = wx.Region() |
100 self.fogregion.Clear() | 86 self.fogregion.Clear() |
101 self.fog_bmp = None | 87 self.fog_bmp = None |
102 self.width = 0 | 88 self.width = 0 |
103 self.height = 0 | 89 self.height = 0 |
104 self.use_fog = False | 90 self.use_fog = False |
105 self.last_role = "" | 91 self.last_role = "" |
106 self.log.log("Exit fog_layer", ORPG_DEBUG) | |
107 | 92 |
108 def clear(self): | 93 def clear(self): |
109 self.log.log("Enter fog_layer->clear(self)", ORPG_DEBUG) | |
110 self.fogregion.Clear() | 94 self.fogregion.Clear() |
111 self.use_fog = True | 95 self.use_fog = True |
112 self.del_area("all") | 96 self.del_area("all") |
113 self.recompute_fog() | 97 self.recompute_fog() |
114 self.log.log("Exit fog_layer->clear(self)", ORPG_DEBUG) | |
115 | 98 |
116 def remove_fog(self): | 99 def remove_fog(self): |
117 self.log.log("Enter fog_layer->remove_fog(self)", ORPG_DEBUG) | |
118 self.fogregion.Clear() | 100 self.fogregion.Clear() |
119 self.use_fog = False | 101 self.use_fog = False |
120 self.del_area("all") | 102 self.del_area("all") |
121 self.add_area("none") | 103 self.add_area("none") |
122 self.fog_bmp = None | 104 self.fog_bmp = None |
123 self.log.log("Exit fog_layer->remove_fog(self)", ORPG_DEBUG) | |
124 | 105 |
125 def resize(self, size): | 106 def resize(self, size): |
126 self.log.log("Enter fog_layer->resize(self, size)", ORPG_DEBUG) | |
127 try: | 107 try: |
128 if self.width == size[0] and self.height == size[1]: | 108 if self.width == size[0] and self.height == size[1]: |
129 self.log.log("Exit fog_layer->resize(self, size)", ORPG_DEBUG) | |
130 return | 109 return |
131 self.recompute_fog() | 110 self.recompute_fog() |
132 except: pass | 111 except: pass |
133 self.log.log("Exit fog_layer->resize(self, size)", ORPG_DEBUG) | |
134 | 112 |
135 def recompute_fog(self): | 113 def recompute_fog(self): |
136 self.log.log("Enter fog_layer->recompute_fog(self)", ORPG_DEBUG) | |
137 if not self.use_fog: | 114 if not self.use_fog: |
138 self.log.log("Exit fog_layer->recompute_fog(self)", ORPG_DEBUG) | |
139 return | 115 return |
140 size = self.canvas.size | 116 size = self.canvas.size |
141 self.width = size[0]/COURSE+1 | 117 self.width = size[0]/COURSE+1 |
142 self.height = size[1]/COURSE+1 | 118 self.height = size[1]/COURSE+1 |
143 self.fog_bmp = wx.EmptyBitmap(self.width+2,self.height+2) | 119 self.fog_bmp = wx.EmptyBitmap(self.width+2,self.height+2) |
144 self.fill_fog() | 120 self.fill_fog() |
145 self.log.log("Exit fog_layer->recompute_fog(self)", ORPG_DEBUG) | |
146 | 121 |
147 def fill_fog(self): | 122 def fill_fog(self): |
148 self.log.log("Enter fog_layer->fill_fog(self)", ORPG_DEBUG) | |
149 if not self.use_fog: | 123 if not self.use_fog: |
150 self.log.log("Exit fog_layer->fill_fog(self)", ORPG_DEBUG) | |
151 return | 124 return |
152 if "__WXGTK__" in wx.PlatformInfo: | 125 if "__WXGTK__" in wx.PlatformInfo: |
153 mdc = wx.MemoryDC() | 126 mdc = wx.MemoryDC() |
154 mdc.SelectObject(self.fog_bmp) | 127 mdc.SelectObject(self.fog_bmp) |
155 mdc.SetPen(wx.TRANSPARENT_PEN) | 128 mdc.SetPen(wx.TRANSPARENT_PEN) |
163 if self.fogregion.GetBox().GetWidth()>0: | 136 if self.fogregion.GetBox().GetWidth()>0: |
164 mdc.SetClippingRegionAsRegion(self.fogregion) | 137 mdc.SetClippingRegionAsRegion(self.fogregion) |
165 mdc.DrawRectangle(0, 0, self.width+2, self.height+2) | 138 mdc.DrawRectangle(0, 0, self.width+2, self.height+2) |
166 mdc.SelectObject(wx.NullBitmap) | 139 mdc.SelectObject(wx.NullBitmap) |
167 del mdc | 140 del mdc |
168 self.log.log("Exit fog_layer->fill_fog(self)", ORPG_DEBUG) | |
169 | 141 |
170 def layerDraw(self, dc, topleft, size): | 142 def layerDraw(self, dc, topleft, size): |
171 self.log.log("Enter fog_layer->layerDraw(self, dc, topleft, size)", ORPG_DEBUG) | |
172 if self.fog_bmp == None or not self.fog_bmp.Ok() or not self.use_fog: | 143 if self.fog_bmp == None or not self.fog_bmp.Ok() or not self.use_fog: |
173 self.log.log("Exit fog_layer->layerDraw(self, dc, topleft, size)", ORPG_DEBUG) | |
174 return | 144 return |
175 if self.last_role != self.canvas.frame.session.role: self.fill_fog() | 145 if self.last_role != self.canvas.frame.session.role: self.fill_fog() |
176 if "__WXGTK__" not in wx.PlatformInfo: | 146 if "__WXGTK__" not in wx.PlatformInfo: |
177 gc = wx.GraphicsContext.Create(dc) | 147 gc = wx.GraphicsContext.Create(dc) |
178 gc.SetBrush(wx.Brush(wx.BLACK)) | 148 gc.SetBrush(wx.Brush(wx.BLACK)) |
207 dc.SetUserScale(1,1) | 177 dc.SetUserScale(1,1) |
208 dc.Blit(topleft[0], topleft[1], size[0], size[1], mdc,0,0,wx.AND) | 178 dc.Blit(topleft[0], topleft[1], size[0], size[1], mdc,0,0,wx.AND) |
209 dc.SetUserScale(sc[0],sc[1]) | 179 dc.SetUserScale(sc[0],sc[1]) |
210 mdc.SelectObject(wx.NullBitmap) | 180 mdc.SelectObject(wx.NullBitmap) |
211 del mdc | 181 del mdc |
212 self.log.log("Exit fog_layer->layerDraw(self, dc, topleft, size)", ORPG_DEBUG) | |
213 | 182 |
214 def createregn2(self, polyline, mode, show): | 183 def createregn2(self, polyline, mode, show): |
215 self.log.log("Enter fog_layer->createregn2(self, polyline, mode, show)", ORPG_DEBUG) | |
216 regn = self.scanConvert(polyline) | 184 regn = self.scanConvert(polyline) |
217 area = "" | 185 area = "" |
218 for i in polyline: | 186 for i in polyline: |
219 if (area != ""): | 187 if (area != ""): |
220 area += ";" | 188 area += ";" |
229 self.fogregion.SubtractRegion(regn) | 197 self.fogregion.SubtractRegion(regn) |
230 else: | 198 else: |
231 self.fogregion = wx.Region(0, 0, self.canvas.size[0]+2, self.canvas.size[1]+2) | 199 self.fogregion = wx.Region(0, 0, self.canvas.size[0]+2, self.canvas.size[1]+2) |
232 self.fogregion.SubtractRegion(regn) | 200 self.fogregion.SubtractRegion(regn) |
233 self.del_area(area, show) | 201 self.del_area(area, show) |
234 self.log.log("Exit fog_layer->createregn2(self, polyline, mode, show)", ORPG_DEBUG) | |
235 | 202 |
236 def createregn(self, polyline, mode, show="Yes"): | 203 def createregn(self, polyline, mode, show="Yes"): |
237 self.log.log("Enter fog_layer->createregn(self, polyline, mode, show)", ORPG_DEBUG) | |
238 if not self.use_fog and mode == 'del': | 204 if not self.use_fog and mode == 'del': |
239 self.clear() | 205 self.clear() |
240 self.canvas.Refresh(False) | 206 self.canvas.Refresh(False) |
241 if self.use_fog: | 207 if self.use_fog: |
242 self.createregn2(polyline, mode, show) | 208 self.createregn2(polyline, mode, show) |
243 self.fill_fog() | 209 self.fill_fog() |
244 self.log.log("Exit fog_layer->createregn(self, polyline, mode, show)", ORPG_DEBUG) | |
245 | 210 |
246 def scanConvert(self, polypt): | 211 def scanConvert(self, polypt): |
247 self.log.log("Enter fog_layer->scanConvert(self, polypt)", ORPG_DEBUG) | |
248 regn = wx.Region() | 212 regn = wx.Region() |
249 regn.Clear() | 213 regn.Clear() |
250 list = IRegion().scan_Convert(polypt) | 214 list = IRegion().scan_Convert(polypt) |
251 for i in list: | 215 for i in list: |
252 if regn.IsEmpty(): | 216 if regn.IsEmpty(): |
253 if "__WXGTK__" not in wx.PlatformInfo: | 217 if "__WXGTK__" not in wx.PlatformInfo: regn = wx.Region(i.left*COURSE, i.y*COURSE, |
254 regn = wx.Region(i.left*COURSE, i.y*COURSE, i.right*COURSE+1-i.left*COURSE, 1*COURSE) | 218 i.right*COURSE+1-i.left*COURSE, 1*COURSE) |
255 else: regn = wx.Region(i.left, i.y, i.right+1-i.left, 1) | 219 else: regn = wx.Region(i.left, i.y, i.right+1-i.left, 1) |
256 else: | 220 else: |
257 if "__WXGTK__" not in wx.PlatformInfo: | 221 if "__WXGTK__" not in wx.PlatformInfo: regn.Union(i.left*COURSE, i.y*COURSE, |
258 regn.Union(i.left*COURSE, i.y*COURSE, i.right*COURSE+1-i.left*COURSE, 1*COURSE) | 222 i.right*COURSE+1-i.left*COURSE, 1*COURSE) |
259 else: regn.Union(i.left, i.y, i.right+1-i.left, 1) | 223 else: regn.Union(i.left, i.y, i.right+1-i.left, 1) |
260 self.log.log("Exit fog_layer->scanConvert(self, polypt)", ORPG_DEBUG) | |
261 return regn | 224 return regn |
262 | 225 |
263 def add_area(self, area="", show="Yes"): | 226 def add_area(self, area="", show="Yes"): |
264 self.log.log("Enter fog_layer->add_area(self, area, show)", ORPG_DEBUG) | |
265 poly = FogArea(area, self.log) | 227 poly = FogArea(area, self.log) |
266 xml_str = "<map><fog>" | 228 xml_str = "<map><fog>" |
267 xml_str += poly.toxml("new") | 229 xml_str += poly.toxml("new") |
268 xml_str += "</fog></map>" | 230 xml_str += "</fog></map>" |
269 if show == "Yes": self.canvas.frame.session.send(xml_str) | 231 if show == "Yes": self.canvas.frame.session.send(xml_str) |
270 self.log.log(xml_str, ORPG_DEBUG) | |
271 self.log.log("Exit fog_layer->add_area(self, area, show)", ORPG_DEBUG) | |
272 | 232 |
273 def del_area(self, area="", show="Yes"): | 233 def del_area(self, area="", show="Yes"): |
274 self.log.log("Enter fog_layer->del_area(self, area, show)", ORPG_DEBUG) | |
275 poly = FogArea(area, self.log) | 234 poly = FogArea(area, self.log) |
276 xml_str = "<map><fog>" | 235 xml_str = "<map><fog>" |
277 xml_str += poly.toxml("del") | 236 xml_str += poly.toxml("del") |
278 xml_str += "</fog></map>" | 237 xml_str += "</fog></map>" |
279 if show == "Yes": self.canvas.frame.session.send(xml_str) | 238 if show == "Yes": self.canvas.frame.session.send(xml_str) |
280 self.log.log(xml_str, ORPG_DEBUG) | |
281 self.log.log("Exit fog_layer->del_area(self, area, show)", ORPG_DEBUG) | |
282 | 239 |
283 def layerToXML(self, action="update"): | 240 def layerToXML(self, action="update"): |
284 self.log.log("Enter fog_layer->layerToXML(self, " + action + ")", ORPG_DEBUG) | |
285 if not self.use_fog: | 241 if not self.use_fog: |
286 self.log.log("Exit fog_layer->layerToXML(self, " + action + ") return None", ORPG_DEBUG) | |
287 return "" | 242 return "" |
288 fog_string = "" | 243 fog_string = "" |
289 ri = wx.RegionIterator(self.fogregion) | 244 ri = wx.RegionIterator(self.fogregion) |
290 if not (ri.HaveRects()): fog_string = FogArea("all", self.log).toxml("del") | 245 if not (ri.HaveRects()): fog_string = FogArea("all", self.log).toxml("del") |
291 while ri.HaveRects(): | 246 while ri.HaveRects(): |
308 if fog_string: | 263 if fog_string: |
309 s = "<fog" | 264 s = "<fog" |
310 s += ">" | 265 s += ">" |
311 s += fog_string | 266 s += fog_string |
312 s += "</fog>" | 267 s += "</fog>" |
313 self.log.log(s, ORPG_DEBUG) | |
314 self.log.log("Exit fog_layer->layerToXML(self, " + action + ")", ORPG_DEBUG) | |
315 return s | 268 return s |
316 else: | 269 else: |
317 self.log.log("Exit fog_layer->layerToXML(self, " + action + ") return None", ORPG_DEBUG) | |
318 return "" | 270 return "" |
319 | 271 |
320 def layerTakeDOM(self, xml_dom): | 272 def layerTakeDOM(self, xml_dom): |
321 self.log.log("Enter fog_layer->layerTakeDOM(self, xml_dom)", ORPG_DEBUG) | |
322 try: | 273 try: |
323 if not self.use_fog: | 274 if not self.use_fog: |
324 self.use_fog = True | 275 self.use_fog = True |
325 self.recompute_fog() | 276 self.recompute_fog() |
326 if xml_dom.hasAttribute('serial'): self.serial_number = int(xml_dom.getAttribute('serial')) | 277 if xml_dom.hasAttribute('serial'): self.serial_number = int(xml_dom.getAttribute('serial')) |
348 polyline.append(IPoint().make(int(x), int(y))) | 299 polyline.append(IPoint().make(int(x), int(y))) |
349 lastx = x | 300 lastx = x |
350 lasty = y | 301 lasty = y |
351 if (len(polyline) > 1): self.createregn2(polyline, action, "No") | 302 if (len(polyline) > 1): self.createregn2(polyline, action, "No") |
352 self.fill_fog() | 303 self.fill_fog() |
353 except: self.log.log(traceback.format_exc(), ORPG_GENERAL) | 304 except: pass |
354 self.log.log("Exit fog_layer->layerTakeDOM(self, xml_dom)", ORPG_DEBUG) |