Esempio n. 1
0
 private void Start()
 {
     if (this.vargamchassisbody == null)
     {
         Debug.LogError("The bike needs a rigidbody to function.");
         base.enabled = false;
     }
     this.varwheels      = base.GetComponentsInChildren <WheelCollider>();
     this.varwheelscount = this.varwheels.Length;
     for (int i = 0; i < this.varwheelscount; i++)
     {
         JointSpring suspensionSpring = default(JointSpring);
         suspensionSpring.spring              = 2500f;
         suspensionSpring.damper              = 200f;
         suspensionSpring.targetPosition      = 0f;
         this.varwheels[i].suspensionSpring   = suspensionSpring;
         this.varwheels[i].suspensionDistance = 0.5f;
         this.varpower = 1f;
         this.varbrake = 0f;
     }
     this.vargamchassisbody.centerOfMass = new Vector3(0f, -0.05f, 0f);
     this.varspeedmax = this.vargamspeedmax * this.vargamspeedmax;
     this.varD        = base.transform.root.GetComponentInChildren <clsdismemberator>();
     if (this.varD != null)
     {
         this.varbones = this.varD.vargamskinnedmeshrenderer.bones;
     }
 }
Esempio n. 2
0
 private void OnGUI()
 {
     if (this.vargammodel != null)
     {
         for (int i = 0; i < this.varDbodies.Length; i++)
         {
             if (this.varDbodies[i] != null && GUILayout.Button("Separate " + this.varDbodies[i].name, new GUILayoutOption[0]))
             {
                 clsdismemberator componentInChildren = this.varmodelinstance.GetComponentInChildren <clsdismemberator>();
                 if (componentInChildren != null)
                 {
                     clsurgutils.metdismember(this.varDbodies[i].transform, componentInChildren.vargamstumpmaterial, componentInChildren, componentInChildren.vargamparticleparent, componentInChildren.vargamparticlechild, true, true);
                 }
                 else
                 {
                     Debug.LogError("There's no dismemberator in the specified target.");
                 }
             }
         }
         if (GUILayout.Button("Reistantiate [" + this.vargammodel.name + "]", new GUILayoutOption[0]))
         {
             UnityEngine.Object.Destroy(this.varmodelinstance);
             this.metinstantiatemodel();
             this.varDbodies = this.varmodelinstance.GetComponentsInChildren <Rigidbody>();
             Debug.Log("Reinstantiation complete.\n(please make sure vargammodel is a PREFAB)", this.varmodelinstance);
         }
     }
     else
     {
         GUILayout.Label("A dismemberator tester is on-scene, but it has no model to test.", new GUILayoutOption[0]);
     }
 }
Esempio n. 3
0
    private void OnTriggerEnter(Collider varpother)
    {
        int vargamcasemanager = this.vargamurgentsource.vargamcasemanager;

        if (vargamcasemanager != -2)
        {
            if (vargamcasemanager == -1)
            {
                if (this.vargamactuatorenabled && varpother.gameObject.CompareTag("missile"))
                {
                    if (base.GetComponent <Rigidbody>().isKinematic)
                    {
                        this.metmanagekinematic();
                    }
                    this.vargamactuatorenabled = false;
                }
            }
        }
        else
        {
            if (!this.vargamactuatorenabled || !varpother.CompareTag("missile"))
            {
                return;
            }
            this.metmanagekinematic();
            clsdismemberator componentInChildren = this.vargamurgentsource.GetComponentInChildren <clsdismemberator>();
            if (componentInChildren != null)
            {
                float num = UnityEngine.Random.Range(0f, 0.99f);
                if (num > 0.75f)
                {
                    clsurgutils.metdismember(base.transform, componentInChildren.vargamstumpmaterial, componentInChildren, componentInChildren.vargamparticleparent, componentInChildren.vargamparticlechild, true, true);
                }
            }
            else
            {
                Debug.LogError("No Dismemberator Class in source D host.");
            }
        }
    }
Esempio n. 4
0
    private void metdismember()
    {
        GameObject gameObject = GameObject.Find("/Zombie_D");

        Rigidbody[]      componentsInChildren = gameObject.GetComponentsInChildren <Rigidbody>();
        clsdismemberator componentInChildren  = gameObject.GetComponentInChildren <clsdismemberator>();
        int num = componentsInChildren.Length;

        num = UnityEngine.Random.Range(num / 3, num / 2);
        List <Transform> list        = new List <Transform>();
        bool             varplastcut = false;

        for (int i = 0; i < num; i++)
        {
            if (i == num - 1)
            {
                varplastcut = true;
            }
            Transform transform = clsurgutils.metdismemberpart(componentsInChildren[UnityEngine.Random.Range(2, componentsInChildren.Length)].transform, componentInChildren.vargamstumpmaterial, componentInChildren, null, null, true, varplastcut);
            if (transform != null)
            {
                list.Add(transform);
            }
        }
        foreach (Transform transform2 in list)
        {
            Rigidbody[] componentsInChildren2 = transform2.GetComponentsInChildren <Rigidbody>();
            Vector3     vector = transform2.position - base.transform.position;
            Debug.DrawRay(base.transform.position, vector, Color.yellow);
            for (int j = 0; j < componentsInChildren2.Length; j++)
            {
                componentsInChildren2[j].AddForce(vector * 3.5f, ForceMode.VelocityChange);
                float num2 = UnityEngine.Random.Range(1f, 10f);
                componentsInChildren2[j].AddTorque(new Vector3(num2, num2, num2), ForceMode.VelocityChange);
            }
        }
    }
Esempio n. 5
0
    private void OnCollisionEnter(Collision varpsource)
    {
        int vargamcasemanager = this.vargamurgentsource.vargamcasemanager;

        switch (vargamcasemanager + 3)
        {
        case 0:
            if (this.vargamactuatorenabled && varpsource.gameObject.CompareTag("missile") && this.vargamparttype != clsurgutils.enumparttypes.spine)
            {
                this.vargamactuatorenabled = false;
                base.transform.parent      = this.vargamurgentsource.transform;
                clsurgutils.metdrivebodypart(this.vargamurgentsource, this.vargamparttype, 0);
                clsragdollimbifier componentInChildren = base.transform.root.GetComponentInChildren <clsragdollimbifier>();
                if (componentInChildren != null)
                {
                    switch (this.vargamparttype)
                    {
                    case clsurgutils.enumparttypes.arm_left:
                        componentInChildren.varla = true;
                        break;

                    case clsurgutils.enumparttypes.arm_right:
                    {
                        componentInChildren.varra = true;
                        clsdrop componentInChildren2 = base.transform.root.GetComponentInChildren <clsdrop>();
                        if (componentInChildren2 != null)
                        {
                            componentInChildren2.metdrop(varpsource.impactForceSum, true);
                        }
                        break;
                    }

                    case clsurgutils.enumparttypes.leg_left:
                        componentInChildren.varll = true;
                        break;

                    case clsurgutils.enumparttypes.leg_right:
                        componentInChildren.varrl = true;
                        break;
                    }
                }
                else
                {
                    Debug.LogError("No ragdollimbifier found. Part repair compromised.");
                }
                base.GetComponent <Rigidbody>().AddForceAtPosition(varpsource.impactForceSum, varpsource.contacts[0].point, ForceMode.VelocityChange);
            }
            break;

        case 1:
        {
            if (!this.vargamactuatorenabled || (!varpsource.gameObject.CompareTag("missile") && !varpsource.gameObject.CompareTag("terrain")))
            {
                return;
            }
            clsdismemberator componentInChildren3 = this.vargamurgentsource.GetComponentInChildren <clsdismemberator>();
            if (componentInChildren3 != null)
            {
                float num = UnityEngine.Random.Range(0f, 0.99f);
                if (num > 0.75f)
                {
                    clsurgutils.metdismember(base.transform, componentInChildren3.vargamstumpmaterial, componentInChildren3, componentInChildren3.vargamparticleparent, componentInChildren3.vargamparticlechild, true, true);
                }
            }
            else
            {
                Debug.LogError("No Dismemberator Class in source D host.");
            }
            break;
        }

        case 2:
        {
            if (this.vargamactuatorenabled && varpsource.gameObject.CompareTag("missile"))
            {
                this.vargamactuatorenabled = false;
                clsurgutils.metdriveurgent(this.vargamurgentsource, null);
                base.GetComponent <Rigidbody>().AddForceAtPosition(varpsource.impactForceSum, varpsource.contacts[0].point, ForceMode.VelocityChange);
            }
            clsdrop componentInChildren2 = base.transform.root.GetComponentInChildren <clsdrop>();
            if (componentInChildren2 != null)
            {
                componentInChildren2.metdrop(varpsource.impactForceSum, true);
            }
            break;
        }
        }
    }
Esempio n. 6
0
 public static Transform metdismemberpart(Transform varpbonetodetach, Material varpstumpmaterial, clsdismemberator varpdismemberator = null, GameObject varpparentparticle = null, GameObject varpchildparticle = null, bool varpcinematiccut = true, bool varplastcut = true)
 {
     if (varpbonetodetach == null)
     {
         Debug.LogError("Null body part. Aborting.");
         return null;
     }
     if (varpdismemberator == null)
     {
         varpdismemberator = varpbonetodetach.root.GetComponentInChildren<clsdismemberator>();
     }
     if (varpdismemberator == null)
     {
         Debug.LogError("Null DM. Aborting.");
         return null;
     }
     int num = varpdismemberator.vargamboneindexes.IndexOf(varpbonetodetach);
     if (num < 0)
     {
         Debug.LogError("Bone not indexed. Aborting.");
         return null;
     }
     if (num == 0)
     {
         Debug.LogWarning("Can't separate the ragdoll root bone. Aborting.");
         return null;
     }
     int num2 = varpdismemberator.vargamboneindexes.IndexOf(varpbonetodetach.parent);
     if (num2 < 0)
     {
         return null;
     }
     if (varpdismemberator.vargamcutparts[num])
     {
         return null;
     }
     bool flag = false;
     if (varpstumpmaterial != null)
     {
         flag = true;
     }
     varpdismemberator.vargamcutparts[num] = true;
     varpdismemberator.vargamparallelcutcounter++;
     int num3 = varpdismemberator.vargambonerelationsindexes[num].propchildrenside.propindexes.Length;
     for (int i = 0; i < num3; i++)
     {
         varpdismemberator.vargamcutparts[varpdismemberator.vargambonerelationsindexes[num].propchildrenside.propindexes[i]] = true;
     }
     GameObject gameObject = new GameObject(varpbonetodetach.name + "_stump");
     GameObject gameObject2 = null;
     Transform transform = gameObject.transform;
     Transform transform2 = null;
     SkinnedMeshRenderer vargamskinnedmeshrenderer = varpdismemberator.vargamskinnedmeshrenderer;
     SkinnedMeshRenderer skinnedMeshRenderer = null;
     Mesh sharedMesh = vargamskinnedmeshrenderer.sharedMesh;
     Transform[] bones = vargamskinnedmeshrenderer.bones;
     Mesh mesh = new Mesh();
     Mesh mesh2 = null;
     Vector3[] vertices = sharedMesh.vertices;
     Vector3[] normals = sharedMesh.normals;
     Vector4[] tangents = sharedMesh.tangents;
     Vector2[] uv = sharedMesh.uv;
     Vector2[] uv2 = sharedMesh.uv2;
     BoneWeight[] boneWeights = sharedMesh.boneWeights;
     int[] triangles = sharedMesh.triangles;
     Matrix4x4[] bindposes = sharedMesh.bindposes;
     Material[] materials = vargamskinnedmeshrenderer.materials;
     Transform[] array = new Transform[bones.Length];
     bones.CopyTo(array, 0);
     Matrix4x4[] array2 = new Matrix4x4[bindposes.Length];
     bindposes.CopyTo(array2, 0);
     gameObject.layer = bones[num2].gameObject.layer;
     transform.position = varpbonetodetach.position;
     transform.rotation = varpbonetodetach.rotation;
     transform.localScale = varpbonetodetach.lossyScale;
     int[] propindexes = varpdismemberator.vargambonerelationsindexes[num].propchildrenside.propindexes;
     int num4 = propindexes.Length;
     List<int> list = new List<int>();
     int j = -1;
     while (j < num4)
     {
         GameObject gameObject3 = new GameObject(varpbonetodetach.name + "_clone");
         Transform transform3 = gameObject3.transform;
         CharacterJoint characterJoint = null;
         int num5;
         Vector3 localScale;
         if (j == -1)
         {
             num5 = num;
             gameObject2 = gameObject3;
             transform2 = transform3;
             skinnedMeshRenderer = gameObject3.AddComponent<SkinnedMeshRenderer>();
             mesh2 = new Mesh();
             localScale = bones[num5].lossyScale;
             goto IL_313;
         }
         num5 = propindexes[j];
         if (num5 != 0)
         {
             int num6 = varpdismemberator.vargamboneindexesparents[num5];
             transform3.parent = array[num6];
             characterJoint = bones[num5].GetComponent<CharacterJoint>();
             localScale = bones[num5].localScale;
             goto IL_313;
         }
         Debug.LogError("Interrupting " + varpbonetodetach.name + " cut since it was not compiled properly.This normally leads to a broken cut.\nPlease fix the model and rerun the dismemberator tool on it.");
         IL_72F:
         j++;
         continue;
         IL_313:
         clsurgentactuator component = bones[num5].GetComponent<clsurgentactuator>();
         if (component != null)
         {
             component.vargamactuatorenabled = false;
         }
         gameObject3.name = bones[num5].name;
         gameObject3.layer = bones[num5].gameObject.layer;
         transform3.position = bones[num5].position;
         transform3.rotation = bones[num5].rotation;
         transform3.localScale = localScale;
         Rigidbody component2 = bones[num5].GetComponent<Rigidbody>();
         if (component2 != null)
         {
             Rigidbody rigidbody = gameObject3.AddComponent<Rigidbody>();
             rigidbody.drag = 1f;
             rigidbody.angularDrag = 1f;
             rigidbody.mass = component2.mass / 2f;
             rigidbody.isKinematic = true;
             rigidbody.constraints = component2.constraints;
         }
         Collider component3 = bones[num5].GetComponent<Collider>();
         if (component3 != null)
         {
             Type type = component3.GetType();
             string name = type.Name;
             if (name == typeof(SphereCollider).Name)
             {
                 SphereCollider component4 = bones[num5].GetComponent<SphereCollider>();
                 SphereCollider sphereCollider = gameObject3.AddComponent<SphereCollider>();
                 sphereCollider.radius = component4.radius;
                 sphereCollider.center = component4.center;
                 component4.enabled = false;
             }
             else if (name == typeof(CapsuleCollider).Name)
             {
                 CapsuleCollider component5 = bones[num5].GetComponent<CapsuleCollider>();
                 CapsuleCollider capsuleCollider = gameObject3.AddComponent<CapsuleCollider>();
                 capsuleCollider.height = component5.height;
                 capsuleCollider.direction = component5.direction;
                 capsuleCollider.radius = component5.radius;
                 capsuleCollider.center = component5.center;
                 component5.enabled = false;
             }
             else if (name == typeof(BoxCollider).Name)
             {
                 BoxCollider component6 = bones[num5].GetComponent<BoxCollider>();
                 BoxCollider boxCollider = gameObject3.AddComponent<BoxCollider>();
                 boxCollider.center = component6.center;
                 boxCollider.size = component6.size;
                 component6.enabled = false;
             }
             else if (name == typeof(MeshCollider).Name)
             {
                 MeshCollider component7 = bones[num5].GetComponent<MeshCollider>();
                 MeshCollider meshCollider = gameObject3.AddComponent<MeshCollider>();
                 meshCollider.sharedMesh = component7.sharedMesh;
                 meshCollider.convex = component7.convex;
                 component7.enabled = false;
             }
             else if (name == typeof(WheelCollider).Name)
             {
                 WheelCollider component8 = bones[num5].GetComponent<WheelCollider>();
                 BoxCollider boxCollider2 = gameObject3.AddComponent<BoxCollider>();
                 boxCollider2.center = component8.center;
                 boxCollider2.size = new Vector3(component8.radius / 3f, component8.radius * 2f, component8.radius * 2f);
                 if (component2 == null)
                 {
                     Rigidbody rigidbody = gameObject3.AddComponent<Rigidbody>();
                     rigidbody.mass = component8.mass;
                     rigidbody.isKinematic = true;
                 }
                 component8.enabled = false;
             }
             else
             {
                 if (name == typeof(Collider).Name)
                 {
                     Debug.LogError("Missing collider on cut.");
                     return null;
                 }
                 Debug.LogError("Can't manage collider type " + bones[num5].GetComponent<Collider>().GetType().ToString());
                 return null;
             }
         }
         if (characterJoint != null)
         {
             if (varpdismemberator.vargamboneindexescharacterjointconnect[num5] > -1)
             {
                 characterJoint = gameObject3.AddComponent<CharacterJoint>();
                 Rigidbody component9 = array[varpdismemberator.vargamboneindexescharacterjointconnect[num5]].GetComponent<Rigidbody>();
                 if (component9 == null)
                 {
                     characterJoint.connectedBody = array[num].GetComponent<Rigidbody>();
                 }
                 else
                 {
                     characterJoint.connectedBody = array[varpdismemberator.vargamboneindexescharacterjointconnect[num5]].GetComponent<Rigidbody>();
                 }
             }
             characterJoint.axis = Vector3.forward;
         }
         varpdismemberator.vargamcutpartscache.Add(bones[num5]);
         array[num5] = transform3;
         goto IL_72F;
     }
     int num7 = varpdismemberator.vargamrigidbodyconnections[num].propindexes.Length;
     if (num7 > 1)
     {
         int num8 = varpdismemberator.vargamrigidbodyconnections[num].propindexes[0];
         if (num8 > -1)
         {
             Rigidbody component2 = bones[num8].GetComponent<Rigidbody>();
             if (component2 != null)
             {
                 for (int k = 1; k < varpdismemberator.vargamrigidbodyconnections[num].propindexes.Length; k++)
                 {
                     num8 = varpdismemberator.vargamrigidbodyconnections[num].propindexes[k];
                     if (bones[num8] != null)
                     {
                         CharacterJoint characterJoint = bones[num8].GetComponent<CharacterJoint>();
                         if (characterJoint != null)
                         {
                             characterJoint.connectedBody = component2;
                             characterJoint.axis = Vector3.forward;
                         }
                     }
                 }
             }
         }
     }
     int num9 = varpdismemberator.vargamboneseparationvertices[num].propindexes.Length;
     int num10 = 0;
     int[] array3 = new int[0];
     int[] array4 = new int[0];
     if (num9 > 0)
     {
         num10 = (num9 - 2) * 3;
     }
     int num11 = triangles.Length;
     int num12 = varpdismemberator.vargambonefulltrianglesindexes[num].propindexes.Length * 3;
     array3 = new int[num11 + num10];
     array4 = new int[num12 + num10];
     triangles.CopyTo(array3, 0);
     for (int l = 0; l < varpdismemberator.vargambonefulltrianglesindexes[num].propindexes.Length; l++)
     {
         int num13 = varpdismemberator.vargambonefulltrianglesindexes[num].propindexes[l];
         int num14 = num13 + 1;
         int num15 = num13 + 2;
         array3[num13] = 0;
         array3[num14] = 0;
         array3[num15] = 0;
         int num16 = l * 3;
         array4[num16] = triangles[num13];
         array4[num16 + 1] = triangles[num14];
         array4[num16 + 2] = triangles[num15];
     }
     int num17 = materials.Length;
     int num18 = -1;
     Material[] array5 = new Material[0];
     bool flag2 = false;
     int[] array6 = new int[0];
     if (varpstumpmaterial != null)
     {
         for (int m = 0; m < num17; m++)
         {
             if (materials[m].name == varpstumpmaterial.name || materials[m].name == varpstumpmaterial.name + " (Instance)")
             {
                 num18 = m;
                 array6 = sharedMesh.GetTriangles(num18);
                 break;
             }
         }
         if (num18 < 0)
         {
             array5 = new Material[num17 + 1];
             materials.CopyTo(array5, 0);
             array5[num17] = varpstumpmaterial;
             num18 = num17;
             flag2 = true;
         }
         else
         {
             array5 = materials;
         }
     }
     else
     {
         array5 = materials;
     }
     Material[] array7 = new Material[array5.Length];
     array5.CopyTo(array7, 0);
     int[] propindexes2 = varpdismemberator.vargambonerelationsindexes[num].propparentside.propindexes;
     for (int n = 0; n < propindexes2.Length; n++)
     {
         int num19 = propindexes2[n];
         array[num19] = transform2;
         array2[num19] = bindposes[num];
     }
     int num20 = varpdismemberator.vargamboneseparationsubmeshhelper.Length * 3;
     propindexes2 = varpdismemberator.vargambonerelationsindexes[num].propchildrenside.propindexes;
     for (int num21 = 0; num21 < propindexes2.Length; num21++)
     {
         int num19 = propindexes2[num21];
         bones[num19] = transform;
         bindposes[num19] = bindposes[num];
         int num22 = varpdismemberator.vargamboneseparationpatchtriangleindexes[num19].propindexes.Length;
         if (num22 > 0)
         {
             int[] array8 = new int[num22 * 3];
             int num23 = 0;
             for (int num24 = 0; num24 < num22; num24++)
             {
                 int num25 = varpdismemberator.vargamboneseparationpatchtriangleindexes[num19].propindexes[num24];
                 array8[num23] = array6[num25];
                 array8[num23 + 1] = array6[num25 + 1];
                 array8[num23 + 2] = array6[num25 + 2];
                 array6[num25] = 0;
                 array6[num25 + 1] = 0;
                 array6[num25 + 2] = 0;
                 num23 += 3;
             }
             list.AddRange(array8);
             varpdismemberator.vargamboneseparationpatchtriangleindexes[num19].propindexes = new int[0];
         }
     }
     gameObject.transform.parent = bones[num2];
     int[] array9 = new int[0];
     int[] array10 = new int[0];
     if (flag)
     {
         int num26 = varpdismemberator.vargamboneseparationvertices[num].propindexes.Length;
         int num27 = vertices.Length;
         int num28 = num26;
         int num29 = num27 + num28;
         Vector3 vector = varpdismemberator.vargamoriginalbonepositions[num] - varpdismemberator.vargamoriginalbonepositions[num2];
         Vector3 vector2 = varpdismemberator.vargamoriginalbonepositions[num2] - varpdismemberator.vargamoriginalbonepositions[num];
         Vector3[] array11 = new Vector3[num29];
         Vector2[] array12 = new Vector2[num29];
         Vector3[] array13 = new Vector3[num29];
         Vector4[] array14 = new Vector4[num29];
         Vector3[] array15 = new Vector3[num29];
         BoneWeight[] array16 = new BoneWeight[num29];
         int[] array17 = new int[num26];
         vertices.CopyTo(array11, 0);
         uv.CopyTo(array12, 0);
         normals.CopyTo(array13, 0);
         normals.CopyTo(array15, 0);
         tangents.CopyTo(array14, 0);
         boneWeights.CopyTo(array16, 0);
         for (int num30 = 0; num30 < num26; num30++)
         {
             int num31 = varpdismemberator.vargamboneseparationvertices[num].propindexes[num30];
             int num32 = num30 + num27;
             array11[num32] = vertices[num31];
             array16[num32] = boneWeights[num31];
             array13[num32] = vector;
             array14[num32] = tangents[num31];
             array15[num32] = vector2;
             array17[num30] = num32;
         }
         varpdismemberator.vargamboneseparationverticesuvhelper[num].propuvcoordinates.CopyTo(array12, num27);
         array9 = new int[num10];
         array10 = new int[num10];
         if (num26 > 0)
         {
             int num33 = array17[0];
             int num34 = 0;
             for (int num35 = 2; num35 < num9; num35++)
             {
                 int num36 = num35 - 2 + num34;
                 int num37 = num35 - 1 + num34;
                 int num38 = num35 + num34;
                 int num39 = array17[num35 - 1];
                 int num40 = array17[num35];
                 array10[num36] = num33;
                 array10[num37] = num39;
                 array10[num38] = num40;
                 array9[num36] = num33;
                 array9[num37] = num40;
                 array9[num38] = num39;
                 num34 += 2;
             }
         }
         array10.CopyTo(array3, num11);
         array9.CopyTo(array4, num12);
         int[] destinationArray = new int[num20];
         Array.Copy(array3, destinationArray, num20);
         bones[num] = gameObject.transform;
         mesh.vertices = array11;
         mesh.normals = array13;
         mesh.tangents = array14;
         mesh.uv = array12;
         mesh.boneWeights = array16;
         mesh.triangles = array3;
         mesh.bindposes = bindposes;
         mesh2.vertices = array11;
         mesh2.normals = array15;
         mesh2.tangents = array14;
         mesh2.uv = array12;
         mesh2.boneWeights = array16;
         mesh2.triangles = array4;
         mesh2.bindposes = array2;
     }
     else
     {
         bones[num] = gameObject.transform;
         mesh.vertices = vertices;
         mesh.normals = normals;
         mesh.tangents = tangents;
         mesh.uv = uv;
         mesh.uv2 = uv2;
         mesh.boneWeights = boneWeights;
         mesh.triangles = array3;
         mesh.bindposes = bindposes;
         mesh2.vertices = vertices;
         mesh2.normals = normals;
         mesh2.tangents = tangents;
         mesh2.uv = uv;
         mesh2.uv2 = uv2;
         mesh2.boneWeights = boneWeights;
         mesh2.triangles = array4;
         mesh2.bindposes = array2;
     }
     int num41 = sharedMesh.subMeshCount;
     if (flag2)
     {
         num41++;
     }
     int[][] array18 = new int[num41][];
     int[][] array19 = new int[num41][];
     for (int num42 = 0; num42 < num41; num42++)
     {
         if (num42 == num18)
         {
             array18[num42] = new int[array6.Length + array10.Length];
             array6.CopyTo(array18[num42], 0);
             array10.CopyTo(array18[num42], array6.Length);
             list.AddRange(array9);
             array19[num42] = list.ToArray();
         }
         else
         {
             array18[num42] = sharedMesh.GetTriangles(num42);
             array19[num42] = new int[array18[num42].Length];
         }
     }
     if (array3.Length > 0)
     {
         for (int num43 = 0; num43 < num20; num43 += 3)
         {
             if (array3[num43] == 0 && array3[num43 + 1] == 0)
             {
                 int num44 = (int)varpdismemberator.vargamboneseparationsubmeshhelper[num43 / 3].x;
                 int num45 = (int)varpdismemberator.vargamboneseparationsubmeshhelper[num43 / 3].y * 3;
                 array18[num44][num45] = 0;
                 array18[num44][num45 + 1] = 0;
                 array18[num44][num45 + 2] = 0;
                 array19[num44][num45] = triangles[num43];
                 array19[num44][num45 + 1] = triangles[num43 + 1];
                 array19[num44][num45 + 2] = triangles[num43 + 2];
             }
         }
     }
     mesh.subMeshCount = num41;
     mesh2.subMeshCount = num41;
     for (int num46 = 0; num46 < num41; num46++)
     {
         mesh.SetTriangles(array18[num46], num46);
         mesh2.SetTriangles(array19[num46], num46);
     }
     int num47 = array6.Length;
     varpdismemberator.vargamboneseparationpatchtriangleindexes[num].propindexes = new int[array10.Length / 3];
     for (int num48 = 0; num48 < varpdismemberator.vargamboneseparationpatchtriangleindexes[num].propindexes.Length; num48++)
     {
         varpdismemberator.vargamboneseparationpatchtriangleindexes[num].propindexes[num48] = num47;
         num47 += 3;
     }
     varpdismemberator.vargamskinnedmeshrenderer.bones = bones;
     varpdismemberator.vargamskinnedmeshrenderer.sharedMesh = mesh;
     varpdismemberator.vargamskinnedmeshrenderer.materials = array5;
     skinnedMeshRenderer.bones = array;
     skinnedMeshRenderer.sharedMesh = mesh2;
     skinnedMeshRenderer.materials = array7;
     varpdismemberator.vargamparallelcutcounter--;
     if (varpdismemberator.vargamparallelcutcounter == 0)
     {
         for (int num49 = 0; num49 < varpdismemberator.vargamcutpartscache.Count; num49++)
         {
             if (varpdismemberator.vargamcutpartscache[num49].gameObject != null)
             {
                 UnityEngine.Object.Destroy(varpdismemberator.vargamcutpartscache[num49].gameObject);
             }
         }
         varpdismemberator.vargamcutpartscache.Clear();
     }
     if (varpparentparticle != null)
     {
         GameObject gameObject4 = UnityEngine.Object.Instantiate(varpparentparticle, transform.position, transform.rotation) as GameObject;
         gameObject4.transform.parent = transform;
     }
     if (varpchildparticle != null)
     {
         GameObject gameObject5 = UnityEngine.Object.Instantiate(varpchildparticle, transform2.position, Quaternion.Inverse(transform2.rotation)) as GameObject;
         gameObject5.transform.parent = transform2;
     }
     if (varpcinematiccut)
     {
         Rigidbody[] componentsInChildren = gameObject2.GetComponentsInChildren<Rigidbody>();
         for (int num50 = 0; num50 < componentsInChildren.Length; num50++)
         {
             componentsInChildren[num50].isKinematic = false;
             componentsInChildren[num50].velocity = Vector3.zero;
             componentsInChildren[num50].angularVelocity = Vector3.zero;
         }
         if (gameObject2.GetComponent<Rigidbody>() != null)
         {
             gameObject2.GetComponent<Rigidbody>().velocity = Vector3.zero;
             gameObject2.GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
         }
     }
     return transform2;
 }
Esempio n. 7
0
 public static bool metdismember(Transform varpbonetodetach, Material varpstumpmaterial, clsdismemberator varpdismemberator = null, GameObject varpparentparticle = null, GameObject varpchildparticle = null, bool varpcinematiccut = true, bool varplastcut = true)
 {
     bool result = true;
     Transform x = clsurgutils.metdismemberpart(varpbonetodetach, varpstumpmaterial, varpdismemberator, varpparentparticle, varpchildparticle, varpcinematiccut, true);
     if (x == null)
     {
         result = false;
     }
     return result;
 }