コード例 #1
0
ファイル: Xml.cs プロジェクト: NaphalAXT/RegionEditor
        public static bool ReadRectangle3D(XmlElement xml, int defaultMinZ, int defaultMaxZ, ref MapRect value, bool mandatory)
        {
            int x1 = 0, y1 = 0, x2 = 0, y2 = 0;

            if (xml.HasAttribute("x"))
            {
                if (ReadInt32(xml, "x", ref x1, mandatory)
                    & ReadInt32(xml, "y", ref y1, mandatory)
                    & ReadInt32(xml, "width", ref x2, mandatory)
                    & ReadInt32(xml, "height", ref y2, mandatory))
                {
                    x2 += x1;
                    y2 += y1;
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                if (!ReadInt32(xml, "x1", ref x1, mandatory)
                    | !ReadInt32(xml, "y1", ref y1, mandatory)
                    | !ReadInt32(xml, "x2", ref x2, mandatory)
                    | !ReadInt32(xml, "y2", ref y2, mandatory))
                {
                    return(false);
                }
            }

            int minZ = defaultMinZ;
            int maxZ = defaultMaxZ;

            ReadInt32(xml, "zmin", ref minZ, false);
            ReadInt32(xml, "zmax", ref maxZ, false);

            value = new MapRect(new Point2D(x1, y1), new Point2D(x2, y2), minZ, maxZ);

            return(true);
        }
コード例 #2
0
        public XmlElement GetXml(XmlDocument dom)
        {
            XmlElement x = dom.CreateElement("region");

            if (m_Type != string.Empty)
            {
                x.SetAttribute("type", m_Type);
            }

            if (m_Priority != 50)
            {
                x.SetAttribute("priority", m_Priority.ToString());
            }

            if (m_Name != string.Empty)
            {
                x.SetAttribute("name", m_Name);
            }

            if (m_MinZ != DefaultMinZ || m_MaxZ != DefaultMaxZ)
            {
                XmlElement xRange = dom.CreateElement("zrange");

                if (m_MinZ != DefaultMinZ)
                {
                    xRange.SetAttribute("min", m_MinZ.ToString());
                }
                if (m_MaxZ != DefaultMaxZ)
                {
                    xRange.SetAttribute("max", m_MaxZ.ToString());
                }

                x.AppendChild(xRange);
            }

            foreach (MapRect rect in m_Area)
            {
                XmlElement xRect = dom.CreateElement("rect");
                xRect.SetAttribute("x", rect.Start.X.ToString());
                xRect.SetAttribute("y", rect.Start.Y.ToString());
                xRect.SetAttribute("width", rect.Width.ToString());
                xRect.SetAttribute("height", rect.Height.ToString());

                if (rect.MinZ != m_MinZ)
                {
                    xRect.SetAttribute("zmin", rect.MinZ.ToString());
                }
                if (rect.MaxZ != m_MaxZ)
                {
                    xRect.SetAttribute("zmax", rect.MaxZ.ToString());
                }

                x.AppendChild(xRect);
            }

            if (m_Area != null && m_Area.Count > 0)
            {
                MapRect rect = m_Area[0] as MapRect;
                Point3D DefaultGoLocation = new Point3D(rect.Start.X + (rect.End.X - rect.Start.X) / 2, rect.Start.Y + (rect.End.Y - rect.Start.Y) / 2, 0);

                if (m_GoLocation != DefaultGoLocation && m_GoLocation.X != -1 && m_GoLocation.Y != -1)
                {
                    XmlElement xGoLocation = dom.CreateElement("go");
                    xGoLocation.SetAttribute("x", m_GoLocation.X.ToString());
                    xGoLocation.SetAttribute("y", m_GoLocation.Y.ToString());
                    xGoLocation.SetAttribute("z", m_GoLocation.Z.ToString());
                    x.AppendChild(xGoLocation);
                }
            }

            if (m_Entrance.X != int.MinValue && m_Entrance.Y != int.MinValue)
            {
                XmlElement xEntrance = dom.CreateElement("entrance");
                xEntrance.SetAttribute("x", m_Entrance.X.ToString());
                xEntrance.SetAttribute("y", m_Entrance.Y.ToString());
                if (m_Entrance.Z != int.MinValue)
                {
                    xEntrance.SetAttribute("z", m_Entrance.Z.ToString());
                }
                x.AppendChild(xEntrance);
            }

            if (m_Music != string.Empty)
            {
                XmlElement xMusic = dom.CreateElement("music");
                xMusic.SetAttribute("name", m_Music);
                x.AppendChild(xMusic);
            }

            // Begin other data

            // <rune name="Haven City" />
            if (m_Rune != null && m_Rune != string.Empty)
            {
                XmlElement xRune = dom.CreateElement("rune");
                xRune.SetAttribute("name", m_Rune);
                x.AppendChild(xRune);
            }

            // <smartNoHousing active="true" />
            if (m_SmartNoHousing != XmlBool.Unspecified)
            {
                XmlElement xHouse = dom.CreateElement("smartNoHousing");
                xHouse.SetAttribute("active", m_SmartNoHousing.ToString().ToLower());
                x.AppendChild(xHouse);
            }

            // <logoutDelay active="false" />
            if (m_LogoutDelayActive != XmlBool.Unspecified)
            {
                XmlElement xLogout = dom.CreateElement("logoutDelay");
                xLogout.SetAttribute("active", m_LogoutDelayActive.ToString().ToLower());
                x.AppendChild(xLogout);
            }

            // <guards disabled="true" />
            if (m_GuardsDisabled != XmlBool.Unspecified)
            {
                XmlElement xGuards = dom.CreateElement("guards");
                xGuards.SetAttribute("disabled", m_GuardsDisabled.ToString().ToLower());
                x.AppendChild(xGuards);
            }

            // spawning, for now just keep a record of the info so we can persist it.
            if (m_Spawning != null)
            {
                foreach (XmlElement spawning in m_Spawning)
                {
                    XmlNode xSpawn = dom.ImportNode(spawning, true);
                    x.AppendChild(xSpawn);
                }
            }

            // Subregions
            foreach (MapRegion sub in m_SubRegions)
            {
                XmlElement xSub = sub.GetXml(dom);
                x.AppendChild(xSub);
            }

            return(x);
        }
コード例 #3
0
ファイル: Xml.cs プロジェクト: NaphalAXT/RegionEditor
 public static bool ReadRectangle3D(XmlElement xml, int defaultMinZ, int defaultMaxZ, ref MapRect value)
 {
     return(ReadRectangle3D(xml, defaultMinZ, defaultMaxZ, ref value, true));
 }
コード例 #4
0
        public static MapRegion LoadRegion(XmlElement xml)
        {
            MapRegion r = new MapRegion();

            XmlSupport.ReadString(xml, "name", ref r.m_Name);
            XmlSupport.ReadInt32(xml, "priority", ref r.m_Priority);
            XmlSupport.ReadString(xml, "type", ref r.m_Type);

            XmlElement zrange = xml["zrange"];

            XmlSupport.ReadInt32(zrange, "min", ref r.m_MinZ, false);
            XmlSupport.ReadInt32(zrange, "max", ref r.m_MaxZ, false);

            foreach (XmlElement xmlRect in xml.SelectNodes("rect"))
            {
                MapRect rect = new MapRect();
                if (XmlSupport.ReadRectangle3D(xmlRect, r.m_MinZ, r.m_MaxZ, ref rect))
                {
                    r.m_Area.Add(rect);
                }
            }

            if (!XmlSupport.ReadPoint3D(xml["go"], ref r.m_GoLocation, false) && r.m_Area.Count > 0)
            {
                Point2D start = ((MapRect)r.m_Area[0]).Start;

                Point2D end = ((MapRect)r.m_Area[0]).End;

                int x = start.X + (end.X - start.X) / 2;
                int y = start.Y + (end.Y - start.Y) / 2;

                r.m_GoLocation = new Point3D(x, y, 0);
            }

            int entranceX = int.MinValue;
            int entranceY = int.MinValue;
            int entranceZ = int.MinValue;

            XmlElement entrance = xml["entrance"];

            if (entrance != null)
            {
                XmlSupport.ReadInt32(entrance, "x", ref entranceX);
                XmlSupport.ReadInt32(entrance, "y", ref entranceY);
                XmlSupport.ReadInt32(entrance, "z", ref entranceZ);
            }

            r.m_Entrance.X = entranceX;
            r.m_Entrance.Y = entranceY;
            r.m_Entrance.Z = entranceZ;

            XmlSupport.ReadString(xml["music"], "name", ref r.m_Music);

            // <rune name="Haven City" />
            XmlSupport.ReadString(xml["rune"], "name", ref r.m_Rune);
            // <smartNoHousing active="true" />
            XmlSupport.ReadXmlBool(xml["smartNoHousing"], "active", ref r.m_SmartNoHousing);
            // <logoutDelay active="false" />
            XmlSupport.ReadXmlBool(xml["logoutDelay"], "active", ref r.m_LogoutDelayActive);
            // <guards disabled="true" />
            XmlSupport.ReadXmlBool(xml["guards"], "disabled", ref r.m_GuardsDisabled);


            // spawning, for now just keep a record of the info so we can persist it.
            r.m_Spawning = xml.SelectNodes("spawning");

            // Subregions
            foreach (XmlElement xRegion in xml.SelectNodes("region"))
            {
                MapRegion sub = MapRegion.LoadRegion(xRegion);

                if (sub != null)
                {
                    r.m_SubRegions.Add(sub);
                }
            }

            return(r);
        }