Last active
June 10, 2020 11:47
-
-
Save i30817/b7cf69f544e50aa7f4d643c53f2e5838 to your computer and use it in GitHub Desktop.
diff shadowrun disguises null pointer dragonfall to hongkong
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static CachedMesh Initiate(GameObject core, GameObject root, bool destroyImmediate = false) | |
{ | |
Vector3 position = root.transform.parent.transform.position; | |
Quaternion rotation = root.transform.parent.transform.rotation; | |
root.transform.parent.transform.position = new Vector3(0f, 0f, 0f); | |
root.transform.parent.transform.rotation = new Quaternion(0f, 0f, 0f, 0f); | |
root.transform.localPosition = new Vector3(0f, 0f, 0f); | |
root.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f); | |
SkinnedMeshRenderer[] componentsInChildren = core.GetComponentsInChildren<SkinnedMeshRenderer>(); | |
List<Transform> list = new List<Transform>(); | |
List<BoneWeight> list2 = new List<BoneWeight>(); | |
List<CombineInstance> list3 = new List<CombineInstance>(); | |
List<Texture2D> list4 = new List<Texture2D>(); | |
int num = 0; | |
SkinnedMeshRenderer[] array = componentsInChildren; | |
foreach (SkinnedMeshRenderer skinnedMeshRenderer in array) | |
{ | |
if ((Object)skinnedMeshRenderer == (Object)null || (Object)skinnedMeshRenderer.sharedMesh == (Object)null) | |
{ | |
Transform transform = core.transform; | |
while ((Object)transform.parent != (Object)null) | |
{ | |
transform = transform.parent; | |
} | |
string name = transform.name; | |
Debug.LogError("Missing SkinnedMeshRenderer from root object: " + name + ", skipping"); | |
} | |
else | |
{ | |
skinnedMeshRenderer.transform.localPosition = new Vector3(0f, 0f, 0f); | |
skinnedMeshRenderer.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f); | |
num += skinnedMeshRenderer.sharedMesh.subMeshCount; | |
} | |
} | |
int[] array2 = new int[num]; | |
int num2 = 0; | |
for (int j = 0; j < componentsInChildren.Length; j++) | |
{ | |
SkinnedMeshRenderer skinnedMeshRenderer2 = componentsInChildren[j]; | |
if (!((Object)skinnedMeshRenderer2 == (Object)null) && !((Object)skinnedMeshRenderer2.sharedMesh == (Object)null) && j < array2.Length) | |
{ | |
BoneWeight[] boneWeights = skinnedMeshRenderer2.sharedMesh.boneWeights; | |
BoneWeight[] array3 = boneWeights; | |
foreach (BoneWeight boneWeight in array3) | |
{ | |
BoneWeight item = boneWeight; | |
item.boneIndex0 += num2; | |
item.boneIndex1 += num2; | |
item.boneIndex2 += num2; | |
item.boneIndex3 += num2; | |
list2.Add(item); | |
} | |
num2 += skinnedMeshRenderer2.bones.Length; | |
Transform[] bones = skinnedMeshRenderer2.bones; | |
Transform[] array4 = bones; | |
foreach (Transform item2 in array4) | |
{ | |
list.Add(item2); | |
} | |
if ((Object)skinnedMeshRenderer2.sharedMaterial.mainTexture != (Object)null) | |
{ | |
list4.Add(skinnedMeshRenderer2.renderer.sharedMaterial.mainTexture as Texture2D); | |
} | |
CombineInstance item3 = default(CombineInstance); | |
item3.mesh = skinnedMeshRenderer2.sharedMesh; | |
array2[j] = item3.mesh.vertexCount; | |
item3.transform = skinnedMeshRenderer2.transform.localToWorldMatrix; | |
list3.Add(item3); | |
if (!destroyImmediate) | |
{ | |
Object.Destroy(skinnedMeshRenderer2.gameObject); | |
} | |
else | |
{ | |
Object.DestroyImmediate(skinnedMeshRenderer2.gameObject); | |
} | |
} | |
} | |
List<string> list5 = new List<string>(); | |
foreach (Transform item4 in list) | |
{ | |
list5.Add(item4.name); | |
} | |
List<Matrix4x4> list6 = new List<Matrix4x4>(); | |
for (int m = 0; m < list.Count; m++) | |
{ | |
list6.Add(list[m].worldToLocalMatrix * root.transform.worldToLocalMatrix); | |
} | |
SkinnedMeshRenderer skinnedMeshRenderer3 = core.gameObject.GetComponent<SkinnedMeshRenderer>(); | |
if ((Object)skinnedMeshRenderer3 == (Object)null) | |
{ | |
skinnedMeshRenderer3 = core.gameObject.AddComponent<SkinnedMeshRenderer>(); | |
} | |
skinnedMeshRenderer3.sharedMesh = new Mesh(); | |
skinnedMeshRenderer3.sharedMesh.CombineMeshes(list3.ToArray(), true, true); | |
Texture2D texture2D = null; | |
RuntimePlatform platform = Application.platform; | |
texture2D = ((platform != RuntimePlatform.Android && platform != RuntimePlatform.IPhonePlayer) ? new Texture2D(0, 0, TextureFormat.RGBA32, false) : new Texture2D(0, 0, TextureFormat.RGBA4444, false)); | |
Rect[] array5 = texture2D.PackTextures(list4.ToArray(), 0, 2048, true); | |
texture2D.name = "SKINNED MESH ATLAS"; | |
Vector2[] uv = skinnedMeshRenderer3.sharedMesh.uv; | |
Vector2[] array6 = new Vector2[uv.Length]; | |
int num3 = 0; | |
int num4 = 0; | |
if (array5.Length > 0) | |
{ | |
for (int n = 0; n < array6.Length; n++) | |
{ | |
array6[n].x = Mathf.Lerp(array5[num3].xMin, array5[num3].xMax, uv[n].x); | |
array6[n].y = Mathf.Lerp(array5[num3].yMin, array5[num3].yMax, uv[n].y); | |
if (n >= array2[num3] + num4 - 1) | |
{ | |
num4 += array2[num3]; | |
num3++; | |
} | |
if (num3 >= array5.Length) | |
{ | |
num3 = array5.Length - 1; | |
} | |
} | |
} | |
Material material = new Material(Shader.Find("HBS/Transparent/Cutout/Diffuse")); | |
material.mainTexture = texture2D; | |
skinnedMeshRenderer3.sharedMesh.uv = array6; | |
skinnedMeshRenderer3.sharedMaterial = material; | |
skinnedMeshRenderer3.bones = list.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.boneWeights = list2.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.bindposes = list6.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.RecalculateBounds(); | |
root.transform.parent.transform.localPosition = position; | |
root.transform.parent.transform.localRotation = rotation; | |
CachedMesh cachedMesh = new CachedMesh(); | |
cachedMesh.mesh = skinnedMeshRenderer3.sharedMesh; | |
cachedMesh.tex = texture2D; | |
cachedMesh.boneNames = list5; | |
for (int num5 = 0; num5 < list4.Count; num5++) | |
{ | |
if (list4[num5].name.ToLower().Contains("clone")) | |
{ | |
if (destroyImmediate) | |
{ | |
Object.DestroyImmediate(list4[num5]); | |
} | |
else | |
{ | |
Object.Destroy(list4[num5]); | |
} | |
} | |
} | |
return cachedMesh; | |
} | |
public static CachedMesh Initiate(GameObject core, GameObject root, bool destroyImmediate = false) | |
{ | |
Vector3 position = root.transform.parent.transform.position; | |
Quaternion rotation = root.transform.parent.transform.rotation; | |
root.transform.parent.transform.position = new Vector3(0f, 0f, 0f); | |
root.transform.parent.transform.rotation = new Quaternion(0f, 0f, 0f, 0f); | |
root.transform.localPosition = new Vector3(0f, 0f, 0f); | |
root.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f); | |
SkinnedMeshRenderer[] componentsInChildren = core.GetComponentsInChildren<SkinnedMeshRenderer>(); | |
List<Transform> list = new List<Transform>(); | |
List<BoneWeight> list2 = new List<BoneWeight>(); | |
List<CombineInstance> list3 = new List<CombineInstance>(); | |
List<Texture2D> list4 = new List<Texture2D>(); | |
int num = 0; | |
SkinnedMeshRenderer[] array = componentsInChildren; | |
foreach (SkinnedMeshRenderer skinnedMeshRenderer in array) | |
{ | |
if ((Object)skinnedMeshRenderer == (Object)null || (Object)skinnedMeshRenderer.sharedMesh == (Object)null) | |
{ | |
Transform transform = core.transform; | |
while ((Object)transform.parent != (Object)null) | |
{ | |
transform = transform.parent; | |
} | |
string name = transform.name; | |
Debug.LogError("Missing SkinnedMeshRenderer from root object: " + name + ", skipping"); | |
} | |
else | |
{ | |
skinnedMeshRenderer.transform.localPosition = new Vector3(0f, 0f, 0f); | |
skinnedMeshRenderer.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f); | |
num += skinnedMeshRenderer.sharedMesh.subMeshCount; | |
} | |
} | |
int[] array2 = new int[num]; | |
int num2 = 0; | |
for (int j = 0; j < componentsInChildren.Length; j++) | |
{ | |
SkinnedMeshRenderer skinnedMeshRenderer2 = componentsInChildren[j]; | |
if (!((Object)skinnedMeshRenderer2 == (Object)null) && !((Object)skinnedMeshRenderer2.sharedMesh == (Object)null) && j < array2.Length) | |
{ | |
BoneWeight[] boneWeights = skinnedMeshRenderer2.sharedMesh.boneWeights; | |
BoneWeight[] array3 = boneWeights; | |
foreach (BoneWeight boneWeight in array3) | |
{ | |
BoneWeight item = boneWeight; | |
item.boneIndex0 += num2; | |
item.boneIndex1 += num2; | |
item.boneIndex2 += num2; | |
item.boneIndex3 += num2; | |
list2.Add(item); | |
} | |
num2 += skinnedMeshRenderer2.bones.Length; | |
Transform[] bones = skinnedMeshRenderer2.bones; | |
Transform[] array4 = bones; | |
foreach (Transform item2 in array4) | |
{ | |
list.Add(item2); | |
} | |
if ((Object)skinnedMeshRenderer2.sharedMaterial.mainTexture != (Object)null) | |
{ | |
list4.Add(skinnedMeshRenderer2.renderer.sharedMaterial.mainTexture as Texture2D); | |
} | |
CombineInstance item3 = default(CombineInstance); | |
item3.mesh = skinnedMeshRenderer2.sharedMesh; | |
array2[j] = item3.mesh.vertexCount; | |
item3.transform = skinnedMeshRenderer2.transform.localToWorldMatrix; | |
list3.Add(item3); | |
if (!destroyImmediate) | |
{ | |
Object.Destroy(skinnedMeshRenderer2.gameObject); | |
} | |
else | |
{ | |
Object.DestroyImmediate(skinnedMeshRenderer2.gameObject); | |
} | |
} | |
} | |
List<string> list5 = new List<string>(); | |
foreach (Transform item4 in list) | |
{ | |
list5.Add(item4.name); | |
} | |
List<Matrix4x4> list6 = new List<Matrix4x4>(); | |
for (int m = 0; m < list.Count; m++) | |
{ | |
list6.Add(list[m].worldToLocalMatrix * root.transform.worldToLocalMatrix); | |
} | |
SkinnedMeshRenderer skinnedMeshRenderer3 = core.gameObject.GetComponent<SkinnedMeshRenderer>(); | |
if ((Object)skinnedMeshRenderer3 == (Object)null) | |
{ | |
skinnedMeshRenderer3 = core.gameObject.AddComponent<SkinnedMeshRenderer>(); | |
} | |
skinnedMeshRenderer3.sharedMesh = new Mesh(); | |
skinnedMeshRenderer3.sharedMesh.CombineMeshes(list3.ToArray(), true, true); | |
Texture2D texture2D = null; | |
RuntimePlatform platform = Application.platform; | |
texture2D = ((platform != RuntimePlatform.Android && platform != RuntimePlatform.IPhonePlayer) ? new Texture2D(0, 0, TextureFormat.RGBA32, false) : new Texture2D(0, 0, TextureFormat.RGBA4444, false)); | |
Rect[] array5 = texture2D.PackTextures(list4.ToArray(), 0, 2048, true); | |
texture2D.name = "SKINNED MESH ATLAS"; | |
Vector2[] uv = skinnedMeshRenderer3.sharedMesh.uv; | |
Vector2[] array6 = new Vector2[uv.Length]; | |
int num3 = 0; | |
int num4 = 0; | |
if (array5.Length > 0) | |
{ | |
for (int n = 0; n < array6.Length; n++) | |
{ | |
array6[n].x = Mathf.Lerp(array5[num3].xMin, array5[num3].xMax, uv[n].x); | |
array6[n].y = Mathf.Lerp(array5[num3].yMin, array5[num3].yMax, uv[n].y); | |
if (n >= array2[num3] + num4 - 1) | |
{ | |
num4 += array2[num3]; | |
num3++; | |
} | |
if (num3 >= array5.Length) | |
{ | |
num3 = array5.Length - 1; | |
} | |
} | |
} | |
Material material = new Material(Shader.Find("HBS/Transparent/Cutout/Diffuse")); | |
material.mainTexture = texture2D; | |
skinnedMeshRenderer3.sharedMesh.uv = array6; | |
skinnedMeshRenderer3.sharedMaterial = material; | |
skinnedMeshRenderer3.bones = list.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.boneWeights = list2.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.bindposes = list6.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.RecalculateBounds(); | |
root.transform.parent.transform.localPosition = position; | |
root.transform.parent.transform.localRotation = rotation; | |
CachedMesh cachedMesh = new CachedMesh(); | |
cachedMesh.mesh = skinnedMeshRenderer3.sharedMesh; | |
cachedMesh.tex = texture2D; | |
cachedMesh.boneNames = list5; | |
for (int num5 = 0; num5 < list4.Count; num5++) | |
{ | |
if (list4[num5].name.ToLower().Contains("clone")) | |
{ | |
if (destroyImmediate) | |
{ | |
Object.DestroyImmediate(list4[num5]); | |
} | |
else | |
{ | |
Object.Destroy(list4[num5]); | |
} | |
} | |
} | |
return cachedMesh; | |
} | |
public static CachedMesh Initiate(GameObject core, GameObject root, bool destroyImmediate = false) | |
{ | |
Vector3 position = root.transform.parent.transform.position; | |
Quaternion rotation = root.transform.parent.transform.rotation; | |
root.transform.parent.transform.position = new Vector3(0f, 0f, 0f); | |
root.transform.parent.transform.rotation = new Quaternion(0f, 0f, 0f, 0f); | |
root.transform.localPosition = new Vector3(0f, 0f, 0f); | |
root.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f); | |
SkinnedMeshRenderer[] componentsInChildren = core.GetComponentsInChildren<SkinnedMeshRenderer>(); | |
List<Transform> list = new List<Transform>(); | |
List<BoneWeight> list2 = new List<BoneWeight>(); | |
List<CombineInstance> list3 = new List<CombineInstance>(); | |
List<Texture2D> list4 = new List<Texture2D>(); | |
int num = 0; | |
SkinnedMeshRenderer[] array = componentsInChildren; | |
foreach (SkinnedMeshRenderer skinnedMeshRenderer in array) | |
{ | |
if ((Object)skinnedMeshRenderer == (Object)null || (Object)skinnedMeshRenderer.sharedMesh == (Object)null) | |
{ | |
Transform transform = core.transform; | |
while ((Object)transform.parent != (Object)null) | |
{ | |
transform = transform.parent; | |
} | |
string name = transform.name; | |
Debug.LogError("Missing SkinnedMeshRenderer from root object: " + name + ", skipping"); | |
} | |
else | |
{ | |
skinnedMeshRenderer.transform.localPosition = new Vector3(0f, 0f, 0f); | |
skinnedMeshRenderer.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f); | |
num += skinnedMeshRenderer.sharedMesh.subMeshCount; | |
} | |
} | |
int[] array2 = new int[num]; | |
int num2 = 0; | |
for (int j = 0; j < componentsInChildren.Length; j++) | |
{ | |
SkinnedMeshRenderer skinnedMeshRenderer2 = componentsInChildren[j]; | |
if (!((Object)skinnedMeshRenderer2 == (Object)null) && !((Object)skinnedMeshRenderer2.sharedMesh == (Object)null) && j < array2.Length) | |
{ | |
BoneWeight[] boneWeights = skinnedMeshRenderer2.sharedMesh.boneWeights; | |
BoneWeight[] array3 = boneWeights; | |
foreach (BoneWeight boneWeight in array3) | |
{ | |
BoneWeight item = boneWeight; | |
item.boneIndex0 += num2; | |
item.boneIndex1 += num2; | |
item.boneIndex2 += num2; | |
item.boneIndex3 += num2; | |
list2.Add(item); | |
} | |
num2 += skinnedMeshRenderer2.bones.Length; | |
Transform[] bones = skinnedMeshRenderer2.bones; | |
Transform[] array4 = bones; | |
foreach (Transform item2 in array4) | |
{ | |
list.Add(item2); | |
} | |
if ((Object)skinnedMeshRenderer2.sharedMaterial.mainTexture != (Object)null) | |
{ | |
list4.Add(skinnedMeshRenderer2.renderer.sharedMaterial.mainTexture as Texture2D); | |
} | |
CombineInstance item3 = default(CombineInstance); | |
item3.mesh = skinnedMeshRenderer2.sharedMesh; | |
array2[j] = item3.mesh.vertexCount; | |
item3.transform = skinnedMeshRenderer2.transform.localToWorldMatrix; | |
list3.Add(item3); | |
if (!destroyImmediate) | |
{ | |
Object.Destroy(skinnedMeshRenderer2.gameObject); | |
} | |
else | |
{ | |
Object.DestroyImmediate(skinnedMeshRenderer2.gameObject); | |
} | |
} | |
} | |
List<string> list5 = new List<string>(); | |
foreach (Transform item4 in list) | |
{ | |
list5.Add(item4.name); | |
} | |
List<Matrix4x4> list6 = new List<Matrix4x4>(); | |
for (int m = 0; m < list.Count; m++) | |
{ | |
list6.Add(list[m].worldToLocalMatrix * root.transform.worldToLocalMatrix); | |
} | |
SkinnedMeshRenderer skinnedMeshRenderer3 = core.gameObject.GetComponent<SkinnedMeshRenderer>(); | |
if ((Object)skinnedMeshRenderer3 == (Object)null) | |
{ | |
skinnedMeshRenderer3 = core.gameObject.AddComponent<SkinnedMeshRenderer>(); | |
} | |
skinnedMeshRenderer3.sharedMesh = new Mesh(); | |
skinnedMeshRenderer3.sharedMesh.CombineMeshes(list3.ToArray(), true, true); | |
Texture2D texture2D = null; | |
RuntimePlatform platform = Application.platform; | |
texture2D = ((platform != RuntimePlatform.Android && platform != RuntimePlatform.IPhonePlayer) ? new Texture2D(0, 0, TextureFormat.RGBA32, false) : new Texture2D(0, 0, TextureFormat.RGBA4444, false)); | |
Rect[] array5 = texture2D.PackTextures(list4.ToArray(), 0, 2048, true); | |
texture2D.name = "SKINNED MESH ATLAS"; | |
Vector2[] uv = skinnedMeshRenderer3.sharedMesh.uv; | |
Vector2[] array6 = new Vector2[uv.Length]; | |
int num3 = 0; | |
int num4 = 0; | |
if (array5.Length > 0) | |
{ | |
for (int n = 0; n < array6.Length; n++) | |
{ | |
array6[n].x = Mathf.Lerp(array5[num3].xMin, array5[num3].xMax, uv[n].x); | |
array6[n].y = Mathf.Lerp(array5[num3].yMin, array5[num3].yMax, uv[n].y); | |
if (n >= array2[num3] + num4 - 1) | |
{ | |
num4 += array2[num3]; | |
num3++; | |
} | |
if (num3 >= array5.Length) | |
{ | |
num3 = array5.Length - 1; | |
} | |
} | |
} | |
Material material = new Material(Shader.Find("HBS/Transparent/Cutout/Diffuse")); | |
material.mainTexture = texture2D; | |
skinnedMeshRenderer3.sharedMesh.uv = array6; | |
skinnedMeshRenderer3.sharedMaterial = material; | |
skinnedMeshRenderer3.bones = list.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.boneWeights = list2.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.bindposes = list6.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.RecalculateBounds(); | |
root.transform.parent.transform.localPosition = position; | |
root.transform.parent.transform.localRotation = rotation; | |
CachedMesh cachedMesh = new CachedMesh(); | |
cachedMesh.mesh = skinnedMeshRenderer3.sharedMesh; | |
cachedMesh.tex = texture2D; | |
cachedMesh.boneNames = list5; | |
for (int num5 = 0; num5 < list4.Count; num5++) | |
{ | |
if (list4[num5].name.ToLower().Contains("clone")) | |
{ | |
if (destroyImmediate) | |
{ | |
Object.DestroyImmediate(list4[num5]); | |
} | |
else | |
{ | |
Object.Destroy(list4[num5]); | |
} | |
} | |
} | |
return cachedMesh; | |
} | |
public static CachedMesh Initiate(GameObject core, GameObject root, bool destroyImmediate = false) | |
{ | |
Vector3 position = root.transform.parent.transform.position; | |
Quaternion rotation = root.transform.parent.transform.rotation; | |
root.transform.parent.transform.position = new Vector3(0f, 0f, 0f); | |
root.transform.parent.transform.rotation = new Quaternion(0f, 0f, 0f, 0f); | |
root.transform.localPosition = new Vector3(0f, 0f, 0f); | |
root.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f); | |
SkinnedMeshRenderer[] componentsInChildren = core.GetComponentsInChildren<SkinnedMeshRenderer>(); | |
List<Transform> list = new List<Transform>(); | |
List<BoneWeight> list2 = new List<BoneWeight>(); | |
List<CombineInstance> list3 = new List<CombineInstance>(); | |
List<Texture2D> list4 = new List<Texture2D>(); | |
int num = 0; | |
SkinnedMeshRenderer[] array = componentsInChildren; | |
foreach (SkinnedMeshRenderer skinnedMeshRenderer in array) | |
{ | |
if ((Object)skinnedMeshRenderer == (Object)null || (Object)skinnedMeshRenderer.sharedMesh == (Object)null) | |
{ | |
Transform transform = core.transform; | |
while ((Object)transform.parent != (Object)null) | |
{ | |
transform = transform.parent; | |
} | |
string name = transform.name; | |
Debug.LogError("Missing SkinnedMeshRenderer from root object: " + name + ", skipping"); | |
} | |
else | |
{ | |
skinnedMeshRenderer.transform.localPosition = new Vector3(0f, 0f, 0f); | |
skinnedMeshRenderer.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f); | |
num += skinnedMeshRenderer.sharedMesh.subMeshCount; | |
} | |
} | |
int[] array2 = new int[num]; | |
int num2 = 0; | |
for (int j = 0; j < componentsInChildren.Length; j++) | |
{ | |
SkinnedMeshRenderer skinnedMeshRenderer2 = componentsInChildren[j]; | |
if (!((Object)skinnedMeshRenderer2 == (Object)null) && !((Object)skinnedMeshRenderer2.sharedMesh == (Object)null) && j < array2.Length) | |
{ | |
BoneWeight[] boneWeights = skinnedMeshRenderer2.sharedMesh.boneWeights; | |
BoneWeight[] array3 = boneWeights; | |
foreach (BoneWeight boneWeight in array3) | |
{ | |
BoneWeight item = boneWeight; | |
item.boneIndex0 += num2; | |
item.boneIndex1 += num2; | |
item.boneIndex2 += num2; | |
item.boneIndex3 += num2; | |
list2.Add(item); | |
} | |
num2 += skinnedMeshRenderer2.bones.Length; | |
Transform[] bones = skinnedMeshRenderer2.bones; | |
Transform[] array4 = bones; | |
foreach (Transform item2 in array4) | |
{ | |
list.Add(item2); | |
} | |
if ((Object)skinnedMeshRenderer2.sharedMaterial.mainTexture != (Object)null) | |
{ | |
list4.Add(skinnedMeshRenderer2.renderer.sharedMaterial.mainTexture as Texture2D); | |
} | |
CombineInstance item3 = default(CombineInstance); | |
item3.mesh = skinnedMeshRenderer2.sharedMesh; | |
array2[j] = item3.mesh.vertexCount; | |
item3.transform = skinnedMeshRenderer2.transform.localToWorldMatrix; | |
list3.Add(item3); | |
if (!destroyImmediate) | |
{ | |
Object.Destroy(skinnedMeshRenderer2.gameObject); | |
} | |
else | |
{ | |
Object.DestroyImmediate(skinnedMeshRenderer2.gameObject); | |
} | |
} | |
} | |
List<string> list5 = new List<string>(); | |
foreach (Transform item4 in list) | |
{ | |
list5.Add(item4.name); | |
} | |
List<Matrix4x4> list6 = new List<Matrix4x4>(); | |
for (int m = 0; m < list.Count; m++) | |
{ | |
list6.Add(list[m].worldToLocalMatrix * root.transform.worldToLocalMatrix); | |
} | |
SkinnedMeshRenderer skinnedMeshRenderer3 = core.gameObject.GetComponent<SkinnedMeshRenderer>(); | |
if ((Object)skinnedMeshRenderer3 == (Object)null) | |
{ | |
skinnedMeshRenderer3 = core.gameObject.AddComponent<SkinnedMeshRenderer>(); | |
} | |
skinnedMeshRenderer3.sharedMesh = new Mesh(); | |
skinnedMeshRenderer3.sharedMesh.CombineMeshes(list3.ToArray(), true, true); | |
Texture2D texture2D = null; | |
RuntimePlatform platform = Application.platform; | |
texture2D = ((platform != RuntimePlatform.Android && platform != RuntimePlatform.IPhonePlayer) ? new Texture2D(0, 0, TextureFormat.RGBA32, false) : new Texture2D(0, 0, TextureFormat.RGBA4444, false)); | |
Rect[] array5 = texture2D.PackTextures(list4.ToArray(), 0, 2048, true); | |
texture2D.name = "SKINNED MESH ATLAS"; | |
Vector2[] uv = skinnedMeshRenderer3.sharedMesh.uv; | |
Vector2[] array6 = new Vector2[uv.Length]; | |
int num3 = 0; | |
int num4 = 0; | |
if (array5.Length > 0) | |
{ | |
for (int n = 0; n < array6.Length; n++) | |
{ | |
array6[n].x = Mathf.Lerp(array5[num3].xMin, array5[num3].xMax, uv[n].x); | |
array6[n].y = Mathf.Lerp(array5[num3].yMin, array5[num3].yMax, uv[n].y); | |
if (n >= array2[num3] + num4 - 1) | |
{ | |
num4 += array2[num3]; | |
num3++; | |
} | |
if (num3 >= array5.Length) | |
{ | |
num3 = array5.Length - 1; | |
} | |
} | |
} | |
Material material = new Material(Shader.Find("HBS/Transparent/Cutout/Diffuse")); | |
material.mainTexture = texture2D; | |
skinnedMeshRenderer3.sharedMesh.uv = array6; | |
skinnedMeshRenderer3.sharedMaterial = material; | |
skinnedMeshRenderer3.bones = list.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.boneWeights = list2.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.bindposes = list6.ToArray(); | |
skinnedMeshRenderer3.sharedMesh.RecalculateBounds(); | |
root.transform.parent.transform.localPosition = position; | |
root.transform.parent.transform.localRotation = rotation; | |
CachedMesh cachedMesh = new CachedMesh(); | |
cachedMesh.mesh = skinnedMeshRenderer3.sharedMesh; | |
cachedMesh.tex = texture2D; | |
cachedMesh.boneNames = list5; | |
for (int num5 = 0; num5 < list4.Count; num5++) | |
{ | |
if (list4[num5].name.ToLower().Contains("clone")) | |
{ | |
if (destroyImmediate) | |
{ | |
Object.DestroyImmediate(list4[num5]); | |
} | |
else | |
{ | |
Object.Destroy(list4[num5]); | |
} | |
} | |
} | |
return cachedMesh; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment