diff orpg/mapper/fog_msg.py @ 0:4385a7d0efd1 grumpy-goblin

Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author sirebral
date Tue, 14 Jul 2009 16:41:58 -0500
parents
children 072ffc1d466f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/orpg/mapper/fog_msg.py	Tue Jul 14 16:41:58 2009 -0500
@@ -0,0 +1,136 @@
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#    openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: mapper/fog_msg.py
+# Author: Mark Tarrabain
+# Maintainer:
+# Version:
+#   $Id: fog_msg.py,v 1.16 2006/11/04 21:24:21 digitalxero Exp $
+#
+__version__ = "$Id: fog_msg.py,v 1.16 2006/11/04 21:24:21 digitalxero Exp $"
+
+from base_msg import *
+from region import *
+from orpg.minidom import Element
+import string
+
+class fog_msg(map_element_msg_base):
+
+    def __init__(self,reentrant_lock_object = None):
+        self.tagname = "fog"
+        map_element_msg_base.__init__(self,reentrant_lock_object)
+        self.use_fog = 0
+        self.fogregion=IRegion()
+        self.fogregion.Clear()
+
+    def get_line(self,outline,action,output_act):
+        elem = Element( "poly" )
+        if ( output_act ):
+            elem.setAttribute( "action", action )
+        if ( outline == 'all' ) or ( outline == 'none' ):
+            elem.setAttribute( "outline", outline )
+        else:
+            elem.setAttribute( "outline", "points" )
+            for pair in string.split( outline, ";" ):
+                p = string.split( pair, "," )
+                point = Element( "point" )
+                point.setAttribute( "x", p[ 0 ] )
+                point.setAttribute( "y", p[ 1 ] )
+                elem.appendChild( point )
+        str = elem.toxml()
+        elem.unlink()
+        return str
+
+    # convenience method to use if only this line is modified
+    #   outputs a <map/> element containing only the changes to this line
+    def standalone_update_text(self,update_id_string):
+        buffer = "<map id='" + update_id_string + "'>"
+        buffer += "<fog>"
+        buffer += self.get_changed_xml()
+        buffer += "</fog></map>"
+        return buffer
+
+    def get_all_xml(self,action="new",output_action=1):
+        return self.toxml(action,output_action)
+
+    def get_changed_xml(self,action="update",output_action=1):
+        return self.toxml(action,output_action)
+
+    def toxml(self,action,output_action):
+        #print "fog_msg.toxml called"
+        #print "use_fog :",self.use_fog
+        #print "output_action :",output_action
+        #print "action :",action
+        if not (self.use_fog):
+            return ""
+        fog_string = ""
+        if self.fogregion.isEmpty():
+            fog_string=self.get_line("all","del",output_action)
+        for ri in self.fogregion.GetRectList():
+            x1=ri.GetX()
+            x2=x1+ri.GetW()-1
+            y1=ri.GetY()
+            y2=y1+ri.GetH()-1
+            fog_string += self.get_line(str(x1)+","+str(y1)+";"+
+                                         str(x2)+","+str(y1)+";"+
+                                         str(x2)+","+str(y2)+";"+
+                                         str(x1)+","+str(y2),action,output_action)
+        s = "<fog"
+        if fog_string:
+            s += ">"
+            s += fog_string
+            s += "</fog>"
+        else:
+            s+="/>"
+        return s
+
+    def interpret_dom(self,xml_dom):
+        self.use_fog=1
+        #print 'fog_msg.interpret_dom called'
+        children = xml_dom._get_childNodes()
+        #print "children",children
+        for l in children:
+            action = l.getAttribute("action")
+            outline = l.getAttribute("outline")
+            #print "action/outline",action, outline
+            if (outline=="all"):
+                polyline=[]
+                self.fogregion.Clear()
+            elif (outline=="none"):
+                polyline=[]
+                self.use_fog=0
+                self.fogregion.Clear()
+            else:
+                polyline=[]
+                list = l._get_childNodes()
+                for node in list:
+                    polyline.append( IPoint().make( int(node.getAttribute("x")), int(node.getAttribute("y")) ) )
+                # pointarray = outline.split(";")
+                # for m in range(len(pointarray)):
+                #     pt=pointarray[m].split(",")
+                #     polyline.append(IPoint().make(int(pt[0]),int(pt[1])))
+            #print "length of polyline", len(polyline)
+            if (len(polyline)>2):
+                if action=="del":
+                    self.fogregion.FromPolygon(polyline,0)
+                else:
+                    self.fogregion.FromPolygon(polyline,1)
+
+    def init_from_dom(self,xml_dom):
+        self.interpret_dom(xml_dom)