private void UpdateParticles1()
    {
        Vector3 gravity    = this.m_Gravity;
        Vector3 normalized = ((Vector3) ref this.m_Gravity).get_normalized();
        Vector3 vector3_1  = this.m_Root.TransformDirection(this.m_LocalGravity);
        Vector3 vector3_2  = Vector3.op_Multiply(normalized, Mathf.Max(Vector3.Dot(vector3_1, normalized), 0.0f));
        Vector3 vector3_3  = Vector3.op_Multiply(Vector3.op_Addition(Vector3.op_Subtraction(gravity, vector3_2), this.m_Force), this.m_ObjectScale);

        for (int index = 0; index < this.m_Particles.Count; ++index)
        {
            DynamicBoneV2.Particle particle1 = this.m_Particles[index];
            if (particle1.m_ParentIndex >= 0)
            {
                Vector3 vector3_4 = Vector3.op_Subtraction(particle1.m_Position, particle1.m_PrevPosition);
                Vector3 vector3_5 = Vector3.op_Multiply(this.m_ObjectMove, particle1.m_Inert);
                particle1.m_PrevPosition = Vector3.op_Addition(particle1.m_Position, vector3_5);
                DynamicBoneV2.Particle particle2 = particle1;
                particle2.m_Position = Vector3.op_Addition(particle2.m_Position, Vector3.op_Addition(Vector3.op_Addition(Vector3.op_Multiply(vector3_4, 1f - particle1.m_Damping), vector3_3), vector3_5));
            }
            else
            {
                particle1.m_PrevPosition = particle1.m_Position;
                particle1.m_Position     = particle1.m_Transform.get_position();
            }
        }
    }
 private void OnDrawGizmosSelected()
 {
     if (!((Behaviour)this).get_enabled() || Object.op_Equality((Object)this.m_Root, (Object)null))
     {
         return;
     }
     if (Application.get_isEditor() && !Application.get_isPlaying() && ((Component)this).get_transform().get_hasChanged())
     {
         this.InitTransforms();
         this.SetupParticles();
     }
     Gizmos.set_color(Color.get_white());
     for (int index = 0; index < this.m_Particles.Count; ++index)
     {
         DynamicBoneV2.Particle particle1 = this.m_Particles[index];
         if (particle1.m_ParentIndex >= 0)
         {
             DynamicBoneV2.Particle particle2 = this.m_Particles[particle1.m_ParentIndex];
             Gizmos.DrawLine(particle1.m_Position, particle2.m_Position);
         }
         if ((double)particle1.m_Radius > 0.0)
         {
             Gizmos.DrawWireSphere(particle1.m_Position, particle1.m_Radius * this.m_ObjectScale);
         }
     }
 }
 private void SkipUpdateParticles()
 {
     for (int index = 0; index < this.m_Particles.Count; ++index)
     {
         DynamicBoneV2.Particle particle1 = this.m_Particles[index];
         if (particle1.m_ParentIndex >= 0)
         {
             DynamicBoneV2.Particle particle2 = particle1;
             particle2.m_PrevPosition = Vector3.op_Addition(particle2.m_PrevPosition, this.m_ObjectMove);
             DynamicBoneV2.Particle particle3 = particle1;
             particle3.m_Position = Vector3.op_Addition(particle3.m_Position, this.m_ObjectMove);
             DynamicBoneV2.Particle particle4 = this.m_Particles[particle1.m_ParentIndex];
             float magnitude1;
             if (Object.op_Inequality((Object)particle1.m_Transform, (Object)null))
             {
                 Vector3 vector3 = Vector3.op_Subtraction(particle4.m_Transform.get_position(), particle1.m_Transform.get_position());
                 magnitude1 = ((Vector3) ref vector3).get_magnitude();
             }
             else
             {
                 Matrix4x4 localToWorldMatrix = particle4.m_Transform.get_localToWorldMatrix();
                 Vector3   vector3            = ((Matrix4x4) ref localToWorldMatrix).MultiplyVector(particle1.m_EndOffset);
                 magnitude1 = ((Vector3) ref vector3).get_magnitude();
             }
             float num1 = Mathf.Lerp(1f, particle1.m_Stiffness, this.m_Weight);
             if ((double)num1 > 0.0)
             {
                 Matrix4x4 localToWorldMatrix = particle4.m_Transform.get_localToWorldMatrix();
                 ((Matrix4x4) ref localToWorldMatrix).SetColumn(3, Vector4.op_Implicit(particle4.m_Position));
                 Vector3 vector3    = Vector3.op_Subtraction(!Object.op_Inequality((Object)particle1.m_Transform, (Object)null) ? ((Matrix4x4) ref localToWorldMatrix).MultiplyPoint3x4(particle1.m_EndOffset) : ((Matrix4x4) ref localToWorldMatrix).MultiplyPoint3x4(particle1.m_Transform.get_localPosition()), particle1.m_Position);
                 float   magnitude2 = ((Vector3) ref vector3).get_magnitude();
                 float   num2       = (float)((double)magnitude1 * (1.0 - (double)num1) * 2.0);
                 if ((double)magnitude2 > (double)num2)
                 {
                     DynamicBoneV2.Particle particle5 = particle1;
                     particle5.m_Position = Vector3.op_Addition(particle5.m_Position, Vector3.op_Multiply(vector3, (magnitude2 - num2) / magnitude2));
                 }
             }
             Vector3 vector3_1  = Vector3.op_Subtraction(particle4.m_Position, particle1.m_Position);
             float   magnitude3 = ((Vector3) ref vector3_1).get_magnitude();
             if ((double)magnitude3 > 0.0)
             {
                 DynamicBoneV2.Particle particle5 = particle1;
                 particle5.m_Position = Vector3.op_Addition(particle5.m_Position, Vector3.op_Multiply(vector3_1, (magnitude3 - magnitude1) / magnitude3));
             }
         }
         else
         {
             particle1.m_PrevPosition = particle1.m_Position;
             particle1.m_Position     = particle1.m_Transform.get_position();
         }
     }
 }
 private void InitTransforms()
 {
     for (int index = 0; index < this.m_Particles.Count; ++index)
     {
         DynamicBoneV2.Particle particle = this.m_Particles[index];
         if (Object.op_Inequality((Object)particle.m_Transform, (Object)null))
         {
             particle.m_Transform.set_localPosition(particle.m_InitLocalPosition);
             particle.m_Transform.set_localRotation(particle.m_InitLocalRotation);
         }
     }
 }
 private void SetupParticles()
 {
     this.m_Particles.Clear();
     if (Object.op_Equality((Object)this.m_Root, (Object)null))
     {
         return;
     }
     this.m_LocalGravity       = this.m_Root.InverseTransformDirection(this.m_Gravity);
     this.m_ObjectScale        = Mathf.Abs((float)((Component)this).get_transform().get_lossyScale().x);
     this.m_ObjectPrevPosition = ((Component)this).get_transform().get_position();
     this.m_ObjectMove         = Vector3.get_zero();
     this.m_BoneTotalLength    = 0.0f;
     this.AppendParticles(this.m_Root, -1, 0.0f);
     for (int index = 0; index < this.m_Particles.Count; ++index)
     {
         DynamicBoneV2.Particle particle = this.m_Particles[index];
         particle.m_Damping    = this.m_Damping;
         particle.m_Elasticity = this.m_Elasticity;
         particle.m_Stiffness  = this.m_Stiffness;
         particle.m_Inert      = this.m_Inert;
         particle.m_Radius     = this.m_Radius;
         if ((double)this.m_BoneTotalLength > 0.0)
         {
             float num = particle.m_BoneLength / this.m_BoneTotalLength;
             if (this.m_DampingDistrib != null && this.m_DampingDistrib.get_keys().Length > 0)
             {
                 particle.m_Damping *= this.m_DampingDistrib.Evaluate(num);
             }
             if (this.m_ElasticityDistrib != null && this.m_ElasticityDistrib.get_keys().Length > 0)
             {
                 particle.m_Elasticity *= this.m_ElasticityDistrib.Evaluate(num);
             }
             if (this.m_StiffnessDistrib != null && this.m_StiffnessDistrib.get_keys().Length > 0)
             {
                 particle.m_Stiffness *= this.m_StiffnessDistrib.Evaluate(num);
             }
             if (this.m_InertDistrib != null && this.m_InertDistrib.get_keys().Length > 0)
             {
                 particle.m_Inert *= this.m_InertDistrib.Evaluate(num);
             }
             if (this.m_RadiusDistrib != null && this.m_RadiusDistrib.get_keys().Length > 0)
             {
                 particle.m_Radius *= this.m_RadiusDistrib.Evaluate(num);
             }
         }
         particle.m_Damping    = Mathf.Clamp01(particle.m_Damping);
         particle.m_Elasticity = Mathf.Clamp01(particle.m_Elasticity);
         particle.m_Stiffness  = Mathf.Clamp01(particle.m_Stiffness);
         particle.m_Inert      = Mathf.Clamp01(particle.m_Inert);
         particle.m_Radius     = Mathf.Max(particle.m_Radius, 0.0f);
     }
 }
 public void ResetParticlesPosition()
 {
     for (int index = 0; index < this.m_Particles.Count; ++index)
     {
         DynamicBoneV2.Particle particle = this.m_Particles[index];
         if (Object.op_Inequality((Object)particle.m_Transform, (Object)null))
         {
             particle.m_Position = particle.m_PrevPosition = particle.m_Transform.get_position();
         }
         else
         {
             Transform transform = this.m_Particles[particle.m_ParentIndex].m_Transform;
             particle.m_Position = particle.m_PrevPosition = transform.TransformPoint(particle.m_EndOffset);
         }
     }
     this.m_ObjectPrevPosition = ((Component)this).get_transform().get_position();
 }
 private void ApplyParticlesToTransforms()
 {
     for (int index = 1; index < this.m_Particles.Count; ++index)
     {
         DynamicBoneV2.Particle particle1 = this.m_Particles[index];
         DynamicBoneV2.Particle particle2 = this.m_Particles[particle1.m_ParentIndex];
         if (particle2.m_Transform.get_childCount() <= 1)
         {
             Vector3    vector3_1 = !Object.op_Inequality((Object)particle1.m_Transform, (Object)null) ? particle1.m_EndOffset : particle1.m_Transform.get_localPosition();
             Vector3    vector3_2 = Vector3.op_Subtraction(particle1.m_Position, particle2.m_Position);
             Quaternion rotation  = Quaternion.FromToRotation(particle2.m_Transform.TransformDirection(vector3_1), vector3_2);
             particle2.m_Transform.set_rotation(Quaternion.op_Multiply(rotation, particle2.m_Transform.get_rotation()));
         }
         if (Object.op_Inequality((Object)particle1.m_Transform, (Object)null))
         {
             particle1.m_Transform.set_position(particle1.m_Position);
         }
     }
 }
    private void UpdateParticles2()
    {
        Plane plane = (Plane)null;

        for (int index1 = 1; index1 < this.m_Particles.Count; ++index1)
        {
            DynamicBoneV2.Particle particle1 = this.m_Particles[index1];
            DynamicBoneV2.Particle particle2 = this.m_Particles[particle1.m_ParentIndex];
            float magnitude1;
            if (Object.op_Inequality((Object)particle1.m_Transform, (Object)null))
            {
                Vector3 vector3 = Vector3.op_Subtraction(particle2.m_Transform.get_position(), particle1.m_Transform.get_position());
                magnitude1 = ((Vector3) ref vector3).get_magnitude();
            }
            else
            {
                Matrix4x4 localToWorldMatrix = particle2.m_Transform.get_localToWorldMatrix();
                Vector3   vector3            = ((Matrix4x4) ref localToWorldMatrix).MultiplyVector(particle1.m_EndOffset);
                magnitude1 = ((Vector3) ref vector3).get_magnitude();
            }
            float num1 = Mathf.Lerp(1f, particle1.m_Stiffness, this.m_Weight);
            if ((double)num1 > 0.0 || (double)particle1.m_Elasticity > 0.0)
            {
                Matrix4x4 localToWorldMatrix = particle2.m_Transform.get_localToWorldMatrix();
                ((Matrix4x4) ref localToWorldMatrix).SetColumn(3, Vector4.op_Implicit(particle2.m_Position));
                Vector3 vector3_1 = !Object.op_Inequality((Object)particle1.m_Transform, (Object)null) ? ((Matrix4x4) ref localToWorldMatrix).MultiplyPoint3x4(particle1.m_EndOffset) : ((Matrix4x4) ref localToWorldMatrix).MultiplyPoint3x4(particle1.m_Transform.get_localPosition());
                Vector3 vector3_2 = Vector3.op_Subtraction(vector3_1, particle1.m_Position);
                DynamicBoneV2.Particle particle3 = particle1;
                particle3.m_Position = Vector3.op_Addition(particle3.m_Position, Vector3.op_Multiply(vector3_2, particle1.m_Elasticity));
                if ((double)num1 > 0.0)
                {
                    Vector3 vector3_3  = Vector3.op_Subtraction(vector3_1, particle1.m_Position);
                    float   magnitude2 = ((Vector3) ref vector3_3).get_magnitude();
                    float   num2       = (float)((double)magnitude1 * (1.0 - (double)num1) * 2.0);
                    if ((double)magnitude2 > (double)num2)
                    {
                        DynamicBoneV2.Particle particle4 = particle1;
                        particle4.m_Position = Vector3.op_Addition(particle4.m_Position, Vector3.op_Multiply(vector3_3, (magnitude2 - num2) / magnitude2));
                    }
                }
            }
            if (this.m_Colliders != null)
            {
                float particleRadius = particle1.m_Radius * this.m_ObjectScale;
                for (int index2 = 0; index2 < this.m_Colliders.Count; ++index2)
                {
                    DynamicBoneCollider collider = this.m_Colliders[index2];
                    if (Object.op_Inequality((Object)collider, (Object)null) && ((Behaviour)collider).get_enabled())
                    {
                        collider.Collide(ref particle1.m_Position, particleRadius);
                    }
                }
            }
            if (this.m_FreezeAxis != DynamicBoneV2.FreezeAxis.None)
            {
                switch (this.m_FreezeAxis)
                {
                case DynamicBoneV2.FreezeAxis.X:
                    ((Plane) ref plane).SetNormalAndPosition(particle2.m_Transform.get_right(), particle2.m_Position);
                    break;

                case DynamicBoneV2.FreezeAxis.Y:
                    ((Plane) ref plane).SetNormalAndPosition(particle2.m_Transform.get_up(), particle2.m_Position);
                    break;

                case DynamicBoneV2.FreezeAxis.Z:
                    ((Plane) ref plane).SetNormalAndPosition(particle2.m_Transform.get_forward(), particle2.m_Position);
                    break;
                }
                DynamicBoneV2.Particle particle3 = particle1;
                particle3.m_Position = Vector3.op_Subtraction(particle3.m_Position, Vector3.op_Multiply(((Plane) ref plane).get_normal(), ((Plane) ref plane).GetDistanceToPoint(particle1.m_Position)));
            }
            Vector3 vector3_4  = Vector3.op_Subtraction(particle2.m_Position, particle1.m_Position);
            float   magnitude3 = ((Vector3) ref vector3_4).get_magnitude();
            if ((double)magnitude3 > 0.0)
            {
                DynamicBoneV2.Particle particle3 = particle1;
                particle3.m_Position = Vector3.op_Addition(particle3.m_Position, Vector3.op_Multiply(vector3_4, (magnitude3 - magnitude1) / magnitude3));
            }
        }
    }
    private void UpdateParticles2WithJob()
    {
        Plane plane = (Plane)null;

        for (int index = 1; index < this.m_Particles.Count; ++index)
        {
            DynamicBoneV2.Particle particle1 = this.m_Particles[index];
            DynamicBoneV2.Particle particle2 = this.m_Particles[particle1.m_ParentIndex];
            float magnitude1;
            if (Object.op_Inequality((Object)particle1.m_Transform, (Object)null))
            {
                Vector3 vector3 = Vector3.op_Subtraction(particle2.m_Transform.get_position(), particle1.m_Transform.get_position());
                magnitude1 = ((Vector3) ref vector3).get_magnitude();
            }
            else
            {
                Matrix4x4 localToWorldMatrix = particle2.m_Transform.get_localToWorldMatrix();
                Vector3   vector3            = ((Matrix4x4) ref localToWorldMatrix).MultiplyVector(particle1.m_EndOffset);
                magnitude1 = ((Vector3) ref vector3).get_magnitude();
            }
            float num1 = Mathf.Lerp(1f, particle1.m_Stiffness, this.m_Weight);
            if ((double)num1 > 0.0 || (double)particle1.m_Elasticity > 0.0)
            {
                Matrix4x4 localToWorldMatrix = particle2.m_Transform.get_localToWorldMatrix();
                ((Matrix4x4) ref localToWorldMatrix).SetColumn(3, Vector4.op_Implicit(particle2.m_Position));
                Vector3 vector3_1 = !Object.op_Inequality((Object)particle1.m_Transform, (Object)null) ? ((Matrix4x4) ref localToWorldMatrix).MultiplyPoint3x4(particle1.m_EndOffset) : ((Matrix4x4) ref localToWorldMatrix).MultiplyPoint3x4(particle1.m_Transform.get_localPosition());
                Vector3 vector3_2 = Vector3.op_Subtraction(vector3_1, particle1.m_Position);
                DynamicBoneV2.Particle particle3 = particle1;
                particle3.m_Position = Vector3.op_Addition(particle3.m_Position, Vector3.op_Multiply(vector3_2, particle1.m_Elasticity));
                if ((double)num1 > 0.0)
                {
                    Vector3 vector3_3  = Vector3.op_Subtraction(vector3_1, particle1.m_Position);
                    float   magnitude2 = ((Vector3) ref vector3_3).get_magnitude();
                    float   num2       = (float)((double)magnitude1 * (1.0 - (double)num1) * 2.0);
                    if ((double)magnitude2 > (double)num2)
                    {
                        DynamicBoneV2.Particle particle4 = particle1;
                        particle4.m_Position = Vector3.op_Addition(particle4.m_Position, Vector3.op_Multiply(vector3_3, (magnitude2 - num2) / magnitude2));
                    }
                }
            }
            if (this.m_Colliders != null)
            {
                int count = this.m_Colliders.Count;
                NativeArray <DynamicBoneColliderBase.Bound> nativeArray1;
                ((NativeArray <DynamicBoneColliderBase.Bound>) ref nativeArray1).\u002Ector(count, (Allocator)2, (NativeArrayOptions)1);
                NativeArray <float> nativeArray2;
                ((NativeArray <float>) ref nativeArray2).\u002Ector(count, (Allocator)2, (NativeArrayOptions)1);
                NativeArray <float> nativeArray3;
                ((NativeArray <float>) ref nativeArray3).\u002Ector(count, (Allocator)2, (NativeArrayOptions)1);
                NativeArray <Vector3> nativeArray4;
                ((NativeArray <Vector3>) ref nativeArray4).\u002Ector(count, (Allocator)2, (NativeArrayOptions)1);
                NativeArray <Vector3> nativeArray5;
                ((NativeArray <Vector3>) ref nativeArray5).\u002Ector(count, (Allocator)2, (NativeArrayOptions)1);
                NativeArray <Vector3> nativeArray6;
                ((NativeArray <Vector3>) ref nativeArray6).\u002Ector(count, (Allocator)2, (NativeArrayOptions)1);
                NativeArray <float> nativeArray7;
                ((NativeArray <float>) ref nativeArray7).\u002Ector(count, (Allocator)2, (NativeArrayOptions)1);
                NativeArray <bool> nativeArray8;
                ((NativeArray <bool>) ref nativeArray8).\u002Ector(count, (Allocator)2, (NativeArrayOptions)1);
                DynamicBoneV2.ColliderJob colliderJob = new DynamicBoneV2.ColliderJob()
                {
                    boundAry          = nativeArray1,
                    particlePosition  = particle1.m_Position,
                    particleRadiusAry = nativeArray2,
                    capsuleHeightAry  = nativeArray3,
                    centerAry         = nativeArray4,
                    c0Ary             = nativeArray5,
                    c1Ary             = nativeArray6,
                    radiusAry         = nativeArray7,
                    enabledAry        = nativeArray8
                };
                JobHandle jobHandle = IJobParallelForExtensions.Schedule <DynamicBoneV2.ColliderJob>((M0)colliderJob, count, 0, (JobHandle)null);
                ((JobHandle) ref jobHandle).Complete();
                particle1.m_Position = colliderJob.particlePosition;
                ((NativeArray <DynamicBoneColliderBase.Bound>) ref nativeArray1).Dispose();
                ((NativeArray <float>) ref nativeArray2).Dispose();
                ((NativeArray <float>) ref nativeArray3).Dispose();
                ((NativeArray <Vector3>) ref nativeArray4).Dispose();
                ((NativeArray <Vector3>) ref nativeArray5).Dispose();
                ((NativeArray <Vector3>) ref nativeArray6).Dispose();
                ((NativeArray <float>) ref nativeArray7).Dispose();
                ((NativeArray <bool>) ref nativeArray8).Dispose();
            }
            if (this.m_FreezeAxis != DynamicBoneV2.FreezeAxis.None)
            {
                switch (this.m_FreezeAxis)
                {
                case DynamicBoneV2.FreezeAxis.X:
                    ((Plane) ref plane).SetNormalAndPosition(particle2.m_Transform.get_right(), particle2.m_Position);
                    break;

                case DynamicBoneV2.FreezeAxis.Y:
                    ((Plane) ref plane).SetNormalAndPosition(particle2.m_Transform.get_up(), particle2.m_Position);
                    break;

                case DynamicBoneV2.FreezeAxis.Z:
                    ((Plane) ref plane).SetNormalAndPosition(particle2.m_Transform.get_forward(), particle2.m_Position);
                    break;
                }
                DynamicBoneV2.Particle particle3 = particle1;
                particle3.m_Position = Vector3.op_Subtraction(particle3.m_Position, Vector3.op_Multiply(((Plane) ref plane).get_normal(), ((Plane) ref plane).GetDistanceToPoint(particle1.m_Position)));
            }
            Vector3 vector3_4  = Vector3.op_Subtraction(particle2.m_Position, particle1.m_Position);
            float   magnitude3 = ((Vector3) ref vector3_4).get_magnitude();
            if ((double)magnitude3 > 0.0)
            {
                DynamicBoneV2.Particle particle3 = particle1;
                particle3.m_Position = Vector3.op_Addition(particle3.m_Position, Vector3.op_Multiply(vector3_4, (magnitude3 - magnitude1) / magnitude3));
            }
        }
    }
    private void AppendParticles(Transform b, int parentIndex, float boneLength)
    {
        DynamicBoneV2.Particle particle = new DynamicBoneV2.Particle();
        particle.m_Transform   = b;
        particle.m_ParentIndex = parentIndex;
        if (Object.op_Inequality((Object)b, (Object)null))
        {
            particle.m_Position          = particle.m_PrevPosition = b.get_position();
            particle.m_InitLocalPosition = b.get_localPosition();
            particle.m_InitLocalRotation = b.get_localRotation();
        }
        else
        {
            Transform transform = this.m_Particles[parentIndex].m_Transform;
            if ((double)this.m_EndLength > 0.0)
            {
                Transform parent = transform.get_parent();
                particle.m_EndOffset = !Object.op_Inequality((Object)parent, (Object)null) ? new Vector3(this.m_EndLength, 0.0f, 0.0f) : Vector3.op_Multiply(transform.InverseTransformPoint(Vector3.op_Subtraction(Vector3.op_Multiply(transform.get_position(), 2f), parent.get_position())), this.m_EndLength);
            }
            else
            {
                particle.m_EndOffset = transform.InverseTransformPoint(Vector3.op_Addition(((Component)this).get_transform().TransformDirection(this.m_EndOffset), transform.get_position()));
            }
            particle.m_Position = particle.m_PrevPosition = transform.TransformPoint(particle.m_EndOffset);
        }
        if (parentIndex >= 0)
        {
            double  num       = (double)boneLength;
            Vector3 vector3   = Vector3.op_Subtraction(this.m_Particles[parentIndex].m_Transform.get_position(), particle.m_Position);
            double  magnitude = (double)((Vector3) ref vector3).get_magnitude();
            boneLength             = (float)(num + magnitude);
            particle.m_BoneLength  = boneLength;
            this.m_BoneTotalLength = Mathf.Max(this.m_BoneTotalLength, boneLength);
        }
        int count = this.m_Particles.Count;

        this.m_Particles.Add(particle);
        bool flag1 = false;
        int  num1  = 0;

        if (!Object.op_Inequality((Object)b, (Object)null))
        {
            return;
        }
        for (int index1 = 0; index1 < b.get_childCount(); ++index1)
        {
            bool flag2 = false;
            if (this.m_Exclusions != null)
            {
                for (int index2 = 0; index2 < this.m_Exclusions.Count; ++index2)
                {
                    if (Object.op_Equality((Object)this.m_Exclusions[index2], (Object)b.GetChild(index1)))
                    {
                        flag2 = true;
                        break;
                    }
                }
            }
            if (!flag2)
            {
                for (int index2 = 0; index2 < this.m_notRolls.Count; ++index2)
                {
                    if (Object.op_Equality((Object)this.m_notRolls[index2], (Object)b.GetChild(index1)))
                    {
                        flag1 = true;
                        flag2 = true;
                        num1  = index1;
                        break;
                    }
                }
            }
            if (!flag2)
            {
                this.AppendParticles(b.GetChild(index1), count, boneLength);
            }
        }
        if (flag1)
        {
            for (int index1 = 0; index1 < b.GetChild(num1).get_childCount(); ++index1)
            {
                bool flag2 = false;
                for (int index2 = 0; index2 < this.m_Exclusions.Count; ++index2)
                {
                    if (Object.op_Equality((Object)this.m_Exclusions[index2], (Object)b.GetChild(num1).GetChild(index1)))
                    {
                        flag2 = true;
                        break;
                    }
                }
                if (!flag2)
                {
                    for (int index2 = 0; index2 < this.m_notRolls.Count; ++index2)
                    {
                        if (Object.op_Equality((Object)this.m_notRolls[index2], (Object)b.GetChild(num1).GetChild(index1)))
                        {
                            flag2 = true;
                            break;
                        }
                    }
                }
                if (!flag2)
                {
                    this.AppendParticles(b.GetChild(num1).GetChild(index1), count, boneLength);
                }
            }
        }
        if (b.get_childCount() != 0 || (double)this.m_EndLength <= 0.0 && !Vector3.op_Inequality(this.m_EndOffset, Vector3.get_zero()))
        {
            return;
        }
        this.AppendParticles((Transform)null, count, boneLength);
    }