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; } }
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]); } }
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."); } } }
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); } } }
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; } } }
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; }
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; }