123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- using TriLib;
- using UnityEngine;
- using UnityEngine.Rendering;
- public class ImportCM : MonoBehaviour
- {
- private static ImportCM.BoneUse RemoveNoWeightBone(Dictionary<string, ImportCM.BoneUse> dic, Transform parent)
- {
- bool flag = false;
- if (parent.name == "Skirt")
- {
- return null;
- }
- ImportCM.BoneUse[] array = new ImportCM.BoneUse[parent.childCount];
- for (int i = 0; i < parent.childCount; i++)
- {
- ImportCM.BoneUse boneUse = array[i] = ImportCM.RemoveNoWeightBone(dic, parent.GetChild(i));
- flag |= (boneUse == null || boneUse.use);
- }
- foreach (ImportCM.BoneUse boneUse2 in array)
- {
- if (boneUse2 != null && boneUse2.bone != null && boneUse2.delete)
- {
- UnityEngine.Object.DestroyImmediate(boneUse2.bone.gameObject);
- boneUse2.bone = null;
- }
- }
- if (flag)
- {
- return null;
- }
- ImportCM.BoneUse boneUse2;
- if (dic.TryGetValue(parent.name, out boneUse2))
- {
- boneUse2.delete = (!boneUse2.use && !flag);
- return boneUse2;
- }
- return null;
- }
- public static GameObject LoadSkinMesh_R(string filename, TMorph morph, string slotname, TBodySkin bodyskin, int layer)
- {
- try
- {
- using (AFileBase afileBase = GameUty.FileOpen(filename, null))
- {
- if (ImportCM.m_skinTempFile == null)
- {
- ImportCM.m_skinTempFile = new byte[Math.Max(500000, afileBase.GetSize())];
- }
- else if (ImportCM.m_skinTempFile.Length < afileBase.GetSize())
- {
- ImportCM.m_skinTempFile = new byte[afileBase.GetSize()];
- }
- afileBase.Read(ref ImportCM.m_skinTempFile, afileBase.GetSize());
- }
- }
- catch (Exception ex)
- {
- NDebug.Assert("ファイルが開けませんでした。" + filename + "\n" + ex.Message, false);
- }
- BinaryReader binaryReader = new BinaryReader(new MemoryStream(ImportCM.m_skinTempFile), Encoding.UTF8);
- TBodySkin.OriVert oriVert = bodyskin.m_OriVert;
- GameObject gameObject = UnityEngine.Object.Instantiate(Resources.Load("seed")) as GameObject;
- gameObject.layer = layer;
- GameObject gameObject2 = null;
- Hashtable hashtable = new Hashtable();
- string text = binaryReader.ReadString();
- if (text != "CM3D2_MESH")
- {
- NDebug.Assert("LoadSkinMesh_R 例外 : ヘッダーファイルが不正です。" + text, false);
- }
- int num = binaryReader.ReadInt32();
- string str = binaryReader.ReadString();
- gameObject.name = "_SM_" + str;
- string b = binaryReader.ReadString();
- Dictionary<string, ImportCM.BoneUse> dictionary = new Dictionary<string, ImportCM.BoneUse>();
- int num2 = binaryReader.ReadInt32();
- List<GameObject> list = new List<GameObject>();
- for (int i = 0; i < num2; i++)
- {
- GameObject gameObject3 = UnityEngine.Object.Instantiate(Resources.Load("seed")) as GameObject;
- gameObject3.layer = layer;
- gameObject3.name = binaryReader.ReadString();
- list.Add(gameObject3);
- if (gameObject3.name == b)
- {
- gameObject2 = gameObject3;
- }
- hashtable[gameObject3.name] = gameObject3;
- dictionary[gameObject3.name] = new ImportCM.BoneUse(gameObject3.name, -1, gameObject3.transform);
- bool flag = binaryReader.ReadByte() != 0;
- if (flag)
- {
- GameObject gameObject4 = UnityEngine.Object.Instantiate(Resources.Load("seed")) as GameObject;
- gameObject4.name = gameObject3.name + "_SCL_";
- gameObject4.transform.parent = gameObject3.transform;
- hashtable[gameObject3.name + "&_SCL_"] = gameObject4;
- dictionary[gameObject4.name] = new ImportCM.BoneUse(gameObject4.name, -1, gameObject4.transform);
- }
- }
- for (int j = 0; j < num2; j++)
- {
- int num3 = binaryReader.ReadInt32();
- if (num3 >= 0)
- {
- list[j].transform.parent = list[num3].transform;
- }
- else
- {
- list[j].transform.parent = gameObject.transform;
- }
- }
- for (int k = 0; k < num2; k++)
- {
- Transform transform = list[k].transform;
- float x = binaryReader.ReadSingle();
- float y = binaryReader.ReadSingle();
- float z = binaryReader.ReadSingle();
- transform.localPosition = new Vector3(x, y, z);
- float x2 = binaryReader.ReadSingle();
- float y2 = binaryReader.ReadSingle();
- float z2 = binaryReader.ReadSingle();
- float w = binaryReader.ReadSingle();
- transform.localRotation = new Quaternion(x2, y2, z2, w);
- if (2001 <= num)
- {
- bool flag2 = binaryReader.ReadBoolean();
- if (flag2)
- {
- float x3 = binaryReader.ReadSingle();
- float y3 = binaryReader.ReadSingle();
- float z3 = binaryReader.ReadSingle();
- transform.localScale = new Vector3(x3, y3, z3);
- }
- }
- }
- int num4 = binaryReader.ReadInt32();
- int num5 = binaryReader.ReadInt32();
- int num6 = binaryReader.ReadInt32();
- oriVert.VCount = num4;
- oriVert.nSubMeshCount = num5;
- SkinnedMeshRenderer skinnedMeshRenderer = gameObject2.AddComponent<SkinnedMeshRenderer>();
- skinnedMeshRenderer.updateWhenOffscreen = true;
- skinnedMeshRenderer.skinnedMotionVectors = false;
- skinnedMeshRenderer.lightProbeUsage = LightProbeUsage.Off;
- skinnedMeshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
- skinnedMeshRenderer.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion;
- if (!bodyskin.body.boMAN)
- {
- if (slotname == "head")
- {
- skinnedMeshRenderer.castShadows = false;
- }
- if (bodyskin.Category == "chikubi")
- {
- skinnedMeshRenderer.castShadows = false;
- }
- if (bodyskin.Category.IndexOf("seieki_") == 0)
- {
- skinnedMeshRenderer.castShadows = false;
- }
- }
- bodyskin.listDEL.Add(gameObject2);
- ImportCM.BoneUse[] array = new ImportCM.BoneUse[num6];
- Transform[] array2 = new Transform[num6];
- for (int l = 0; l < num6; l++)
- {
- string text2 = binaryReader.ReadString();
- if (!hashtable.ContainsKey(text2))
- {
- Debug.LogError("nullbone= " + text2);
- }
- else
- {
- GameObject gameObject5;
- if (hashtable.ContainsKey(text2 + "&_SCL_"))
- {
- gameObject5 = (GameObject)hashtable[text2 + "&_SCL_"];
- }
- else
- {
- gameObject5 = (GameObject)hashtable[text2];
- }
- array2[l] = gameObject5.transform;
- ImportCM.BoneUse[] array3 = array;
- int num7 = l;
- ImportCM.BoneUse boneUse = new ImportCM.BoneUse(gameObject5.name, l, gameObject5.transform);
- dictionary[gameObject5.name] = boneUse;
- array3[num7] = boneUse;
- }
- }
- skinnedMeshRenderer.bones = array2;
- Mesh mesh = new Mesh();
- skinnedMeshRenderer.sharedMesh = mesh;
- Mesh mesh2 = mesh;
- bodyskin.listDEL.Add(mesh2);
- Matrix4x4[] array4 = new Matrix4x4[num6];
- for (int m = 0; m < num6; m++)
- {
- for (int n = 0; n < 16; n++)
- {
- array4[m][n] = binaryReader.ReadSingle();
- }
- }
- mesh2.bindposes = array4;
- Vector3[] array5 = new Vector3[num4];
- Vector3[] array6 = new Vector3[num4];
- Vector2[] array7 = new Vector2[num4];
- BoneWeight[] array8 = new BoneWeight[num4];
- for (int num8 = 0; num8 < num4; num8++)
- {
- float num9 = binaryReader.ReadSingle();
- float num10 = binaryReader.ReadSingle();
- float new_z = binaryReader.ReadSingle();
- array5[num8].Set(num9, num10, new_z);
- num9 = binaryReader.ReadSingle();
- num10 = binaryReader.ReadSingle();
- new_z = binaryReader.ReadSingle();
- array6[num8].Set(num9, num10, new_z);
- num9 = binaryReader.ReadSingle();
- num10 = binaryReader.ReadSingle();
- array7[num8].Set(num9, num10);
- }
- mesh2.vertices = array5;
- mesh2.normals = array6;
- mesh2.uv = array7;
- oriVert.vOriVert = array5;
- oriVert.vOriNorm = array6;
- int num11 = binaryReader.ReadInt32();
- if (num11 > 0)
- {
- Vector4[] array9 = new Vector4[num11];
- for (int num12 = 0; num12 < num11; num12++)
- {
- float x4 = binaryReader.ReadSingle();
- float y4 = binaryReader.ReadSingle();
- float z4 = binaryReader.ReadSingle();
- float w2 = binaryReader.ReadSingle();
- array9[num12] = new Vector4(x4, y4, z4, w2);
- }
- mesh2.tangents = array9;
- }
- for (int num13 = 0; num13 < num4; num13++)
- {
- int num14 = (int)binaryReader.ReadUInt16();
- array8[num13].boneIndex0 = num14;
- int num15 = num14;
- num14 = (int)binaryReader.ReadUInt16();
- array8[num13].boneIndex1 = num14;
- int num16 = num14;
- num14 = (int)binaryReader.ReadUInt16();
- array8[num13].boneIndex2 = num14;
- int num17 = num14;
- num14 = (int)binaryReader.ReadUInt16();
- array8[num13].boneIndex3 = num14;
- int num18 = num14;
- array[num15].use = true;
- array[num16].use = true;
- array[num17].use = true;
- array[num18].use = true;
- array8[num13].weight0 = binaryReader.ReadSingle();
- array8[num13].weight1 = binaryReader.ReadSingle();
- array8[num13].weight2 = binaryReader.ReadSingle();
- array8[num13].weight3 = binaryReader.ReadSingle();
- }
- ImportCM.BoneUse boneUse2;
- if (dictionary.TryGetValue("Bip01", out boneUse2))
- {
- ImportCM.RemoveNoWeightBone(dictionary, boneUse2.bone);
- }
- mesh2.boneWeights = array8;
- mesh2.subMeshCount = num5;
- oriVert.bwWeight = array8;
- oriVert.nSubMeshCount = num5;
- oriVert.nSubMeshOriTri = new int[num5][];
- for (int num19 = 0; num19 < num5; num19++)
- {
- int num20 = binaryReader.ReadInt32();
- int[] array10 = new int[num20];
- for (int num21 = 0; num21 < num20; num21++)
- {
- array10[num21] = (int)binaryReader.ReadUInt16();
- }
- oriVert.nSubMeshOriTri[num19] = array10;
- mesh2.SetTriangles(array10, num19);
- }
- int num22 = binaryReader.ReadInt32();
- Material[] array11 = new Material[num22];
- for (int num23 = 0; num23 < num22; num23++)
- {
- Material material = ImportCM.ReadMaterial(binaryReader, bodyskin, null);
- array11[num23] = material;
- }
- skinnedMeshRenderer.materials = array11;
- for (;;)
- {
- string a = binaryReader.ReadString();
- if (a == "end")
- {
- break;
- }
- if (a == "morph")
- {
- morph.LoadMoprhData2(binaryReader);
- }
- }
- binaryReader.Close();
- return gameObject;
- }
- public static Material LoadMaterial(string f_strFileName, TBodySkin bodyskin, Material existmat = null)
- {
- try
- {
- using (AFileBase afileBase = GameUty.FileOpen(f_strFileName, null))
- {
- NDebug.Assert(afileBase.IsValid(), "LoadMaterial マテリアルコンテナが読めません。 :" + f_strFileName);
- if (ImportCM.m_matTempFile == null)
- {
- ImportCM.m_matTempFile = new byte[Math.Max(10000, afileBase.GetSize())];
- }
- else if (ImportCM.m_matTempFile.Length < afileBase.GetSize())
- {
- ImportCM.m_matTempFile = new byte[afileBase.GetSize()];
- }
- afileBase.Read(ref ImportCM.m_matTempFile, afileBase.GetSize());
- }
- }
- catch (Exception ex)
- {
- Debug.LogError(string.Concat(new string[]
- {
- "LoadMaterial マテリアルコンテナが読み込めませんでした。 : ",
- f_strFileName,
- " : ",
- ex.Message,
- " : StackTrace :\n",
- ex.StackTrace
- }));
- throw ex;
- }
- BinaryReader binaryReader = new BinaryReader(new MemoryStream(ImportCM.m_matTempFile), Encoding.UTF8);
- string text = binaryReader.ReadString();
- if (text != "CM3D2_MATERIAL")
- {
- NDebug.Assert("ProcScriptBin 例外 : ヘッダーファイルが不正です。" + text, false);
- }
- int num = binaryReader.ReadInt32();
- string text2 = binaryReader.ReadString();
- Material result = ImportCM.ReadMaterial(binaryReader, bodyskin, existmat);
- binaryReader.Close();
- return result;
- }
- public static Material ReadMaterial(BinaryReader r, TBodySkin bodyskin = null, Material existmat = null)
- {
- if (ImportCM.m_hashPriorityMaterials == null)
- {
- ImportCM.m_hashPriorityMaterials = new Dictionary<int, KeyValuePair<string, float>>();
- string[] list = GameUty.FileSystem.GetList("prioritymaterial", AFileSystemBase.ListType.AllFile);
- if (list != null && 0 < list.Length)
- {
- for (int i = 0; i < list.Length; i++)
- {
- if (Path.GetExtension(list[i]) == ".pmat")
- {
- string text = list[i];
- using (AFileBase afileBase = GameUty.FileOpen(text, null))
- {
- NDebug.Assert(afileBase.IsValid(), text + "を開けませんでした");
- byte[] buffer = afileBase.ReadAll();
- using (BinaryReader binaryReader = new BinaryReader(new MemoryStream(buffer), Encoding.UTF8))
- {
- string a = binaryReader.ReadString();
- if (a != "CM3D2_PMATERIAL")
- {
- NDebug.Assert("ヘッダーエラー\n" + text, false);
- }
- int num = binaryReader.ReadInt32();
- int key = binaryReader.ReadInt32();
- string key2 = binaryReader.ReadString();
- float value = binaryReader.ReadSingle();
- NDebug.Assert(!ImportCM.m_hashPriorityMaterials.ContainsKey(key), "すでにハッシュが登録されています");
- ImportCM.m_hashPriorityMaterials.Add(key, new KeyValuePair<string, float>(key2, value));
- }
- }
- }
- }
- }
- }
- string name = r.ReadString();
- string text2 = r.ReadString();
- string text3 = r.ReadString();
- Material material2;
- if (existmat == null)
- {
- Material material;
- if (!ImportCM.m_dicCacheMaterial.TryGetValue(text3, out material))
- {
- string text4 = "DefMaterial/" + text3;
- material = (Resources.Load(text4, typeof(Material)) as Material);
- if (material == null)
- {
- NDebug.Assert("DefMaterialが見つかりません。" + text4, false);
- }
- ImportCM.m_dicCacheMaterial[text3] = material;
- }
- material2 = UnityEngine.Object.Instantiate<Material>(material);
- if (bodyskin != null)
- {
- bodyskin.listDEL.Add(material2);
- }
- }
- else
- {
- material2 = existmat;
- if (material2.shader.name != text2)
- {
- NDebug.Warning("マテリアル入れ替えエラー。違うシェーダーに入れようとしました。 " + text2 + " -> " + material2.shader.name);
- }
- }
- material2.name = name;
- int hashCode = material2.name.GetHashCode();
- if (ImportCM.m_hashPriorityMaterials != null && ImportCM.m_hashPriorityMaterials.ContainsKey(hashCode))
- {
- KeyValuePair<string, float> keyValuePair = ImportCM.m_hashPriorityMaterials[hashCode];
- if (keyValuePair.Key == material2.name)
- {
- material2.SetFloat("_SetManualRenderQueue", keyValuePair.Value);
- material2.renderQueue = (int)keyValuePair.Value;
- }
- }
- for (;;)
- {
- string text5 = r.ReadString();
- if (text5 == "end")
- {
- break;
- }
- string name2 = r.ReadString();
- if (text5 == "tex")
- {
- string a2 = r.ReadString();
- if (a2 == "null")
- {
- material2.SetTexture(name2, null);
- }
- else if (a2 == "tex2d")
- {
- string text6 = r.ReadString();
- string text7 = r.ReadString();
- Texture2D texture2D = ImportCM.CreateTexture(text6 + ".tex");
- texture2D.name = text6;
- texture2D.wrapMode = TextureWrapMode.Clamp;
- material2.SetTexture(name2, texture2D);
- if (bodyskin != null)
- {
- bodyskin.listDEL.Add(texture2D);
- }
- Vector2 value2;
- value2.x = r.ReadSingle();
- value2.y = r.ReadSingle();
- material2.SetTextureOffset(name2, value2);
- Vector2 value3;
- value3.x = r.ReadSingle();
- value3.y = r.ReadSingle();
- material2.SetTextureScale(name2, value3);
- }
- else if (a2 == "texRT")
- {
- string text8 = r.ReadString();
- string text9 = r.ReadString();
- }
- }
- else if (text5 == "col")
- {
- Color value4;
- value4.r = r.ReadSingle();
- value4.g = r.ReadSingle();
- value4.b = r.ReadSingle();
- value4.a = r.ReadSingle();
- material2.SetColor(name2, value4);
- }
- else if (text5 == "vec")
- {
- Vector4 value5;
- value5.x = r.ReadSingle();
- value5.y = r.ReadSingle();
- value5.z = r.ReadSingle();
- value5.w = r.ReadSingle();
- material2.SetVector(name2, value5);
- }
- else if (text5 == "f")
- {
- float value6 = r.ReadSingle();
- material2.SetFloat(name2, value6);
- }
- else
- {
- Debug.LogError("マテリアルが読み込めません。不正なマテリアルプロパティ型です " + text5);
- }
- }
- return material2;
- }
- public static GameObject LoadOnlyBone_R(byte[] bs)
- {
- GameObject gameObject = new GameObject();
- gameObject.layer = 10;
- BinaryReader binaryReader = new BinaryReader(new MemoryStream(bs));
- Hashtable hashtable = new Hashtable();
- string text = binaryReader.ReadString();
- if (text != "CM3D2_MESH")
- {
- NDebug.Assert("LoadOnlyBone_R 例外 : ヘッダーファイルが不正です。" + text, false);
- }
- int num = binaryReader.ReadInt32();
- string str = binaryReader.ReadString();
- gameObject.name = "_BO_" + str;
- string text2 = binaryReader.ReadString();
- int num2 = binaryReader.ReadInt32();
- List<GameObject> list = new List<GameObject>();
- for (int i = 0; i < num2; i++)
- {
- GameObject gameObject2 = UnityEngine.Object.Instantiate(Resources.Load("seed")) as GameObject;
- gameObject2.layer = 10;
- gameObject2.name = binaryReader.ReadString();
- list.Add(gameObject2);
- hashtable[gameObject2.name] = gameObject2;
- bool flag = binaryReader.ReadByte() != 0;
- if (flag)
- {
- GameObject gameObject3 = UnityEngine.Object.Instantiate(Resources.Load("seed")) as GameObject;
- gameObject2.layer = 10;
- gameObject3.name = gameObject2.name + "_SCL_";
- gameObject3.transform.parent = gameObject2.transform;
- hashtable[gameObject2.name + "&_SCL_"] = gameObject3;
- }
- }
- for (int j = 0; j < num2; j++)
- {
- int num3 = binaryReader.ReadInt32();
- if (num3 >= 0)
- {
- list[j].transform.parent = list[num3].transform;
- }
- else
- {
- list[j].transform.parent = gameObject.transform;
- }
- }
- for (int k = 0; k < num2; k++)
- {
- Transform transform = list[k].transform;
- float x = binaryReader.ReadSingle();
- float y = binaryReader.ReadSingle();
- float z = binaryReader.ReadSingle();
- transform.localPosition = new Vector3(x, y, z);
- float x2 = binaryReader.ReadSingle();
- float y2 = binaryReader.ReadSingle();
- float z2 = binaryReader.ReadSingle();
- float w = binaryReader.ReadSingle();
- transform.localRotation = new Quaternion(x2, y2, z2, w);
- if (2001 <= num)
- {
- bool flag2 = binaryReader.ReadBoolean();
- if (flag2)
- {
- float x3 = binaryReader.ReadSingle();
- float y3 = binaryReader.ReadSingle();
- float z3 = binaryReader.ReadSingle();
- transform.localScale = new Vector3(x3, y3, z3);
- }
- }
- }
- binaryReader.Close();
- gameObject.AddComponent(typeof(Animation));
- return gameObject;
- }
- public static Dictionary<string, ImportCM.OldSkirtBoneRev> LoadOldSkirtBoneRev(string f_strModelName)
- {
- Dictionary<string, ImportCM.OldSkirtBoneRev> dictionary = null;
- if (f_strModelName.Contains("dress020_onep"))
- {
- dictionary = new Dictionary<string, ImportCM.OldSkirtBoneRev>();
- for (int i = 1; i <= 12; i++)
- {
- dictionary.Add("Skirt" + i.ToString("00") + "_A_yure_skirt_h_", new ImportCM.OldSkirtBoneRev
- {
- bRecursiv = true,
- vRotRevInit = new Vector3((i != 7 && i != 8) ? 90f : -90f, 0f, 0f),
- vRotRevAfter = new Vector3((i != 7 && i != 8) ? -90f : 90f, 0f, 0f)
- });
- }
- }
- else if (f_strModelName.Contains("dress131_onep"))
- {
- dictionary = new Dictionary<string, ImportCM.OldSkirtBoneRev>();
- for (int j = 1; j <= 12; j++)
- {
- dictionary.Add("Skirt" + j.ToString("00") + "_A_yure_skirt_", new ImportCM.OldSkirtBoneRev
- {
- bRecursiv = true,
- vRotRevInit = new Vector3(0f, 0f, 0f),
- vRotRevAfter = new Vector3(180f, 0f, 0f)
- });
- }
- }
- return dictionary;
- }
- public static Texture2D CreateTexture(string f_strFileName)
- {
- return ImportCM.LoadTexture(GameUty.FileSystem, f_strFileName, true).CreateTexture2D();
- }
- public static Texture2D CreateTexture(AFileSystemBase f_fileSystem, string f_strFileName)
- {
- return ImportCM.LoadTexture(f_fileSystem, f_strFileName, true).CreateTexture2D();
- }
- public static TextureResource LoadTexture(AFileSystemBase f_fileSystem, string f_strFileName, bool usePoolBuffer)
- {
- try
- {
- using (AFileBase afileBase = GameUty.FileOpen(f_strFileName, f_fileSystem))
- {
- NDebug.Assert(afileBase.IsValid(), "LoadTexture テクスチャコンテナが読めません。 :" + f_strFileName);
- if (ImportCM.m_texTempFile == null)
- {
- ImportCM.m_texTempFile = new byte[Math.Max(500000, afileBase.GetSize())];
- }
- else if (ImportCM.m_texTempFile.Length < afileBase.GetSize())
- {
- ImportCM.m_texTempFile = new byte[afileBase.GetSize()];
- }
- afileBase.Read(ref ImportCM.m_texTempFile, afileBase.GetSize());
- }
- }
- catch (Exception ex)
- {
- Debug.LogError(string.Concat(new string[]
- {
- "LoadTexture テクスチャコンテナが読み込めませんでした。 : ",
- f_strFileName,
- " : ",
- ex.Message,
- " : StackTrace :\n",
- ex.StackTrace
- }));
- throw ex;
- }
- BinaryReader binaryReader = new BinaryReader(new MemoryStream(ImportCM.m_texTempFile), Encoding.UTF8);
- string text = binaryReader.ReadString();
- if (text != "CM3D2_TEX")
- {
- NDebug.Assert("ProcScriptBin 例外 : ヘッダーファイルが不正です。" + text, false);
- }
- int num = binaryReader.ReadInt32();
- string text2 = binaryReader.ReadString();
- int width = 0;
- int height = 0;
- TextureFormat textureFormat = TextureFormat.ARGB32;
- Rect[] array = null;
- if (1010 <= num)
- {
- if (1011 <= num)
- {
- int num2 = binaryReader.ReadInt32();
- if (0 < num2)
- {
- array = new Rect[num2];
- for (int i = 0; i < num2; i++)
- {
- float x = binaryReader.ReadSingle();
- float y = binaryReader.ReadSingle();
- float width2 = binaryReader.ReadSingle();
- float height2 = binaryReader.ReadSingle();
- array[i] = new Rect(x, y, width2, height2);
- }
- }
- }
- width = binaryReader.ReadInt32();
- height = binaryReader.ReadInt32();
- textureFormat = (TextureFormat)binaryReader.ReadInt32();
- }
- int num3 = binaryReader.ReadInt32();
- byte[] array2;
- if (usePoolBuffer && textureFormat == TextureFormat.ARGB32)
- {
- if (ImportCM.m_texTempImg == null)
- {
- ImportCM.m_texTempImg = new byte[Math.Max(500000, num3)];
- }
- else if (ImportCM.m_texTempImg.Length < num3)
- {
- ImportCM.m_texTempImg = new byte[num3];
- }
- binaryReader.Read(ImportCM.m_texTempImg, 0, num3);
- array2 = ImportCM.m_texTempImg;
- }
- else
- {
- array2 = new byte[num3];
- binaryReader.Read(array2, 0, num3);
- }
- if (num == 1000)
- {
- width = ((int)array2[16] << 24 | (int)array2[17] << 16 | (int)array2[18] << 8 | (int)array2[19]);
- height = ((int)array2[20] << 24 | (int)array2[21] << 16 | (int)array2[22] << 8 | (int)array2[23]);
- }
- binaryReader.Close();
- return new TextureResource(width, height, textureFormat, array, array2);
- }
- public static AnimationClip LoadAniClip(string f_strFileName, bool load_l_mune_anime, bool load_r_mune_anime, bool no_chara = false)
- {
- try
- {
- using (AFileBase afileBase = GameUty.FileOpen(f_strFileName, null))
- {
- NDebug.Assert(afileBase.IsValid(), "LoadAniClip アニメーションファイルが開けません。 :" + f_strFileName);
- if (ImportCM.m_aniTempFile == null)
- {
- ImportCM.m_aniTempFile = new byte[Math.Max(500000, afileBase.GetSize())];
- }
- else if (ImportCM.m_aniTempFile.Length < afileBase.GetSize())
- {
- ImportCM.m_aniTempFile = new byte[afileBase.GetSize()];
- }
- afileBase.Read(ref ImportCM.m_aniTempFile, afileBase.GetSize());
- }
- }
- catch (Exception ex)
- {
- Debug.LogError(string.Concat(new string[]
- {
- "LoadAniClip アニメーションファイルが読み込めませんでした。 : ",
- f_strFileName,
- " : ",
- ex.Message,
- " : StackTrace :\n",
- ex.StackTrace
- }));
- throw ex;
- }
- BinaryReader binaryReader = new BinaryReader(new MemoryStream(ImportCM.m_aniTempFile), Encoding.UTF8);
- string text = binaryReader.ReadString();
- if (text != "CM3D2_ANIM")
- {
- NDebug.Assert("LoadAniClip 例外 : ヘッダーファイルが不正です。" + text, false);
- }
- int num = binaryReader.ReadInt32();
- AnimationClip animationClip = new AnimationClip();
- if (animationClip != null)
- {
- animationClip.legacy = true;
- }
- string text2 = string.Empty;
- int num2 = 0;
- for (;;)
- {
- byte b = binaryReader.ReadByte();
- if (b == 0)
- {
- break;
- }
- if (b == 1)
- {
- text2 = binaryReader.ReadString();
- num2++;
- }
- else if (b >= 100)
- {
- int num3 = binaryReader.ReadInt32();
- Keyframe[] array = new Keyframe[num3];
- AnimationCurve animationCurve = new AnimationCurve();
- for (int i = 0; i < num3; i++)
- {
- array[i].time = binaryReader.ReadSingle();
- array[i].value = binaryReader.ReadSingle();
- array[i].inTangent = binaryReader.ReadSingle();
- array[i].outTangent = binaryReader.ReadSingle();
- }
- animationCurve.keys = array;
- bool flag = true;
- string text3 = text2 + "*";
- if (!no_chara)
- {
- if (b >= 104 && b <= 106 && !text3.Contains("Bip01*") && !text3.Contains("_IK_") && !text3.Contains("ManBip*") && !text3.Contains("Hip_L") && !text3.Contains("Hip_R"))
- {
- flag = false;
- }
- if (!load_l_mune_anime && text3.Contains("Mune_L"))
- {
- flag = false;
- }
- if (!load_r_mune_anime && text3.Contains("Mune_R"))
- {
- flag = false;
- }
- }
- if (flag)
- {
- animationClip.SetCurve(text2, AnmParse.proptypes[(int)(b - 100)], AnmParse.properties[(int)(b - 100)], animationCurve);
- }
- }
- else
- {
- Debug.LogError("com " + b);
- }
- }
- binaryReader.Close();
- return animationClip;
- }
- public static AnimationClip LoadAniClip(byte[] file_byte, bool load_l_mune_anime, bool load_r_mune_anime, bool no_chara = false)
- {
- if (ImportCM.m_aniTempFile == null)
- {
- ImportCM.m_aniTempFile = new byte[Math.Max(500000, file_byte.Length)];
- }
- else if (ImportCM.m_aniTempFile.Length < file_byte.Length)
- {
- ImportCM.m_aniTempFile = new byte[file_byte.Length];
- }
- Buffer.BlockCopy(file_byte, 0, ImportCM.m_aniTempFile, 0, file_byte.Length);
- BinaryReader binaryReader = new BinaryReader(new MemoryStream(ImportCM.m_aniTempFile), Encoding.UTF8);
- string text = binaryReader.ReadString();
- if (text != "CM3D2_ANIM")
- {
- NDebug.Assert("LoadAniClip 例外 : ヘッダーファイルが不正です。" + text, false);
- }
- int num = binaryReader.ReadInt32();
- AnimationClip animationClip = new AnimationClip();
- if (animationClip != null)
- {
- animationClip.legacy = true;
- }
- string text2 = string.Empty;
- int num2 = 0;
- for (;;)
- {
- byte b = binaryReader.ReadByte();
- if (b == 0)
- {
- break;
- }
- if (b == 1)
- {
- text2 = binaryReader.ReadString();
- num2++;
- }
- else if (b >= 100)
- {
- int num3 = binaryReader.ReadInt32();
- Keyframe[] array = new Keyframe[num3];
- AnimationCurve animationCurve = new AnimationCurve();
- for (int i = 0; i < num3; i++)
- {
- array[i].time = binaryReader.ReadSingle();
- array[i].value = binaryReader.ReadSingle();
- array[i].inTangent = binaryReader.ReadSingle();
- array[i].outTangent = binaryReader.ReadSingle();
- }
- animationCurve.keys = array;
- bool flag = true;
- string text3 = text2 + "*";
- if (!no_chara)
- {
- if (!no_chara && b >= 104 && b <= 106 && !text3.Contains("Bip01*") && !text3.Contains("_IK_") && !text3.Contains("ManBip*") && !text3.Contains("Hip_L") && !text3.Contains("Hip_R"))
- {
- flag = false;
- }
- if (!load_l_mune_anime && text3.Contains("Mune_L"))
- {
- flag = false;
- }
- if (!load_r_mune_anime && text3.Contains("Mune_R"))
- {
- flag = false;
- }
- if (flag)
- {
- animationClip.SetCurve(text2, AnmParse.proptypes[(int)(b - 100)], AnmParse.properties[(int)(b - 100)], animationCurve);
- }
- }
- }
- else
- {
- Debug.LogError("com " + b);
- }
- }
- binaryReader.Close();
- return animationClip;
- }
- public static AnimationClip LoadAniClipNative(AFileSystemBase fileSystem, string fileName, bool load_l_mune_anime, bool load_r_mune_anime, bool no_chara = false)
- {
- AnimationClip result = null;
- using (AFileBase afileBase = GameUty.FileOpen(fileName, fileSystem))
- {
- if (afileBase == null || !afileBase.IsValid())
- {
- Debug.LogError(fileName + " はありませんでした。");
- return null;
- }
- result = GameMain.Instance.AnmParse.LoadAnmClip(afileBase, load_l_mune_anime, load_r_mune_anime, no_chara);
- }
- return result;
- }
- public static AnimationClip LoadAniClipNative(byte[] file_byte, bool load_l_mune_anime, bool load_r_mune_anime, bool no_chara = false)
- {
- return GameMain.Instance.AnmParse.LoadAnmClip(file_byte, load_l_mune_anime, load_r_mune_anime, no_chara);
- }
- public static DynamicBone TryLoadDynamicBone(GameObject f_goRoot, Transform f_trHairRoot, string f_strFileName, TBody body, float[] f_aryDefStiffness)
- {
- try
- {
- using (AFileBase afileBase = GameUty.FileOpen(f_strFileName + ".phy", null))
- {
- if (afileBase == null || !afileBase.IsValid())
- {
- return null;
- }
- if (ImportCM.m_byPhyTempFile == null)
- {
- ImportCM.m_byPhyTempFile = new byte[Math.Max(50000, afileBase.GetSize())];
- }
- else if (ImportCM.m_byPhyTempFile.Length < afileBase.GetSize())
- {
- ImportCM.m_byPhyTempFile = new byte[afileBase.GetSize()];
- }
- afileBase.Read(ref ImportCM.m_byPhyTempFile, afileBase.GetSize());
- }
- }
- catch (Exception ex)
- {
- Debug.LogError(string.Concat(new string[]
- {
- "TryLoadDynamicBone 物理定義ファイルが読み込めませんでした。 : ",
- f_strFileName,
- ".phy : ",
- ex.Message,
- " : StackTrace :\n",
- ex.StackTrace
- }));
- throw ex;
- }
- BinaryReader binaryReader = new BinaryReader(new MemoryStream(ImportCM.m_byPhyTempFile), Encoding.UTF8);
- DynamicBone dynamicBone = f_goRoot.AddComponent<DynamicBone>();
- if (f_aryDefStiffness != null && f_aryDefStiffness.Length == 3)
- {
- dynamicBone.m_ValueFromBone[2, 0] = f_aryDefStiffness[0];
- dynamicBone.m_ValueFromBone[2, 1] = f_aryDefStiffness[1];
- dynamicBone.m_ValueFromBone[2, 2] = f_aryDefStiffness[2];
- }
- dynamicBone.m_Root = f_trHairRoot;
- dynamicBone.SerializeRead(binaryReader);
- dynamicBone.m_strNowReadPhysicsFileName = f_strFileName;
- dynamicBone.m_hitFloorPlane = body.m_hitFloorPlane;
- binaryReader.Close();
- return dynamicBone;
- }
- public static bool LoadDynamicCollilder(DynamicBone f_db, string f_strFileName, Transform f_trBodyBoneRoot, Maid f_maid)
- {
- try
- {
- using (AFileBase afileBase = GameUty.FileOpen(f_strFileName + ".col", null))
- {
- if (afileBase == null || !afileBase.IsValid())
- {
- Debug.LogError(f_strFileName + ".col が開けません。");
- return false;
- }
- if (ImportCM.m_byPhyTempFile == null)
- {
- ImportCM.m_byPhyTempFile = new byte[Math.Max(50000, afileBase.GetSize())];
- }
- else if (ImportCM.m_byPhyTempFile.Length < afileBase.GetSize())
- {
- ImportCM.m_byPhyTempFile = new byte[afileBase.GetSize()];
- }
- afileBase.Read(ref ImportCM.m_byPhyTempFile, afileBase.GetSize());
- }
- }
- catch (Exception ex)
- {
- Debug.LogError(string.Concat(new string[]
- {
- "LoadDynamicCollilder 物理Colliderファイルが読み込めませんでした。 : ",
- f_strFileName,
- ".col : ",
- ex.Message,
- " : StackTrace :\n",
- ex.StackTrace
- }));
- throw ex;
- }
- BinaryReader binaryReader = new BinaryReader(new MemoryStream(ImportCM.m_byPhyTempFile), Encoding.UTF8);
- f_db.SerializeReadCollider(binaryReader, f_trBodyBoneRoot, Path.GetFileNameWithoutExtension(f_strFileName), f_maid);
- binaryReader.Close();
- return true;
- }
- public static DynamicSkirtBone TryLoadDynamicSkirtBone(GameObject f_goRoot, Transform f_trSkirtRoot, string f_strFileName, TBody body)
- {
- try
- {
- using (AFileBase afileBase = GameUty.FileOpen(f_strFileName + ".psk", null))
- {
- if (afileBase == null || !afileBase.IsValid())
- {
- return null;
- }
- if (ImportCM.m_byPhyTempFile == null)
- {
- ImportCM.m_byPhyTempFile = new byte[Math.Max(50000, afileBase.GetSize())];
- }
- else if (ImportCM.m_byPhyTempFile.Length < afileBase.GetSize())
- {
- ImportCM.m_byPhyTempFile = new byte[afileBase.GetSize()];
- }
- afileBase.Read(ref ImportCM.m_byPhyTempFile, afileBase.GetSize());
- }
- }
- catch (Exception ex)
- {
- Debug.LogError(string.Concat(new string[]
- {
- "TryLoadSkirtDynamicBone スカート物理定義ファイルが読み込めませんでした。 : ",
- f_strFileName,
- ".psk : ",
- ex.Message,
- " : StackTrace :\n",
- ex.StackTrace
- }));
- throw ex;
- }
- BinaryReader binaryReader = new BinaryReader(new MemoryStream(ImportCM.m_byPhyTempFile), Encoding.UTF8);
- DynamicSkirtBone dynamicSkirtBone = f_goRoot.AddComponent<DynamicSkirtBone>();
- dynamicSkirtBone.SerializeRead(binaryReader);
- binaryReader.Close();
- return dynamicSkirtBone;
- }
- public static GameObject LoadGeneralModelFile(string f_strPathFileName)
- {
- GameObject gameObject = null;
- GameObject result;
- using (AssetLoader assetLoader = new AssetLoader())
- {
- try
- {
- AssetLoaderOptions assetLoaderOptions = AssetLoaderOptions.CreateInstance();
- assetLoaderOptions.AutoPlayAnimations = true;
- gameObject = assetLoader.LoadFromFile(f_strPathFileName, assetLoaderOptions, null);
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.ToString());
- }
- result = gameObject;
- }
- return result;
- }
- private static byte[] m_skinTempFile = null;
- private static byte[] m_matTempFile = null;
- private static Dictionary<int, KeyValuePair<string, float>> m_hashPriorityMaterials = null;
- private static Dictionary<string, Material> m_dicCacheMaterial = new Dictionary<string, Material>();
- private static byte[] m_texTempFile = null;
- private static byte[] m_texTempImg = null;
- public static byte[] m_aniTempFile = null;
- public static byte[] m_byPhyTempFile = null;
- private class BoneUse
- {
- public BoneUse(string f_name, int f_idx, Transform f_bone)
- {
- this.name = f_name;
- this.idx = f_idx;
- this.bone = f_bone;
- }
- public bool use;
- public string name;
- public int idx;
- public Transform bone;
- public bool delete;
- }
- public class OldSkirtBoneRev
- {
- public bool bRecursiv = true;
- public Vector3 vRotRevInit;
- public Vector3 vRotRevAfter;
- }
- }
|