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";
+ }
}
}
}