private void CreateWzProp(IPropertyContainer parent, WzPropertyType propType, string propName, object value) { IWzImageProperty addedProp; switch (propType) { case WzPropertyType.ByteFloat: addedProp = new WzByteFloatProperty(propName); break; case WzPropertyType.Canvas: addedProp = new WzCanvasProperty(propName); ((WzCanvasProperty)addedProp).PngProperty = new WzPngProperty(); break; case WzPropertyType.CompressedInt: addedProp = new WzCompressedIntProperty(propName); break; case WzPropertyType.Double: addedProp = new WzDoubleProperty(propName); break; /*case WzPropertyType.Sound: addedProp = new WzSoundProperty(propName); break;*/ case WzPropertyType.String: addedProp = new WzStringProperty(propName); break; case WzPropertyType.UnsignedShort: addedProp = new WzUnsignedShortProperty(propName); break; case WzPropertyType.Vector: addedProp = new WzVectorProperty(propName); ((WzVectorProperty)addedProp).X = new WzCompressedIntProperty("X"); ((WzVectorProperty)addedProp).Y = new WzCompressedIntProperty("Y"); break; default: throw new NotSupportedException("not supported type"); } addedProp.SetValue(value); parent.AddProperty(addedProp); }
public override WzImageProperty DeepClone() { WzStringProperty clone = new WzStringProperty(name, val); return(clone); }
private static void ParseXML(XmlElement element, IPropertyContainer wo) { foreach (XmlNode node in element) { if (!(node is XmlElement)) continue; XmlElement childElement = (XmlElement)node; if (childElement.Name == "imgdir") { WzSubProperty sub = new WzSubProperty(childElement.GetAttribute("name")); wo.AddProperty(sub); ParseXML(childElement, (IPropertyContainer)sub); } else if (childElement.Name == "canvas") { WzCanvasProperty canvas = new WzCanvasProperty(childElement.GetAttribute("name")); canvas.PngProperty = new WzPngProperty(); MemoryStream pngstream = new MemoryStream(Convert.FromBase64String(childElement.GetAttribute("basedata"))); canvas.PngProperty.SetPNG((Bitmap)Image.FromStream(pngstream, true, true)); wo.AddProperty(canvas); ParseXML(childElement, (IPropertyContainer)canvas); } if (childElement.Name == "int") { WzCompressedIntProperty compressedInt = new WzCompressedIntProperty(childElement.GetAttribute("name"), int.Parse(childElement.GetAttribute("value"), formattingInfo)); wo.AddProperty(compressedInt); } if (childElement.Name == "double") { WzDoubleProperty doubleProp = new WzDoubleProperty(childElement.GetAttribute("name"), double.Parse(childElement.GetAttribute("value"), formattingInfo)); wo.AddProperty(doubleProp); } if (childElement.Name == "null") { WzNullProperty nullProp = new WzNullProperty(childElement.GetAttribute("name")); wo.AddProperty(nullProp); } if (childElement.Name == "sound") { WzSoundProperty sound = new WzSoundProperty(childElement.GetAttribute("name")); sound.SetDataUnsafe(Convert.FromBase64String(childElement.GetAttribute("basedata"))); wo.AddProperty(sound); } if (childElement.Name == "string") { string str = childElement.GetAttribute("value").Replace("<", "<").Replace("&", "&").Replace(">", ">").Replace("'", "'").Replace(""", "\""); WzStringProperty stringProp = new WzStringProperty(childElement.GetAttribute("name"), str); wo.AddProperty(stringProp); } if (childElement.Name == "short") { WzUnsignedShortProperty shortProp = new WzUnsignedShortProperty(childElement.GetAttribute("name"), ushort.Parse(childElement.GetAttribute("value"), formattingInfo)); wo.AddProperty(shortProp); } if (childElement.Name == "uol") { WzUOLProperty uol = new WzUOLProperty(childElement.GetAttribute("name"), childElement.GetAttribute("value")); wo.AddProperty(uol); } if (childElement.Name == "vector") { WzVectorProperty vector = new WzVectorProperty(childElement.GetAttribute("name"), new WzCompressedIntProperty("x", Convert.ToInt32(childElement.GetAttribute("x"))), new WzCompressedIntProperty("y", Convert.ToInt32(childElement.GetAttribute("y")))); wo.AddProperty(vector); } if (childElement.Name == "float") { WzByteFloatProperty floatProp = new WzByteFloatProperty(childElement.GetAttribute("name"), float.Parse(childElement.GetAttribute("value"), formattingInfo)); wo.AddProperty(floatProp); } if (childElement.Name == "extended") { WzConvexProperty convex = new WzConvexProperty(childElement.GetAttribute("name")); wo.AddProperty(convex); ParseXML(childElement, (IPropertyContainer)convex); } } }
internal IWzImageProperty ParsePropertyFromXMLElement(XmlElement element) { switch (element.Name) { case "imgdir": WzSubProperty sub = new WzSubProperty(element.GetAttribute("name")); foreach (XmlElement subelement in element) sub.AddProperty(ParsePropertyFromXMLElement(subelement)); return sub; case "canvas": WzCanvasProperty canvas = new WzCanvasProperty(element.GetAttribute("name")); if (!element.HasAttribute("basedata")) throw new NoBase64DataException("no base64 data in canvas element with name " + canvas.Name); canvas.PngProperty = new WzPngProperty(); MemoryStream pngstream = new MemoryStream(Convert.FromBase64String(element.GetAttribute("basedata"))); canvas.PngProperty.SetPNG((Bitmap)Image.FromStream(pngstream, true, true)); foreach (XmlElement subelement in element) canvas.AddProperty(ParsePropertyFromXMLElement(subelement)); return canvas; case "int": WzCompressedIntProperty compressedInt = new WzCompressedIntProperty(element.GetAttribute("name"), int.Parse(element.GetAttribute("value"), formattingInfo)); return compressedInt; case "double": WzDoubleProperty doubleProp = new WzDoubleProperty(element.GetAttribute("name"), double.Parse(element.GetAttribute("value"), formattingInfo)); return doubleProp; case "null": WzNullProperty nullProp = new WzNullProperty(element.GetAttribute("name")); return nullProp; case "sound": if (!element.HasAttribute("basedata") || !element.HasAttribute("basehead") || !element.HasAttribute("length")) throw new NoBase64DataException("no base64 data in sound element with name " + element.GetAttribute("name")); WzSoundProperty sound = new WzSoundProperty(element.GetAttribute("name"), int.Parse(element.GetAttribute("length")), Convert.FromBase64String(element.GetAttribute("basehead")), Convert.FromBase64String(element.GetAttribute("basedata"))); return sound; case "string": WzStringProperty stringProp = new WzStringProperty(element.GetAttribute("name"), element.GetAttribute("value")); return stringProp; case "short": WzUnsignedShortProperty shortProp = new WzUnsignedShortProperty(element.GetAttribute("name"), ushort.Parse(element.GetAttribute("value"), formattingInfo)); return shortProp; case "uol": WzUOLProperty uol = new WzUOLProperty(element.GetAttribute("name"), element.GetAttribute("value")); return uol; case "vector": WzVectorProperty vector = new WzVectorProperty(element.GetAttribute("name"), new WzCompressedIntProperty("x", Convert.ToInt32(element.GetAttribute("x"))), new WzCompressedIntProperty("y", Convert.ToInt32(element.GetAttribute("y")))); return vector; case "float": WzByteFloatProperty floatProp = new WzByteFloatProperty(element.GetAttribute("name"), float.Parse(element.GetAttribute("value"), formattingInfo)); return floatProp; case "extended": WzConvexProperty convex = new WzConvexProperty(element.GetAttribute("name")); foreach (XmlElement subelement in element) convex.AddProperty(ParsePropertyFromXMLElement(subelement)); return convex; } throw new InvalidDataException("unknown XML prop " + element.Name); }
public void SaveTooltips() { if (board.BoardItems.ToolTips.Count == 0) { return; } bool retainTooltipStrings = true; WzSubProperty tooltipParent = new WzSubProperty(); WzImage strTooltipImg = (WzImage)Program.WzManager.String["ToolTipHelp.img"]; WzSubProperty strTooltipCat = (WzSubProperty)strTooltipImg["Mapobject"]; WzSubProperty strTooltipParent = (WzSubProperty)strTooltipCat[board.MapInfo.id.ToString()]; if (strTooltipParent == null) { strTooltipParent = new WzSubProperty(); strTooltipCat[board.MapInfo.id.ToString()] = strTooltipParent; Program.WzManager.SetUpdated("string", strTooltipImg); retainTooltipStrings = false; } HashSet<int> caughtNumbers = new HashSet<int>(); // Check if the tooltips' original numbers can still be used if (retainTooltipStrings) { for (int i = 0; i < board.BoardItems.ToolTips.Count; i++) { if (board.BoardItems.ToolTips[i].OriginalNumber == -1) { retainTooltipStrings = false; break; } } } // If they do not, we need to update string.wz and rebuild the string tooltip props if (!retainTooltipStrings) { Program.WzManager.SetUpdated("string", strTooltipImg); strTooltipParent.ClearProperties(); } for (int i = 0; i < board.BoardItems.ToolTips.Count; i++) { ToolTipInstance ttInst = board.BoardItems.ToolTips[i]; string tooltipPropStr = retainTooltipStrings ? ttInst.OriginalNumber.ToString() : i.ToString(); tooltipParent[tooltipPropStr] = PackRectangle(ttInst); if (ttInst.CharacterToolTip != null) { tooltipParent[tooltipPropStr + "char"] = PackRectangle(ttInst.CharacterToolTip); } if (retainTooltipStrings) { // This prop must exist if we are retaining, otherwise the map would not load WzSubProperty strTooltipProp = (WzSubProperty)strTooltipParent[tooltipPropStr]; if (ttInst.Title != null) { WzStringProperty titleProp = (WzStringProperty)strTooltipProp["Title"]; if (titleProp == null) { titleProp = new WzStringProperty(); Program.WzManager.SetUpdated("string", strTooltipImg); } UpdateString(titleProp, ttInst.Title, strTooltipImg); } if (ttInst.Desc != null) { WzStringProperty descProp = (WzStringProperty)strTooltipProp["Desc"]; if (descProp == null) { descProp = new WzStringProperty(); Program.WzManager.SetUpdated("string", strTooltipImg); } UpdateString(descProp, ttInst.Desc, strTooltipImg); } } else { WzSubProperty strTooltipProp = new WzSubProperty(); strTooltipProp["Title"] = InfoTool.SetOptionalString(ttInst.Title); strTooltipProp["Desc"] = InfoTool.SetOptionalString(ttInst.Desc); strTooltipParent[tooltipPropStr] = strTooltipProp; } } image["ToolTip"] = tooltipParent; }
private void UpdateString(WzStringProperty strProp, string val, WzImage img) { if (strProp.Value != val) { strProp.Value = val; Program.WzManager.SetUpdated("string", img); } }
private void SaveMapInfo() { board.MapInfo.Save(image, board.VRRectangle == null ? (System.Drawing.Rectangle?)null : new System.Drawing.Rectangle(board.VRRectangle.X, board.VRRectangle.Y, board.VRRectangle.Width, board.VRRectangle.Height)); if (board.MapInfo.mapType == MapType.RegularMap) { WzImage strMapImg = (WzImage)Program.WzManager.String["Map.img"]; WzSubProperty strCatProp = (WzSubProperty)strMapImg[board.MapInfo.strCategoryName]; if (strCatProp == null) { strCatProp = new WzSubProperty(); strMapImg[board.MapInfo.strCategoryName] = strCatProp; Program.WzManager.SetUpdated("string", strMapImg); } WzSubProperty strMapProp = (WzSubProperty)strCatProp[board.MapInfo.id.ToString()]; if (strMapProp == null) { strMapProp = new WzSubProperty(); strCatProp[board.MapInfo.id.ToString()] = strMapProp; Program.WzManager.SetUpdated("string", strMapImg); } WzStringProperty strMapName = (WzStringProperty)strMapProp["mapName"]; if (strMapName == null) { strMapName = new WzStringProperty(); strMapProp["mapName"] = strMapName; Program.WzManager.SetUpdated("string", strMapImg); } WzStringProperty strStreetName = (WzStringProperty)strMapProp["streetName"]; if (strStreetName == null) { strStreetName = new WzStringProperty(); strMapProp["streetName"] = strStreetName; Program.WzManager.SetUpdated("string", strMapImg); } UpdateString(strMapName, board.MapInfo.strMapName, strMapImg); UpdateString(strStreetName, board.MapInfo.strStreetName, strMapImg); } }
public override WzImageProperty DeepClone() { WzStringProperty clone = new WzStringProperty(name, val); return clone; }
public override IWzImageProperty DeepClone() { WzStringProperty clone = (WzStringProperty)MemberwiseClone(); return(clone); }