From 1ac12a160c4f09c390beca6cf8cb0487d036f9e4 Mon Sep 17 00:00:00 2001 From: lancej Date: Thu, 2 Nov 2006 03:05:20 +0000 Subject: [PATCH] * Decoding of particle system data is mostly done, there are still a couple unknown fields. git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@464 52acb1d6-8a22-11de-b505-999d5b087335 --- libsecondlife-cs/ParticleSystem.cs | 33 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/libsecondlife-cs/ParticleSystem.cs b/libsecondlife-cs/ParticleSystem.cs index 48f7745a..e59fe507 100644 --- a/libsecondlife-cs/ParticleSystem.cs +++ b/libsecondlife-cs/ParticleSystem.cs @@ -37,7 +37,7 @@ namespace libsecondlife public uint Version; //??? public uint StartTick; //??? - public enum SourcePattern + public enum SourcePattern : byte { None = 0, Drop = 0x01, @@ -71,9 +71,6 @@ namespace libsecondlife { int i = pos; - PartMaxAge = 10.0f; //Not yet parsed. - SrcPattern = SourcePattern.Explode; //Not yet parsed. - if (data.Length == 0) return; @@ -83,8 +80,7 @@ namespace libsecondlife StartTick = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24)); - //Unknown - i++; + SrcPattern = (SourcePattern)data[i++]; SrcMaxAge = (data[i++] + (data[i++] << 8)) / 256.0f; @@ -94,21 +90,21 @@ namespace libsecondlife SrcAngleBegin = (data[i++] / 100.0f) * (float)Math.PI; SrcAngleEnd = (data[i++] / 100.0f) * (float)Math.PI; - SrcBurstRate = (data[i++] + (data[i++] << 8)); - SrcBurstRadius = (data[i++] + (data[i++] << 8)); - SrcBurstSpeedMin = (data[i++] + (data[i++] << 8)); - SrcBurstSpeedMax = (data[i++] + (data[i++] << 8)); + SrcBurstRate = (data[i++] + (data[i++] << 8)) / 256.0f; + SrcBurstRadius = (data[i++] + (data[i++] << 8)) / 256.0f; + SrcBurstSpeedMin = (data[i++] + (data[i++] << 8)) / 256.0f; + SrcBurstSpeedMax = (data[i++] + (data[i++] << 8)) / 256.0f; SrcBurstPartCount = data[i++]; SrcOmega = new LLVector3(); - SrcOmega.X = (data[i++] + (data[i++] << 8)); - SrcOmega.Y = (data[i++] + (data[i++] << 8)); - SrcOmega.Z = (data[i++] + (data[i++] << 8)); + SrcOmega.X = (data[i++] + (data[i++] << 8)) / 128.0f - 256.0f; + SrcOmega.Y = (data[i++] + (data[i++] << 8)) / 128.0f - 256.0f; + SrcOmega.Z = (data[i++] + (data[i++] << 8)) / 128.0f - 256.0f; SrcAccel = new LLVector3(); - SrcAccel.X = (data[i++] + (data[i++] << 8)); - SrcAccel.Y = (data[i++] + (data[i++] << 8)); - SrcAccel.Z = (data[i++] + (data[i++] << 8)); + SrcAccel.X = (data[i++] + (data[i++] << 8)) / 128.0f - 256.0f; + SrcAccel.Y = (data[i++] + (data[i++] << 8)) / 128.0f - 256.0f; + SrcAccel.Z = (data[i++] + (data[i++] << 8)) / 128.0f - 256.0f; SrcTexture = new LLUUID(data, i); i += 16; @@ -117,6 +113,11 @@ namespace libsecondlife PartFlags = (ParticleFlags)(data[i++] + (data[i++] << 8)); + PartMaxAge = (data[i++] + (data[i++] << 8)) / 256.0f; + + //Unknown + i += 2; + PartStartRGBA = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24));