diff --git a/libsecondlife-cs/ParticleSystem.cs b/libsecondlife-cs/ParticleSystem.cs index 567c557a..0fabd534 100644 --- a/libsecondlife-cs/ParticleSystem.cs +++ b/libsecondlife-cs/ParticleSystem.cs @@ -17,23 +17,17 @@ namespace libsecondlife public enum SourcePattern : byte { /// - [XmlEnum("None")] - None = 0, + [XmlEnum("None")] None = 0, /// - [XmlEnum("Drop")] - Drop = 0x01, + [XmlEnum("Drop")] Drop = 0x01, /// - [XmlEnum("Explode")] - Explode = 0x02, + [XmlEnum("Explode")] Explode = 0x02, /// - [XmlEnum("Angle")] - Angle = 0x04, + [XmlEnum("Angle")] Angle = 0x04, /// - [XmlEnum("AngleCone")] - AngleCone = 0x08, + [XmlEnum("AngleCone")] AngleCone = 0x08, /// - [XmlEnum("AngleConeEmpty")] - AngleConeEmpty = 0x10 + [XmlEnum("AngleConeEmpty")] AngleConeEmpty = 0x10 } /// @@ -65,50 +59,39 @@ namespace libsecondlife } /// - [XmlAttribute] - public uint PartStartRGBA; + [XmlAttribute] public uint PartStartRGBA; /// - [XmlAttribute] - public uint PartEndRGBA; + [XmlAttribute] public uint PartEndRGBA; /// - [XmlAttribute] - public float PartMaxAge; + [XmlAttribute] public float PartMaxAge; /// - [XmlAttribute] - public float SrcMaxAge; + [XmlAttribute] public float SrcMaxAge; /// - [XmlAttribute] - public float SrcAngleBegin; + [XmlAttribute] public float SrcAngleBegin; /// - [XmlAttribute] - public float SrcAngleEnd; + [XmlAttribute] public float SrcAngleEnd; /// - [XmlAttribute] - public int SrcBurstPartCount; + [XmlAttribute] public int SrcBurstPartCount; /// - [XmlAttribute] - public float SrcBurstRadius; + [XmlAttribute] public float SrcBurstRadius; /// - [XmlAttribute] - public float SrcBurstRate; + [XmlAttribute] public float SrcBurstRate; /// - [XmlAttribute] - public float SrcBurstSpeedMin; + [XmlAttribute] public float SrcBurstSpeedMin; /// - [XmlAttribute] - public float SrcBurstSpeedMax; + [XmlAttribute] public float SrcBurstSpeedMax; /// Unknown - [XmlAttribute] - public uint Version; + [XmlAttribute] public uint Version; /// Unknown - [XmlAttribute] - public uint StartTick; + [XmlAttribute] public uint StartTick; /// - [XmlAttribute] - public SourcePattern SrcPattern; + [XmlAttribute] public SourcePattern SrcPattern; /// Various options that describe the behavior of this system - [XmlAttribute] - public ParticleFlags PartFlags; + [XmlAttribute] public ParticleFlags PartFlags; + /// + public LLUUID SrcTargetKey = LLUUID.Zero; + /// Texture that will be applied to the particles + public LLUUID SrcTexture = LLUUID.Zero; /// public LLVector3 PartStartScale = LLVector3.Zero; /// @@ -117,10 +100,6 @@ namespace libsecondlife public LLVector3 SrcAccel = LLVector3.Zero; /// public LLVector3 SrcOmega = LLVector3.Zero; - /// - public LLUUID SrcTargetKey = LLUUID.Zero; - /// Texture that will be applied to the particles - public LLUUID SrcTexture = LLUUID.Zero; /// /// diff --git a/libsecondlife-cs/Prims.cs b/libsecondlife-cs/Prims.cs index 5aaf3645..4541d90d 100644 --- a/libsecondlife-cs/Prims.cs +++ b/libsecondlife-cs/Prims.cs @@ -88,11 +88,9 @@ namespace libsecondlife public enum ExtraParamType : ushort { /// Whether this object has flexible parameters - [XmlEnum("Flexible")] - Flexible = 0x10, + [XmlEnum("Flexible")] Flexible = 0x10, /// Whether this object has light parameters - [XmlEnum("Light")] - Light = 0x20 + [XmlEnum("Light")] Light = 0x20 } /// @@ -102,86 +100,59 @@ namespace libsecondlife public class PrimObject { /// - [XmlAttribute] - public int PathTwistBegin = 0; + [XmlAttribute] public int PathTwistBegin = 0; /// - [XmlAttribute] - public float PathEnd = 0; + [XmlAttribute] public float PathEnd = 0; /// - [XmlAttribute] - public float ProfileBegin = 0; + [XmlAttribute] public float ProfileBegin = 0; /// - [XmlAttribute] - public float PathRadiusOffset = 0; + [XmlAttribute] public float PathRadiusOffset = 0; /// - [XmlAttribute] - public float PathSkew = 0; + [XmlAttribute] public float PathSkew = 0; /// - [XmlAttribute] - public uint ProfileCurve = 0; + [XmlAttribute] public uint ProfileCurve = 0; /// - [XmlAttribute] - public float PathScaleX = 0; + [XmlAttribute] public float PathScaleX = 0; /// - [XmlAttribute] - public float PathScaleY = 0; + [XmlAttribute] public float PathScaleY = 0; /// - [XmlAttribute] - public uint LocalID = 0; + [XmlAttribute] public uint LocalID = 0; /// - [XmlAttribute] - public uint ParentID = 0; + [XmlAttribute] public uint ParentID = 0; /// - [XmlAttribute] - public uint Material = 0; + [XmlAttribute] public uint Material = 0; /// - [XmlAttribute] - public string Name = ""; + [XmlAttribute] public string Name = ""; /// - [XmlAttribute] - public string Description = ""; + [XmlAttribute] public string Description = ""; /// - [XmlAttribute] - public float PathShearX = 0; + [XmlAttribute] public float PathShearX = 0; /// - [XmlAttribute] - public float PathShearY = 0; + [XmlAttribute] public float PathShearY = 0; /// - [XmlAttribute] - public float PathTaperX = 0; + [XmlAttribute] public float PathTaperX = 0; /// - [XmlAttribute] - public float PathTaperY = 0; + [XmlAttribute] public float PathTaperY = 0; /// - [XmlAttribute] - public float ProfileEnd = 0; + [XmlAttribute] public float ProfileEnd = 0; /// - [XmlAttribute] - public float PathBegin = 0; + [XmlAttribute] public float PathBegin = 0; /// - [XmlAttribute] - public uint PathCurve = 0; + [XmlAttribute] public uint PathCurve = 0; /// - [XmlAttribute] - public int PathTwist = 0; + [XmlAttribute] public int PathTwist = 0; /// - [XmlAttribute] - public uint ProfileHollow = 0; + [XmlAttribute] public uint ProfileHollow = 0; /// - [XmlAttribute] - public float PathRevolutions = 0; + [XmlAttribute] public float PathRevolutions = 0; /// - [XmlAttribute] - public uint State; + [XmlAttribute] public uint State; /// - [XmlAttribute] - public string Text; + [XmlAttribute] public string Text; /// - [XmlAttribute] - public ObjectManager.PCode PCode = ObjectManager.PCode.Prim; + [field:NonSerialized] public ObjectManager.PCode PCode = ObjectManager.PCode.Prim; /// - [XmlAttribute] - public ulong RegionHandle; + [XmlAttribute] public ulong RegionHandle; /// public LLUUID ID = LLUUID.Zero; /// @@ -519,15 +490,15 @@ namespace libsecondlife public class PrimFlexibleData { /// - public int Softness; + [XmlAttribute] public int Softness; /// - public float Gravity; + [XmlAttribute] public float Gravity; /// - public float Drag; + [XmlAttribute] public float Drag; /// - public float Wind; + [XmlAttribute] public float Wind; /// - public float Tension; + [XmlAttribute] public float Tension; /// public LLVector3 Force = LLVector3.Zero; @@ -591,13 +562,17 @@ namespace libsecondlife public class PrimLightData { /// - public byte R, G, B; + [XmlAttribute] public byte R; /// - public float Intensity; + [XmlAttribute] public byte G; /// - public float Radius; + [XmlAttribute] public byte B; /// - public float Falloff; + [XmlAttribute] public float Intensity; + /// + [XmlAttribute] public float Radius; + /// + [XmlAttribute] public float Falloff; /// /// diff --git a/libsecondlife-cs/Textures.cs b/libsecondlife-cs/Textures.cs index 9982a836..c9c87b48 100644 --- a/libsecondlife-cs/Textures.cs +++ b/libsecondlife-cs/Textures.cs @@ -591,7 +591,19 @@ namespace libsecondlife [Serializable] public class TextureEntryFace { - [Flags] + [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; + + [Flags, Serializable] public enum TextureAttributes : uint { None = 0, @@ -635,13 +647,13 @@ namespace libsecondlife get { if ((hasAttribute & TextureAttributes.TextureID) != 0) - return _TextureID; + return textureID; else - return DefaultTexture._TextureID; + return DefaultTexture.textureID; } set { - _TextureID = value; + textureID = value; hasAttribute |= TextureAttributes.TextureID; } } @@ -654,13 +666,13 @@ namespace libsecondlife get { if ((hasAttribute & TextureAttributes.RGBA) != 0) - return _RGBA; + return rgba; else - return DefaultTexture._RGBA; + return DefaultTexture.rgba; } set { - _RGBA = value; + rgba = value; hasAttribute |= TextureAttributes.RGBA; } } @@ -673,13 +685,13 @@ namespace libsecondlife get { if ((hasAttribute & TextureAttributes.RepeatU) != 0) - return _RepeatU; + return repeatU; else - return DefaultTexture._RepeatU; + return DefaultTexture.repeatU; } set { - _RepeatU = value; + repeatU = value; hasAttribute |= TextureAttributes.RepeatU; } } @@ -692,13 +704,13 @@ namespace libsecondlife get { if ((hasAttribute & TextureAttributes.RepeatV) != 0) - return _RepeatV; + return repeatV; else - return DefaultTexture._RepeatV; + return DefaultTexture.repeatV; } set { - _RepeatV = value; + repeatV = value; hasAttribute |= TextureAttributes.RepeatV; } } @@ -711,13 +723,13 @@ namespace libsecondlife get { if ((hasAttribute & TextureAttributes.OffsetU) != 0) - return _OffsetU; + return offsetU; else - return DefaultTexture._OffsetU; + return DefaultTexture.offsetU; } set { - _OffsetU = value; + offsetU = value; hasAttribute |= TextureAttributes.OffsetU; } } @@ -730,13 +742,13 @@ namespace libsecondlife get { if ((hasAttribute & TextureAttributes.OffsetV) != 0) - return _OffsetV; + return offsetV; else - return DefaultTexture._OffsetV; + return DefaultTexture.offsetV; } set { - _OffsetV = value; + offsetV = value; hasAttribute |= TextureAttributes.OffsetV; } } @@ -749,13 +761,13 @@ namespace libsecondlife get { if ((hasAttribute & TextureAttributes.Rotation) != 0) - return _Rotation; + return rotation; else - return DefaultTexture._Rotation; + return DefaultTexture.rotation; } set { - _Rotation = value; + rotation = value; hasAttribute |= TextureAttributes.Rotation; } } @@ -768,13 +780,13 @@ namespace libsecondlife get { if ((hasAttribute & TextureAttributes.Flags1) != 0) - return _Flags1; + return flags1; else - return DefaultTexture._Flags1; + return DefaultTexture.flags1; } set { - _Flags1 = value; + flags1 = value; hasAttribute |= TextureAttributes.Flags1; } } @@ -787,28 +799,16 @@ namespace libsecondlife get { if ((hasAttribute & TextureAttributes.Flags2) != 0) - return _Flags2; + return flags2; else - return DefaultTexture._Flags2; + return DefaultTexture.flags2; } set { - _Flags2 = value; + flags2 = value; hasAttribute |= TextureAttributes.Flags2; } } - - private TextureAttributes hasAttribute; - private TextureEntryFace DefaultTexture; - private LLUUID _TextureID; - private uint _RGBA; - private float _RepeatU; - private float _RepeatV; - private float _OffsetU; - private float _OffsetV; - private float _Rotation; - private byte _Flags1; - private byte _Flags2; } /// @@ -818,19 +818,19 @@ namespace libsecondlife public class TextureAnimation { /// - public uint Flags; + [XmlAttribute] public uint Flags; /// - public uint Face; + [XmlAttribute] public uint Face; /// - public uint SizeX; + [XmlAttribute] public uint SizeX; /// - public uint SizeY; + [XmlAttribute] public uint SizeY; /// - public float Start; + [XmlAttribute] public float Start; /// - public float Length; + [XmlAttribute] public float Length; /// - public float Rate; + [XmlAttribute] public float Rate; /// /// Default constructor diff --git a/libsecondlife-cs/Types.cs b/libsecondlife-cs/Types.cs index ba4ffeb5..cd4938d2 100644 --- a/libsecondlife-cs/Types.cs +++ b/libsecondlife-cs/Types.cs @@ -35,22 +35,21 @@ namespace libsecondlife /// Life networking protocol /// [XmlRoot("uuid")] - public class LLUUID + public class LLUUID : IXmlSerializable { + /// 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 { get { return data; } } - private byte[] data = null; - /// /// /// public LLUUID() { - data = new byte[16]; } /// @@ -59,8 +58,6 @@ namespace libsecondlife /// public LLUUID(string val) { - data = new byte[16]; - if (val.Length == 36) val = val.Replace("-", ""); if (val.Length != 32) throw new Exception("Malformed data passed to LLUUID constructor: " + val); @@ -78,8 +75,6 @@ namespace libsecondlife /// public LLUUID(byte[] byteArray, int pos) { - data = new byte[16]; - Array.Copy(byteArray, pos, data, 0, 16); } @@ -127,6 +122,40 @@ namespace libsecondlife return new LLUUID(Guid.NewGuid().ToByteArray(), 0); } + /// + /// + /// + /// + public System.Xml.Schema.XmlSchema GetSchema() + { + return null; + } + + public void ReadXml(System.Xml.XmlReader reader) + { + //reader.ReadStartElement("uuid"); + string val = reader.ReadString(); + + if (val.Length == 36) val = val.Replace("-", ""); + + if (val.Length != 32) throw new Exception("Malformed data passed to LLUUID constructor: " + val); + + for (int i = 0; i < 16; ++i) + { + data[i] = Convert.ToByte(val.Substring(i * 2, 2), 16); + } + + //reader.ReadEndElement(); + //reader.MoveToContent(); + } + + public void WriteXml(System.Xml.XmlWriter writer) + { + //writer.WriteStartElement("uuid"); + writer.WriteString(this.ToString()); + //writer.WriteEndElement(); + } + /// /// /// @@ -271,11 +300,11 @@ namespace libsecondlife public class LLVector3 { /// - public float X; + [XmlAttribute] public float X; /// - public float Y; + [XmlAttribute] public float Y; /// - public float Z; + [XmlAttribute] public float Z; /// /// @@ -458,11 +487,11 @@ namespace libsecondlife public class LLVector3d { /// - public double X; + [XmlAttribute] public double X; /// - public double Y; + [XmlAttribute] public double Y; /// - public double Z; + [XmlAttribute] public double Z; /// /// @@ -546,13 +575,13 @@ namespace libsecondlife public class LLVector4 { /// - public float X; + [XmlAttribute] public float X; /// - public float Y; + [XmlAttribute] public float Y; /// - public float Z; + [XmlAttribute] public float Z; /// - public float S; + [XmlAttribute] public float S; /// /// @@ -627,13 +656,13 @@ namespace libsecondlife public class LLQuaternion { /// - public float X; + [XmlAttribute] public float X; /// - public float Y; + [XmlAttribute] public float Y; /// - public float Z; + [XmlAttribute] public float Z; /// - public float W; + [XmlAttribute] public float W; /// /// diff --git a/libsecondlife-cs/examples/TestClient/Commands/ExportCommand.cs b/libsecondlife-cs/examples/TestClient/Commands/ExportCommand.cs index fb0d4e06..f1affd28 100644 --- a/libsecondlife-cs/examples/TestClient/Commands/ExportCommand.cs +++ b/libsecondlife-cs/examples/TestClient/Commands/ExportCommand.cs @@ -52,7 +52,7 @@ namespace libsecondlife.TestClient return ret; } - return ""; + return "Exported " + id.ToString() + " to " + file; } }