comparison orpg/mapper/fog.py @ 135:dcf4fbe09b70 beta

Traipse Beta 'OpenRPG' {091010-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 (Beta) Added Bookmarks Fix to Remote Admin Commands Minor fix to text based Server Fix to Pretty Print, from Core Fix to Splitter Nodes not being created Fix to massive amounts of images loading, from Core Added 'boot' command to remote admin Added confirmation window for sent nodes Minor changes to allow for portability to an OpenSUSE linux OS Miniatures Layer pop up box allows users to turn off Mini labels, from FlexiRPG Zoom Mouse plugin added Images added to Plugin UI Switching to Element Tree Map efficiency, from FlexiRPG Added Status Bar to Update Manager default_manifest.xml renamed to default_upmana.xml Cleaner clode for saved repositories New TrueDebug Class in orpg_log (See documentation for usage) Mercurial's hgweb folder is ported to upmana **Pretty important update that can help remove thousands of dead children from your gametree. **Children, <forms />, <group_atts />, <horizontal />, <cols />, <rows />, <height />, etc... are all tags now. Check your gametree and look for dead children!! **New Gamtree Recusion method, mapping, and context sensitivity. !!Alpha - Watch out for infinite loops!!
author sirebral
date Tue, 10 Nov 2009 14:11:28 -0600
parents f38df4bf9715
children 54446a995007 e842a5f1b775
comparison
equal deleted inserted replaced
101:394ebb3b6a0f 135:dcf4fbe09b70
80 class fog_layer(layer_base): 80 class fog_layer(layer_base):
81 def __init__(self, canvas): 81 def __init__(self, canvas):
82 self.canvas = canvas 82 self.canvas = canvas
83 self.log = component.get('log') 83 self.log = component.get('log')
84 layer_base.__init__(self) 84 layer_base.__init__(self)
85 self.color = wx.Color(128,128,128) 85 self.color = wx.Color(128, 128, 128)
86 if "__WXGTK__" not in wx.PlatformInfo: self.color = wx.Color(128,128,128, 128) 86 #if "__WXGTK__" not in wx.PlatformInfo: self.color = wx.Color(128,128,128, 128)
87 self.fogregion = wx.Region() 87 self.fogregion = wx.Region()
88 self.fogregion.Clear() 88 self.fogregion.Clear()
89 self.fog_bmp = None 89 self.fog_bmp = None
90 self.width = 0 90 self.width = 0
91 self.height = 0 91 self.height = 0
114 114
115 def recompute_fog(self): 115 def recompute_fog(self):
116 if not self.use_fog: 116 if not self.use_fog:
117 return 117 return
118 size = self.canvas.size 118 size = self.canvas.size
119 self.width = size[0]/COURSE+1 119 self.width = size[0]
120 self.height = size[1]/COURSE+1 120 self.height = size[1]
121 self.fog_bmp = wx.EmptyBitmap(self.width+2,self.height+2) 121 self.fog_bmp = wx.EmptyBitmap(self.width,self.height)
122 self.fill_fog() 122 self.fill_fog()
123 123
124 def fill_fog(self): 124 def fill_fog(self):
125 if not self.use_fog: 125 if not self.use_fog:
126 return 126 return
127 if "__WXGTK__" in wx.PlatformInfo: 127 mdc = wx.MemoryDC()
128 mdc = wx.MemoryDC() 128 mdc.SelectObject(self.fog_bmp)
129 mdc.SelectObject(self.fog_bmp) 129 mdc.SetPen(wx.TRANSPARENT_PEN)
130 mdc.SetPen(wx.TRANSPARENT_PEN) 130 if (self.canvas.frame.session.role == "GM"): color = self.color
131 if (self.canvas.frame.session.role == "GM"): color = self.color 131 else: color = wx.BLACK
132 else: color = wx.BLACK 132 self.last_role = self.canvas.frame.session.role
133 self.last_role = self.canvas.frame.session.role 133 mdc.SetBrush(wx.Brush(color,wx.SOLID))
134 mdc.SetBrush(wx.Brush(color,wx.SOLID)) 134 mdc.DestroyClippingRegion()
135 mdc.DestroyClippingRegion() 135 mdc.DrawRectangle(0, 0, self.width+2, self.height+2)
136 mdc.SetBrush(wx.Brush(wx.WHITE, wx.SOLID))
137 if self.fogregion.GetBox().GetWidth()>0:
138 mdc.SetClippingRegionAsRegion(self.fogregion)
136 mdc.DrawRectangle(0, 0, self.width+2, self.height+2) 139 mdc.DrawRectangle(0, 0, self.width+2, self.height+2)
137 mdc.SetBrush(wx.Brush(wx.WHITE, wx.SOLID)) 140 mdc.SelectObject(wx.NullBitmap)
138 if self.fogregion.GetBox().GetWidth()>0: 141 del mdc
139 mdc.SetClippingRegionAsRegion(self.fogregion)
140 mdc.DrawRectangle(0, 0, self.width+2, self.height+2)
141 mdc.SelectObject(wx.NullBitmap)
142 del mdc
143 142
144 def layerDraw(self, dc, topleft, size): 143 def layerDraw(self, dc, topleft, size):
145 if self.fog_bmp == None or not self.fog_bmp.Ok() or not self.use_fog: 144 if self.fog_bmp == None or not self.fog_bmp.Ok() or not self.use_fog:
146 return 145 return
147 if self.last_role != self.canvas.frame.session.role: self.fill_fog() 146 if self.last_role != self.canvas.frame.session.role: self.fill_fog()
148 if "__WXGTK__" not in wx.PlatformInfo: 147
149 gc = wx.GraphicsContext.Create(dc) 148 mdc = wx.MemoryDC()
150 gc.SetBrush(wx.Brush(wx.BLACK)) 149 mdc.SelectObject(self.fog_bmp)
151 if (self.canvas.frame.session.role == "GM"): 150 dc.Blit(0, 0, self.canvas.size[0], self.canvas.size[1], mdc, 0, 0, wx.AND)
152 gc.SetBrush(wx.Brush(self.color)) 151 mdc.SelectObject(wx.NullBitmap)
153 rgn = wx.Region(0, 0, self.canvas.size[0]+2, self.canvas.size[1]+2) 152 del mdc
154 if not self.fogregion.IsEmpty(): rgn.SubtractRegion(self.fogregion)
155 gc.ClipRegion(rgn)
156 gc.DrawRectangle(0, 0, self.canvas.size[0]+2, self.canvas.size[1]+2)
157 else:
158 sc = dc.GetUserScale()
159 bmp = wx.EmptyBitmap(size[0],size[1])
160 mdc = wx.MemoryDC()
161 mdc.BeginDrawing()
162 mdc.SelectObject(bmp)
163 mdc.SetPen(wx.TRANSPARENT_PEN)
164 mdc.SetBrush(wx.Brush(wx.WHITE, wx.SOLID))
165 mdc.DrawRectangle(0,0,size[0],size[1])
166 srct = [int(topleft[0]/(sc[0]*COURSE)), int(topleft[1]/(sc[1]*COURSE))]
167 srcsz = [int((int(size[0]/COURSE+1)*COURSE)/(sc[0]*COURSE))+2,
168 int((int(size[1]/COURSE+1)*COURSE)/(sc[1]*COURSE))+2]
169 if (srct[0]+srcsz[0] > self.width): srcsz[0] = self.width-srct[0]
170 if (srct[1]+srcsz[1] > self.height): srcsz[1] = self.height-srct[1]
171 img = wx.ImageFromBitmap(self.fog_bmp).GetSubImage(wx.Rect(srct[0], srct[1], srcsz[0], srcsz[1]))
172 img.Rescale(srcsz[0]*COURSE*sc[0], srcsz[1]*COURSE*sc[1])
173 fog = wx.BitmapFromImage(img)
174 mdc.SetDeviceOrigin(-topleft[0], -topleft[1])
175 mdc.DrawBitmap(fog, srct[0]*COURSE*sc[0], srct[1]*COURSE*sc[1])
176 mdc.SetDeviceOrigin(0,0)
177 mdc.SetUserScale(1,1)
178 mdc.EndDrawing()
179 dc.SetUserScale(1,1)
180 dc.Blit(topleft[0], topleft[1], size[0], size[1], mdc,0,0,wx.AND)
181 dc.SetUserScale(sc[0],sc[1])
182 mdc.SelectObject(wx.NullBitmap)
183 del mdc
184 153
185 def createregn2(self, polyline, mode, show): 154 def createregn2(self, polyline, mode, show):
186 regn = self.scanConvert(polyline) 155 regn = self.scanConvert(polyline)
187 area = "" 156 area = ""
188 for i in polyline: 157 for i in polyline:
196 self.add_area(area, show) 165 self.add_area(area, show)
197 else: 166 else:
198 if not self.fogregion.IsEmpty(): 167 if not self.fogregion.IsEmpty():
199 self.fogregion.SubtractRegion(regn) 168 self.fogregion.SubtractRegion(regn)
200 else: 169 else:
201 self.fogregion = wx.Region(0, 0, self.canvas.size[0]+2, self.canvas.size[1]+2) 170 self.fogregion = wx.Region(0, 0, self.canvas.size[0], self.canvas.size[1])
202 self.fogregion.SubtractRegion(regn) 171 self.fogregion.SubtractRegion(regn)
203 self.del_area(area, show) 172 self.del_area(area, show)
204 173
205 def createregn(self, polyline, mode, show="Yes"): 174 def createregn(self, polyline, mode, show="Yes"):
206 if not self.use_fog and mode == 'del': 175 if not self.use_fog and mode == 'del':
214 regn = wx.Region() 183 regn = wx.Region()
215 regn.Clear() 184 regn.Clear()
216 list = IRegion().scan_Convert(polypt) 185 list = IRegion().scan_Convert(polypt)
217 for i in list: 186 for i in list:
218 if regn.IsEmpty(): 187 if regn.IsEmpty():
219 if "__WXGTK__" not in wx.PlatformInfo: regn = wx.Region(i.left*COURSE, i.y*COURSE, 188 #if "__WXGTK__" not in wx.PlatformInfo:
220 i.right*COURSE+1-i.left*COURSE, 1*COURSE) 189 regn = wx.Region(i.left*COURSE, i.y*COURSE, i.right*COURSE+1-i.left*COURSE, 1*COURSE)
221 else: regn = wx.Region(i.left, i.y, i.right+1-i.left, 1) 190 #else: regn = wx.Region(i.left, i.y, i.right+1-i.left, 1)
222 else: 191 else:
223 if "__WXGTK__" not in wx.PlatformInfo: regn.Union(i.left*COURSE, i.y*COURSE, 192 #if "__WXGTK__" not in wx.PlatformInfo:
224 i.right*COURSE+1-i.left*COURSE, 1*COURSE) 193 regn.Union(i.left*COURSE, i.y*COURSE, i.right*COURSE+1-i.left*COURSE, 1*COURSE)
225 else: regn.Union(i.left, i.y, i.right+1-i.left, 1) 194 #else: regn.Union(i.left, i.y, i.right+1-i.left, 1)
226 return regn 195 return regn
227 196
228 def add_area(self, area="", show="Yes"): 197 def add_area(self, area="", show="Yes"):
229 poly = FogArea(area, self.log) 198 poly = FogArea(area, self.log)
230 xml_str = "<map><fog>" 199 xml_str = "<map><fog>"
244 return "" 213 return ""
245 fog_string = "" 214 fog_string = ""
246 ri = wx.RegionIterator(self.fogregion) 215 ri = wx.RegionIterator(self.fogregion)
247 if not (ri.HaveRects()): fog_string = FogArea("all", self.log).toxml("del") 216 if not (ri.HaveRects()): fog_string = FogArea("all", self.log).toxml("del")
248 while ri.HaveRects(): 217 while ri.HaveRects():
249 if "__WXGTK__" not in wx.PlatformInfo: 218 #if "__WXGTK__" not in wx.PlatformInfo:
250 x1 = ri.GetX()/COURSE 219 x1 = ri.GetX()/COURSE
251 x2 = x1+(ri.GetW()/COURSE)-1 220 x2 = x1+(ri.GetW()/COURSE)-1
252 y1 = ri.GetY()/COURSE 221 y1 = ri.GetY()/COURSE
253 y2 = y1+(ri.GetH()/COURSE)-1 222 y2 = y1+(ri.GetH()/COURSE)-1
254 else: 223 #else:
255 x1 = ri.GetX() 224 # x1 = ri.GetX()
256 x2 = x1+ri.GetW()-1 225 # x2 = x1+ri.GetW()-1
257 y1 = ri.GetY() 226 # y1 = ri.GetY()
258 y2 = y1+ri.GetH()-1 227 # y2 = y1+ri.GetH()-1
259 poly = FogArea(str(x1) + "," + str(y1) + ";" + 228 poly = FogArea(str(x1) + "," + str(y1) + ";" +
260 str(x2) + "," + str(y1) + ";" + 229 str(x2) + "," + str(y1) + ";" +
261 str(x2) + "," + str(y2) + ";" + 230 str(x2) + "," + str(y2) + ";" +
262 str(x1) + "," + str(y2), self.log) 231 str(x1) + "," + str(y2), self.log)
263 fog_string += poly.toxml(action) 232 fog_string += poly.toxml(action)