internal void ExtractMore(int eob, string name, string iname) { if (iname == "") iname = reader.ReadString(); switch (iname) { case "Property": WzSubProperty subProp = new WzSubProperty(name) { Parent = parent, ParentImage = imgParent }; reader.BaseStream.Position += 2; subProp.AddProperties(IWzImageProperty.ParsePropertyList(offset, reader, subProp, imgParent)); extendedProperty = subProp; break; case "Canvas": WzCanvasProperty canvasProp = new WzCanvasProperty(name) { Parent = parent, ParentImage = imgParent }; reader.BaseStream.Position++; if (reader.ReadByte() == 1) { reader.BaseStream.Position += 2; canvasProp.AddProperties(IWzImageProperty.ParsePropertyList(offset, reader, canvasProp, imgParent)); } canvasProp.PngProperty = new WzPngProperty(reader) { Parent = canvasProp, ParentImage = imgParent }; extendedProperty = canvasProp; break; case "Shape2D#Vector2D": WzVectorProperty vecProp = new WzVectorProperty(name) { Parent = parent, ParentImage = imgParent }; vecProp.X = new WzCompressedIntProperty("X", reader.ReadCompressedInt()) { Parent = vecProp, ParentImage = imgParent }; vecProp.Y = new WzCompressedIntProperty("Y", reader.ReadCompressedInt()) { Parent = vecProp, ParentImage = imgParent }; extendedProperty = vecProp; break; case "Shape2D#Convex2D": WzConvexProperty convexProp = new WzConvexProperty(name) { Parent = parent, ParentImage = imgParent }; int convexEntryCount = reader.ReadCompressedInt(); for (int i = 0; i < convexEntryCount; i++) { WzExtendedProperty exProp = new WzExtendedProperty(offset, name) { Parent = convexProp, ParentImage = imgParent }; exProp.ParseExtendedProperty(reader); convexProp.AddProperty(exProp); } extendedProperty = convexProp; break; case "Sound_DX8": WzSoundProperty soundProp = new WzSoundProperty(name) { Parent = parent, ParentImage = imgParent }; soundProp.ParseSound(reader); extendedProperty = soundProp; break; case "UOL": reader.BaseStream.Position++; extendedProperty = new WzUOLProperty(name, ExtractString()) { Parent = parent, ParentImage = imgParent }; /* switch (reader.ReadByte()) { case 0: extendedProperty = new WzUOLProperty(name, reader.ReadString()) { Parent = parent, ParentImage = imgParent }; break; case 1: extendedProperty = new WzUOLProperty(name, reader.ReadStringAtOffset(offset + reader.ReadInt32())) { Parent = parent, ParentImage = imgParent }; break; } */ break; } }
internal void ExtractMore(int eob, string name, string iname) { if (iname == "") { iname = reader.ReadString(); } switch (iname) { case "Property": WzSubProperty subProp = new WzSubProperty(name) { Parent = parent, ParentImage = imgParent }; reader.BaseStream.Position += 2; subProp.AddProperties(IWzImageProperty.ParsePropertyList(offset, reader, subProp, imgParent)); extendedProperty = subProp; break; case "Canvas": WzCanvasProperty canvasProp = new WzCanvasProperty(name) { Parent = parent, ParentImage = imgParent }; reader.BaseStream.Position++; if (reader.ReadByte() == 1) { reader.BaseStream.Position += 2; canvasProp.AddProperties(IWzImageProperty.ParsePropertyList(offset, reader, canvasProp, imgParent)); } canvasProp.PngProperty = new WzPngProperty(reader) { Parent = canvasProp, ParentImage = imgParent }; extendedProperty = canvasProp; break; case "Shape2D#Vector2D": WzVectorProperty vecProp = new WzVectorProperty(name) { Parent = parent, ParentImage = imgParent }; vecProp.X = new WzCompressedIntProperty("X", reader.ReadCompressedInt()) { Parent = vecProp, ParentImage = imgParent }; vecProp.Y = new WzCompressedIntProperty("Y", reader.ReadCompressedInt()) { Parent = vecProp, ParentImage = imgParent }; extendedProperty = vecProp; break; case "Shape2D#Convex2D": WzConvexProperty convexProp = new WzConvexProperty(name) { Parent = parent, ParentImage = imgParent }; int convexEntryCount = reader.ReadCompressedInt(); for (int i = 0; i < convexEntryCount; i++) { WzExtendedProperty exProp = new WzExtendedProperty(offset, name) { Parent = convexProp, ParentImage = imgParent }; exProp.ParseExtendedProperty(reader); convexProp.AddProperty(exProp); } extendedProperty = convexProp; break; case "Sound_DX8": WzSoundProperty soundProp = new WzSoundProperty(name) { Parent = parent, ParentImage = imgParent }; soundProp.ParseSound(reader); extendedProperty = soundProp; break; case "UOL": reader.BaseStream.Position++; extendedProperty = new WzUOLProperty(name, ExtractString()) { Parent = parent, ParentImage = imgParent }; /* * switch (reader.ReadByte()) * { * case 0: * extendedProperty = new WzUOLProperty(name, reader.ReadString()) { Parent = parent, ParentImage = imgParent }; * break; * case 1: * extendedProperty = new WzUOLProperty(name, reader.ReadStringAtOffset(offset + reader.ReadInt32())) { Parent = parent, ParentImage = imgParent }; * break; * } */ break; } }
/// <summary> /// Adds a WzExtendedProperty to the list of properties /// </summary> /// <param name="prop">The property to add</param> public void AddProperty(WzExtendedProperty prop) { properties.Add(prop); }
internal static IWzImageProperty[] ParsePropertyList(uint offset, WzBinaryReader reader, IWzObject parent, WzImage parentImg) { List<IWzImageProperty> properties = new List<IWzImageProperty>(); int entryCount = reader.ReadCompressedInt(); for (int i = 0; i < entryCount; i++) { string name = reader.ReadStringBlock(offset); byte ptype = reader.ReadByte(); switch (ptype) { case 0: properties.Add(new WzNullProperty(name, i) { Parent = parent, ParentImage = parentImg }); break; case 0x0B: case 2: properties.Add(new WzUnsignedShortProperty(name, reader.ReadUInt16()) { Parent = parent, ParentImage = parentImg }); break; case 3: properties.Add(new WzCompressedIntProperty(name, reader.ReadCompressedInt()) { Parent = parent, ParentImage = parentImg }); break; case 4: byte type = reader.ReadByte(); if (type == 0x80) properties.Add(new WzByteFloatProperty(name, reader.ReadSingle()) { Parent = parent, ParentImage = parentImg }); else if (type == 0) properties.Add(new WzByteFloatProperty(name, 0f) { Parent = parent, ParentImage = parentImg }); break; case 5: properties.Add(new WzDoubleProperty(name, reader.ReadDouble()) { Parent = parent, ParentImage = parentImg }); break; case 8: properties.Add(new WzStringProperty(name, reader.ReadStringBlock(offset)) { Parent = parent }); break; case 9: int eob = (int)(reader.ReadUInt32() + reader.BaseStream.Position); WzExtendedProperty exProp = new WzExtendedProperty(offset, eob, name); exProp.Parent = parent; exProp.ParentImage = parentImg; exProp.ParseExtendedProperty(reader); properties.Add(exProp); if (reader.BaseStream.Position != eob) reader.BaseStream.Position = eob; break; default: { Console.WriteLine("Unknown type: {0} | {1}", ptype, name); break; } } } return properties.ToArray(); }