diff --git a/libsecondlife-cs/ObjectManager.cs b/libsecondlife-cs/ObjectManager.cs index 1c17bf61..fb68c173 100644 --- a/libsecondlife-cs/ObjectManager.cs +++ b/libsecondlife-cs/ObjectManager.cs @@ -152,26 +152,19 @@ namespace libsecondlife /// /// /// - [Serializable] public enum PCode { /// - [XmlEnum("Prim")] Prim = 9, /// - [XmlEnum("Avatar")] Avatar = 47, /// - [XmlEnum("Grass")] Grass = 95, /// - [XmlEnum("NewTree")] NewTree = 111, /// - [XmlEnum("ParticleSystem")] ParticleSystem = 143, /// - [XmlEnum("Tree")] Tree = 255 } diff --git a/libsecondlife-cs/ParticleSystem.cs b/libsecondlife-cs/ParticleSystem.cs index 0fabd534..21c7a998 100644 --- a/libsecondlife-cs/ParticleSystem.cs +++ b/libsecondlife-cs/ParticleSystem.cs @@ -7,13 +7,11 @@ namespace libsecondlife /// /// /// - [Serializable] public class ParticleSystem { /// /// /// - [Serializable] public enum SourcePattern : byte { /// @@ -33,7 +31,7 @@ namespace libsecondlife /// /// /// - [Flags, Serializable] + [Flags] public enum ParticleFlags : ushort { /// @@ -59,47 +57,47 @@ namespace libsecondlife } /// - [XmlAttribute] public uint PartStartRGBA; + [XmlAttribute("startrgba")] public uint PartStartRGBA; /// - [XmlAttribute] public uint PartEndRGBA; + [XmlAttribute("endrgba")] public uint PartEndRGBA; /// - [XmlAttribute] public float PartMaxAge; + [XmlAttribute("maxage")] public float PartMaxAge; /// - [XmlAttribute] public float SrcMaxAge; + [XmlAttribute("srcmaxage")] public float SrcMaxAge; /// - [XmlAttribute] public float SrcAngleBegin; + [XmlAttribute("srcanglebegin")] public float SrcAngleBegin; /// - [XmlAttribute] public float SrcAngleEnd; + [XmlAttribute("srcangleend")] public float SrcAngleEnd; /// - [XmlAttribute] public int SrcBurstPartCount; + [XmlAttribute("srcburstpartcount")] public int SrcBurstPartCount; /// - [XmlAttribute] public float SrcBurstRadius; + [XmlAttribute("srcburstradius")] public float SrcBurstRadius; /// - [XmlAttribute] public float SrcBurstRate; + [XmlAttribute("srcburstrate")] public float SrcBurstRate; /// - [XmlAttribute] public float SrcBurstSpeedMin; + [XmlAttribute("srcburstspeedmin")] public float SrcBurstSpeedMin; /// - [XmlAttribute] public float SrcBurstSpeedMax; + [XmlAttribute("srcburstspeedmax")] public float SrcBurstSpeedMax; /// Unknown - [XmlAttribute] public uint Version; + [XmlAttribute("version")] public uint Version; /// Unknown - [XmlAttribute] public uint StartTick; + [XmlAttribute("starttick")] public uint StartTick; /// - [XmlAttribute] public SourcePattern SrcPattern; + [XmlAttribute("srcpattern")] public SourcePattern SrcPattern; /// Various options that describe the behavior of this system - [XmlAttribute] public ParticleFlags PartFlags; + [XmlAttribute("particleflags")] public ParticleFlags PartFlags; /// - public LLUUID SrcTargetKey = LLUUID.Zero; + [XmlElement("srctarget")] public LLUUID SrcTargetKey = LLUUID.Zero; /// Texture that will be applied to the particles - public LLUUID SrcTexture = LLUUID.Zero; + [XmlElement("srctexture")] public LLUUID SrcTexture = LLUUID.Zero; /// - public LLVector3 PartStartScale = LLVector3.Zero; + [XmlElement("partstartscale")] public LLVector3 PartStartScale = LLVector3.Zero; /// - public LLVector3 PartEndScale = LLVector3.Zero; + [XmlElement("partendscale")] public LLVector3 PartEndScale = LLVector3.Zero; /// - public LLVector3 SrcAccel = LLVector3.Zero; + [XmlElement("srcaccel")] public LLVector3 SrcAccel = LLVector3.Zero; /// - public LLVector3 SrcOmega = LLVector3.Zero; + [XmlElement("srcomega")] public LLVector3 SrcOmega = LLVector3.Zero; /// /// diff --git a/libsecondlife-cs/Prims.cs b/libsecondlife-cs/Prims.cs index 4541d90d..9d41822c 100644 --- a/libsecondlife-cs/Prims.cs +++ b/libsecondlife-cs/Prims.cs @@ -33,7 +33,7 @@ namespace libsecondlife /// /// Primary parameters for primitives such as Physics Enabled or Phantom /// - [Flags, Serializable] + [Flags] public enum ObjectFlags { /// None of the primary flags are enabled @@ -84,7 +84,6 @@ namespace libsecondlife /// been added after the original ObjectFlags that has all eight bits /// reserved already /// - [Serializable] public enum ExtraParamType : ushort { /// Whether this object has flexible parameters @@ -96,85 +95,85 @@ namespace libsecondlife /// /// /// - [Serializable] + [Serializable, XmlRoot("prim")] public class PrimObject { /// - [XmlAttribute] public int PathTwistBegin = 0; + [XmlAttribute("pathtwistbegin")] public int PathTwistBegin = 0; /// - [XmlAttribute] public float PathEnd = 0; + [XmlAttribute("pathend")] public float PathEnd = 0; /// - [XmlAttribute] public float ProfileBegin = 0; + [XmlAttribute("profilebegin")] public float ProfileBegin = 0; /// - [XmlAttribute] public float PathRadiusOffset = 0; + [XmlAttribute("pathradiusoffset")] public float PathRadiusOffset = 0; /// - [XmlAttribute] public float PathSkew = 0; + [XmlAttribute("pathskew")] public float PathSkew = 0; /// - [XmlAttribute] public uint ProfileCurve = 0; + [XmlAttribute("profilecurve")] public uint ProfileCurve = 0; /// - [XmlAttribute] public float PathScaleX = 0; + [XmlAttribute("pathscalex")] public float PathScaleX = 0; /// - [XmlAttribute] public float PathScaleY = 0; + [XmlAttribute("pathscaley")] public float PathScaleY = 0; /// - [XmlAttribute] public uint LocalID = 0; + [XmlAttribute("localid")] public uint LocalID = 0; /// - [XmlAttribute] public uint ParentID = 0; + [XmlAttribute("parentid")] public uint ParentID = 0; /// - [XmlAttribute] public uint Material = 0; + [XmlAttribute("material")] public uint Material = 0; /// - [XmlAttribute] public string Name = ""; + [XmlAttribute("name")] public string Name = ""; /// - [XmlAttribute] public string Description = ""; + [XmlAttribute("description")] public string Description = ""; /// - [XmlAttribute] public float PathShearX = 0; + [XmlAttribute("pathshearx")] public float PathShearX = 0; /// - [XmlAttribute] public float PathShearY = 0; + [XmlAttribute("pathsheary")] public float PathShearY = 0; /// - [XmlAttribute] public float PathTaperX = 0; + [XmlAttribute("pathtaperx")] public float PathTaperX = 0; /// - [XmlAttribute] public float PathTaperY = 0; + [XmlAttribute("pathtapery")] public float PathTaperY = 0; /// - [XmlAttribute] public float ProfileEnd = 0; + [XmlAttribute("profileend")] public float ProfileEnd = 0; /// - [XmlAttribute] public float PathBegin = 0; + [XmlAttribute("pathbegin")] public float PathBegin = 0; /// - [XmlAttribute] public uint PathCurve = 0; + [XmlAttribute("pathcurve")] public uint PathCurve = 0; /// - [XmlAttribute] public int PathTwist = 0; + [XmlAttribute("pathtwist")] public int PathTwist = 0; /// - [XmlAttribute] public uint ProfileHollow = 0; + [XmlAttribute("profilehollow")] public uint ProfileHollow = 0; /// - [XmlAttribute] public float PathRevolutions = 0; + [XmlAttribute("pathrevolutions")] public float PathRevolutions = 0; /// - [XmlAttribute] public uint State; + [XmlAttribute("state")] public uint State; /// - [XmlAttribute] public string Text; + [XmlAttribute("text")] public string Text; /// - [field:NonSerialized] public ObjectManager.PCode PCode = ObjectManager.PCode.Prim; + [XmlAttribute("regionhandle")] public ulong RegionHandle; /// - [XmlAttribute] public ulong RegionHandle; + [XmlAttribute("flags")] public ObjectFlags Flags; /// - public LLUUID ID = LLUUID.Zero; + [XmlIgnore] public ObjectManager.PCode PCode = ObjectManager.PCode.Prim; /// - public LLUUID GroupID = LLUUID.Zero; + [XmlElement("id")] public LLUUID ID = LLUUID.Zero; /// - public LLVector3 Position = LLVector3.Zero; + [XmlElement("groupid")] public LLUUID GroupID = LLUUID.Zero; /// - public LLVector3 Scale = LLVector3.Zero; + [XmlElement("position")] public LLVector3 Position = LLVector3.Zero; /// - public LLQuaternion Rotation = LLQuaternion.Identity; + [XmlElement("scale")] public LLVector3 Scale = LLVector3.Zero; /// - public ObjectFlags Flags; + [XmlElement("rotation")] public LLQuaternion Rotation = LLQuaternion.Identity; /// - public TextureEntry Textures = new TextureEntry(); + [XmlElement("textures")] public TextureEntry Textures = new TextureEntry(); /// - public TextureAnimation TextureAnim = new TextureAnimation(); + [XmlElement("textureanimation")] public TextureAnimation TextureAnim = new TextureAnimation(); /// - public PrimFlexibleData Flexible = new PrimFlexibleData(); + [XmlElement("flexible")] public PrimFlexibleData Flexible = new PrimFlexibleData(); /// - public PrimLightData Light = new PrimLightData(); + [XmlElement("light")] public PrimLightData Light = new PrimLightData(); /// - public ParticleSystem ParticleSys = new ParticleSystem(); + [XmlElement("particles")] public ParticleSystem ParticleSys = new ParticleSystem(); /// /// Default constructor @@ -472,8 +471,10 @@ namespace libsecondlife public void ToXml(XmlWriter xmlWriter) { + XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); + ns.Add("", ""); XmlSerializer serializer = new XmlSerializer(typeof(PrimObject)); - serializer.Serialize(xmlWriter, this); + serializer.Serialize(xmlWriter, this, ns); } public static PrimObject FromXml(XmlReader xmlReader) @@ -486,21 +487,20 @@ namespace libsecondlife /// /// /// - [Serializable] public class PrimFlexibleData { /// - [XmlAttribute] public int Softness; + [XmlAttribute("softness")] public int Softness; /// - [XmlAttribute] public float Gravity; + [XmlAttribute("gravity")] public float Gravity; /// - [XmlAttribute] public float Drag; + [XmlAttribute("drag")] public float Drag; /// - [XmlAttribute] public float Wind; + [XmlAttribute("wind")] public float Wind; /// - [XmlAttribute] public float Tension; + [XmlAttribute("tension")] public float Tension; /// - public LLVector3 Force = LLVector3.Zero; + [XmlElement("force")] public LLVector3 Force = LLVector3.Zero; /// /// @@ -558,21 +558,20 @@ namespace libsecondlife /// /// /// - [Serializable] public class PrimLightData { /// - [XmlAttribute] public byte R; + [XmlAttribute("red")] public byte R; /// - [XmlAttribute] public byte G; + [XmlAttribute("green")] public byte G; /// - [XmlAttribute] public byte B; + [XmlAttribute("blue")] public byte B; /// - [XmlAttribute] public float Intensity; + [XmlAttribute("intensity")] public float Intensity; /// - [XmlAttribute] public float Radius; + [XmlAttribute("radius")] public float Radius; /// - [XmlAttribute] public float Falloff; + [XmlAttribute("falloff")] public float Falloff; /// /// diff --git a/libsecondlife-cs/Textures.cs b/libsecondlife-cs/Textures.cs index c9c87b48..f30b3539 100644 --- a/libsecondlife-cs/Textures.cs +++ b/libsecondlife-cs/Textures.cs @@ -37,59 +37,41 @@ namespace libsecondlife public enum Bumpiness { /// - [XmlEnum("None")] - None = 0, + [XmlEnum("None")] None = 0, /// - [XmlEnum("Brightness")] - Brightness = 1, + [XmlEnum("Brightness")] Brightness = 1, /// - [XmlEnum("Darkness")] - Darkness = 2, + [XmlEnum("Darkness")] Darkness = 2, /// - [XmlEnum("Woodgrain")] - Woodgrain = 3, + [XmlEnum("Woodgrain")] Woodgrain = 3, /// - [XmlEnum("Bark")] - Bark = 4, + [XmlEnum("Bark")] Bark = 4, /// - [XmlEnum("Bricks")] - Bricks = 5, + [XmlEnum("Bricks")] Bricks = 5, /// - [XmlEnum("Checker")] - Checker = 6, + [XmlEnum("Checker")] Checker = 6, /// - [XmlEnum("Concrete")] - Concrete = 7, + [XmlEnum("Concrete")] Concrete = 7, /// - [XmlEnum("Crustytile")] - Crustytile = 8, + [XmlEnum("Crustytile")] Crustytile = 8, /// - [XmlEnum("Cutstone")] - Cutstone = 9, + [XmlEnum("Cutstone")] Cutstone = 9, /// - [XmlEnum("Discs")] - Discs = 10, + [XmlEnum("Discs")] Discs = 10, /// - [XmlEnum("Gravel")] - Gravel = 11, + [XmlEnum("Gravel")] Gravel = 11, /// - [XmlEnum("Petridish")] - Petridish = 12, + [XmlEnum("Petridish")] Petridish = 12, /// - [XmlEnum("Siding")] - Siding = 13, + [XmlEnum("Siding")] Siding = 13, /// - [XmlEnum("Stonetile")] - Stonetile = 14, + [XmlEnum("Stonetile")] Stonetile = 14, /// - [XmlEnum("Stucco")] - Stucco = 15, + [XmlEnum("Stucco")] Stucco = 15, /// - [XmlEnum("Suction")] - Suction = 16, + [XmlEnum("Suction")] Suction = 16, /// - [XmlEnum("Weave")] - Weave = 17 + [XmlEnum("Weave")] Weave = 17 } /// @@ -98,17 +80,13 @@ namespace libsecondlife public enum Shininess { /// - [XmlEnum("None")] - None = 0, + [XmlEnum("None")] None = 0, /// - [XmlEnum("Low")] - Low = 0x40, + [XmlEnum("Low")] Low = 0x40, /// - [XmlEnum("Medium")] - Medium = 0x80, + [XmlEnum("Medium")] Medium = 0x80, /// - [XmlEnum("High")] - High = 0xC0 + [XmlEnum("High")] High = 0xC0 } /// @@ -117,23 +95,51 @@ namespace libsecondlife public enum Mapping { /// - [XmlEnum("Default")] - Default = 0, + [XmlEnum("Default")] Default = 0, /// - [XmlEnum("Planar")] - Planar = 2 + [XmlEnum("Planar")] Planar = 2 + } + + /// + /// Flags in the TextureEntry block that describe which properties are + /// set + /// + [Flags] + public enum TextureAttributes : uint + { + /// + None = 0, + /// + TextureID = 1 << 0, + /// + RGBA = 1 << 1, + /// + RepeatU = 1 << 2, + /// + RepeatV = 1 << 3, + /// + OffsetU = 1 << 4, + /// + OffsetV = 1 << 5, + /// + Rotation = 1 << 6, + /// + Flags1 = 1 << 7, + /// + Flags2 = 1 << 8, + /// + All = 0xFFFFFFFF } /// /// /// - [Serializable] public class TextureEntry { /// - public TextureEntryFace DefaultTexture = null; + [XmlElement("default")] public TextureEntryFace DefaultTexture = null; /// - public SerializableDictionary FaceTextures = + [XmlElement("faces")] public SerializableDictionary FaceTextures = new SerializableDictionary(); /// @@ -588,37 +594,190 @@ namespace libsecondlife /// /// /// - [Serializable] public class TextureEntryFace { - [XmlAttribute] protected uint rgba; - [XmlAttribute] protected float repeatU; - [XmlAttribute] protected float repeatV; - [XmlAttribute] protected float offsetU; - [XmlAttribute] protected float offsetV; - [XmlAttribute] protected float rotation; - [XmlAttribute] protected byte flags1; - [XmlAttribute] protected byte flags2; - protected LLUUID textureID; - protected TextureAttributes hasAttribute; - protected TextureEntryFace DefaultTexture; + [XmlAttribute("rgba")] private uint rgba; + [XmlAttribute("repeatu")] private float repeatU; + [XmlAttribute("repeatv")] private float repeatV; + [XmlAttribute("offsetu")] private float offsetU; + [XmlAttribute("offsetv")] private float offsetV; + [XmlAttribute("rotation")] private float rotation; + [XmlAttribute("flags1")] private byte flags1; + [XmlAttribute("flags2")] private byte flags2; + [XmlAttribute("textureattributes")] private TextureAttributes hasAttribute; + [XmlText] private LLUUID textureID; + [XmlElement("defaulttexture")] private TextureEntryFace DefaultTexture = null; - [Flags, Serializable] - public enum TextureAttributes : uint + ////////////////////// + ///// Properties ///// + ////////////////////// + + /// + [XmlAttribute("rgba")] + public uint RGBA { - None = 0, - TextureID = 1 << 0, - RGBA = 1 << 1, - RepeatU = 1 << 2, - RepeatV = 1 << 3, - OffsetU = 1 << 4, - OffsetV = 1 << 5, - Rotation = 1 << 6, - Flags1 = 1 << 7, - Flags2 = 1 << 8, - All = 0xFFFFFFFF + get + { + if ((hasAttribute & TextureAttributes.RGBA) != 0) + return rgba; + else + return DefaultTexture.rgba; + } + set + { + rgba = value; + hasAttribute |= TextureAttributes.RGBA; + } } + /// + [XmlAttribute("repeatu")] + public float RepeatU + { + get + { + if ((hasAttribute & TextureAttributes.RepeatU) != 0) + return repeatU; + else + return DefaultTexture.repeatU; + } + set + { + repeatU = value; + hasAttribute |= TextureAttributes.RepeatU; + } + } + + /// + [XmlAttribute("repeatv")] + public float RepeatV + { + get + { + if ((hasAttribute & TextureAttributes.RepeatV) != 0) + return repeatV; + else + return DefaultTexture.repeatV; + } + set + { + repeatV = value; + hasAttribute |= TextureAttributes.RepeatV; + } + } + + /// + [XmlAttribute("offsetu")] + public float OffsetU + { + get + { + if ((hasAttribute & TextureAttributes.OffsetU) != 0) + return offsetU; + else + return DefaultTexture.offsetU; + } + set + { + offsetU = value; + hasAttribute |= TextureAttributes.OffsetU; + } + } + + /// + [XmlAttribute("offsetv")] + public float OffsetV + { + get + { + if ((hasAttribute & TextureAttributes.OffsetV) != 0) + return offsetV; + else + return DefaultTexture.offsetV; + } + set + { + offsetV = value; + hasAttribute |= TextureAttributes.OffsetV; + } + } + + /// + [XmlAttribute("rotation")] + public float Rotation + { + get + { + if ((hasAttribute & TextureAttributes.Rotation) != 0) + return rotation; + else + return DefaultTexture.rotation; + } + set + { + rotation = value; + hasAttribute |= TextureAttributes.Rotation; + } + } + + /// + [XmlAttribute("flags1")] + public byte Flags1 + { + get + { + if ((hasAttribute & TextureAttributes.Flags1) != 0) + return flags1; + else + return DefaultTexture.flags1; + } + set + { + flags1 = value; + hasAttribute |= TextureAttributes.Flags1; + } + } + + /// + [XmlAttribute("flags2")] + public byte Flags2 + { + get + { + if ((hasAttribute & TextureAttributes.Flags2) != 0) + return flags2; + else + return DefaultTexture.flags2; + } + set + { + flags2 = value; + hasAttribute |= TextureAttributes.Flags2; + } + } + + /// + [XmlElement("id")] + public LLUUID TextureID + { + get + { + if ((hasAttribute & TextureAttributes.TextureID) != 0) + return textureID; + else + return DefaultTexture.textureID; + } + set + { + textureID = value; + hasAttribute |= TextureAttributes.TextureID; + } + } + + ///////////////////////////// + ///// End of properties ///// + ///////////////////////////// + /// /// /// @@ -638,199 +797,27 @@ namespace libsecondlife else hasAttribute = TextureAttributes.None; } - - /// - /// - /// - public LLUUID TextureID - { - get - { - if ((hasAttribute & TextureAttributes.TextureID) != 0) - return textureID; - else - return DefaultTexture.textureID; - } - set - { - textureID = value; - hasAttribute |= TextureAttributes.TextureID; - } - } - - /// - /// - /// - public uint RGBA - { - get - { - if ((hasAttribute & TextureAttributes.RGBA) != 0) - return rgba; - else - return DefaultTexture.rgba; - } - set - { - rgba = value; - hasAttribute |= TextureAttributes.RGBA; - } - } - - /// - /// - /// - public float RepeatU - { - get - { - if ((hasAttribute & TextureAttributes.RepeatU) != 0) - return repeatU; - else - return DefaultTexture.repeatU; - } - set - { - repeatU = value; - hasAttribute |= TextureAttributes.RepeatU; - } - } - - /// - /// - /// - public float RepeatV - { - get - { - if ((hasAttribute & TextureAttributes.RepeatV) != 0) - return repeatV; - else - return DefaultTexture.repeatV; - } - set - { - repeatV = value; - hasAttribute |= TextureAttributes.RepeatV; - } - } - - /// - /// - /// - public float OffsetU - { - get - { - if ((hasAttribute & TextureAttributes.OffsetU) != 0) - return offsetU; - else - return DefaultTexture.offsetU; - } - set - { - offsetU = value; - hasAttribute |= TextureAttributes.OffsetU; - } - } - - /// - /// - /// - public float OffsetV - { - get - { - if ((hasAttribute & TextureAttributes.OffsetV) != 0) - return offsetV; - else - return DefaultTexture.offsetV; - } - set - { - offsetV = value; - hasAttribute |= TextureAttributes.OffsetV; - } - } - - /// - /// - /// - public float Rotation - { - get - { - if ((hasAttribute & TextureAttributes.Rotation) != 0) - return rotation; - else - return DefaultTexture.rotation; - } - set - { - rotation = value; - hasAttribute |= TextureAttributes.Rotation; - } - } - - /// - /// - /// - public byte Flags1 - { - get - { - if ((hasAttribute & TextureAttributes.Flags1) != 0) - return flags1; - else - return DefaultTexture.flags1; - } - set - { - flags1 = value; - hasAttribute |= TextureAttributes.Flags1; - } - } - - /// - /// - /// - public byte Flags2 - { - get - { - if ((hasAttribute & TextureAttributes.Flags2) != 0) - return flags2; - else - return DefaultTexture.flags2; - } - set - { - flags2 = value; - hasAttribute |= TextureAttributes.Flags2; - } - } } /// /// /// - [Serializable] public class TextureAnimation { /// - [XmlAttribute] public uint Flags; + [XmlAttribute("flags")] public uint Flags; /// - [XmlAttribute] public uint Face; + [XmlAttribute("face")] public uint Face; /// - [XmlAttribute] public uint SizeX; + [XmlAttribute("sizex")] public uint SizeX; /// - [XmlAttribute] public uint SizeY; + [XmlAttribute("sizey")] public uint SizeY; /// - [XmlAttribute] public float Start; + [XmlAttribute("start")] public float Start; /// - [XmlAttribute] public float Length; + [XmlAttribute("length")] public float Length; /// - [XmlAttribute] public float Rate; + [XmlAttribute("rate")] public float Rate; /// /// Default constructor @@ -884,138 +871,4 @@ namespace libsecondlife Rate = BitConverter.ToSingle(data, i + 8); } } - - /// - /// A serializable dictionary of TextureEntryFace objects, indexed by - /// the prim face they are mapped to - /// - [Serializable] - public class Faces : System.Collections.DictionaryBase, System.Xml.Serialization.IXmlSerializable - { - private const string NS = "http://www.libsecondlife.org/"; - - /// - /// Default constructor - /// - public Faces() - { - } - - public virtual TextureEntryFace this[uint key] - { - get - { - return (TextureEntryFace)this.Dictionary[key]; - } - set - { - this.Dictionary[key] = value; - } - } - - public virtual void Add(uint key, TextureEntryFace value) - { - this.Dictionary.Add(key, value); - } - - public virtual bool Contains(uint key) - { - return this.Dictionary.Contains(key); - } - - public virtual bool ContainsKey(uint key) - { - return this.Dictionary.Contains(key); - } - - public virtual bool ContainsValue(TextureEntryFace value) - { - foreach (TextureEntryFace item in this.Dictionary.Values) - { - if (item == value) - return true; - } - return false; - } - - public virtual void Remove(uint key) - { - this.Dictionary.Remove(key); - } - - public virtual System.Collections.ICollection Keys - { - get - { - return this.Dictionary.Keys; - } - } - - public virtual System.Collections.ICollection Values - { - get - { - return this.Dictionary.Values; - } - } - - void System.Xml.Serialization.IXmlSerializable.WriteXml(System.Xml.XmlWriter w) - { - System.Xml.Serialization.XmlSerializer keySer = - new System.Xml.Serialization.XmlSerializer(typeof(uint)); - System.Xml.Serialization.XmlSerializer valueSer = - new System.Xml.Serialization.XmlSerializer(typeof(TextureEntryFace)); - w.WriteStartElement("dictionary", NS); - foreach (object key in Dictionary.Keys) - { - w.WriteStartElement("item", NS); - - w.WriteStartElement("key", NS); - keySer.Serialize(w, key); - w.WriteEndElement(); - - w.WriteStartElement("value", NS); - object value = Dictionary[key]; - valueSer.Serialize(w, value); - w.WriteEndElement(); - - w.WriteEndElement(); - } - w.WriteEndElement(); - } - - void System.Xml.Serialization.IXmlSerializable.ReadXml(System.Xml.XmlReader r) - { - System.Xml.Serialization.XmlSerializer keySer = - new System.Xml.Serialization.XmlSerializer(typeof(string)); - System.Xml.Serialization.XmlSerializer valueSer = - new System.Xml.Serialization.XmlSerializer(typeof(TextureEntryFace)); - - r.Read(); - r.ReadStartElement("dictionary", NS); - while (r.NodeType != System.Xml.XmlNodeType.EndElement) - { - r.ReadStartElement("item", NS); - - r.ReadStartElement("key", NS); - object key = keySer.Deserialize(r); - r.ReadEndElement(); - - r.ReadStartElement("value", NS); - object value = valueSer.Deserialize(r); - r.ReadEndElement(); - - Dictionary.Add(key, value); - - r.ReadEndElement(); - r.MoveToContent(); - } - r.ReadEndElement(); - } - - System.Xml.Schema.XmlSchema System.Xml.Serialization.IXmlSerializable.GetSchema() - { - return null; - } - } } diff --git a/libsecondlife-cs/Types.cs b/libsecondlife-cs/Types.cs index cd4938d2..d9210826 100644 --- a/libsecondlife-cs/Types.cs +++ b/libsecondlife-cs/Types.cs @@ -39,6 +39,7 @@ namespace libsecondlife { /// The 16 bytes that make up the UUID protected byte[] data = new byte[16]; + /// Get a byte array of the 16 raw bytes making up the UUID public byte[] Data { @@ -300,11 +301,11 @@ namespace libsecondlife public class LLVector3 { /// - [XmlAttribute] public float X; + [XmlAttribute("x")] public float X; /// - [XmlAttribute] public float Y; + [XmlAttribute("y")] public float Y; /// - [XmlAttribute] public float Z; + [XmlAttribute("z")] public float Z; /// /// @@ -487,11 +488,11 @@ namespace libsecondlife public class LLVector3d { /// - [XmlAttribute] public double X; + [XmlAttribute("x")] public double X; /// - [XmlAttribute] public double Y; + [XmlAttribute("y")] public double Y; /// - [XmlAttribute] public double Z; + [XmlAttribute("z")] public double Z; /// /// @@ -575,20 +576,20 @@ namespace libsecondlife public class LLVector4 { /// - [XmlAttribute] public float X; + [XmlAttribute("x")] public float X; /// - [XmlAttribute] public float Y; + [XmlAttribute("y")] public float Y; /// - [XmlAttribute] public float Z; + [XmlAttribute("z")] public float Z; /// - [XmlAttribute] public float S; + [XmlAttribute("s")] public float S; /// /// /// public LLVector4() { - X = Y = Z = S = 0.0F; + X = Y = Z = S = 0.0f; } /// @@ -656,13 +657,13 @@ namespace libsecondlife public class LLQuaternion { /// - [XmlAttribute] public float X; + [XmlAttribute("x")] public float X; /// - [XmlAttribute] public float Y; + [XmlAttribute("y")] public float Y; /// - [XmlAttribute] public float Z; + [XmlAttribute("z")] public float Z; /// - [XmlAttribute] public float W; + [XmlAttribute("w")] public float W; /// /// diff --git a/libsecondlife-cs/examples/TestClient/Commands/ExportCommand.cs b/libsecondlife-cs/examples/TestClient/Commands/ExportCommand.cs index f1affd28..8e6578cb 100644 --- a/libsecondlife-cs/examples/TestClient/Commands/ExportCommand.cs +++ b/libsecondlife-cs/examples/TestClient/Commands/ExportCommand.cs @@ -21,6 +21,8 @@ namespace libsecondlife.TestClient return "Usage: export uuid outputfile.xml"; LLUUID id; + uint localid = 0; + int count = 0; string file = args[1]; try @@ -36,28 +38,55 @@ namespace libsecondlife.TestClient { if (prim.ID == id) { - try + if (prim.ParentID != 0) { - XmlWriter writer = XmlWriter.Create(file); - prim.ToXml(writer); - writer.Close(); + localid = prim.ParentID; } - catch (Exception e) + else { - string ret = "Failed to write to " + file + ":" + e.ToString(); - if (ret.Length > 1000) - { - ret = ret.Remove(1000); - } - return ret; + localid = prim.LocalID; } - return "Exported " + id.ToString() + " to " + file; + break; } } - return "Couldn't find UUID " + id.ToString() + " in the " + TestClient.Prims.Count + - "objects currently indexed"; + if (localid != 0) + { + try + { + XmlWriter writer = XmlWriter.Create(file); + writer.WriteStartElement("primitives"); + + foreach (PrimObject prim in TestClient.Prims.Values) + { + if (prim.LocalID == localid || prim.ParentID == localid) + { + prim.ToXml(writer); + count++; + } + } + + writer.WriteEndElement(); + writer.Close(); + } + catch (Exception e) + { + string ret = "Failed to write to " + file + ":" + e.ToString(); + if (ret.Length > 1000) + { + ret = ret.Remove(1000); + } + return ret; + } + + return "Exported " + count + " prims to " + file; + } + else + { + return "Couldn't find UUID " + id.ToString() + " in the " + TestClient.Prims.Count + + "objects currently indexed"; + } } } }