private void updateAvatar() { if (character == null) { character = new GameObject(); } character.SetActive(true); mainPaperdoll = character.GetComponent <Paperdoll>(); if (mainPaperdoll == null) { mainPaperdoll = character.AddComponent <Paperdoll>(); } KFAnimation kf = animationNif.getActiveAnimation(); string animString = kf.sequencename; if (kf.sequencename.StartsWith("mount")) { animString = kf.sequencename; } else { if (kf.sequencename.Contains("mount_")) { animString = kf.sequencename.Substring(kf.sequencename.IndexOf("mount")); } } Debug.Log("setting avatar animation to:" + animString); mainPaperdoll.animOverride = animString; mainPaperdoll.setKFBPostFix("mount"); mainPaperdoll.setGender("male"); mainPaperdoll.setRace("human"); mainPaperdoll.animSpeed = this.animationNif.animSpeed; character.transform.parent = this.nifmodel.transform; character.transform.localPosition = new Vector3(0, 0, 0); character.transform.localRotation = Quaternion.identity; mainPaperdoll.transform.localRotation = Quaternion.identity; //mainPaperdoll.setAppearenceSet(1044454339); int key = ProgramSettings.get("MOUNT_AVATAR_KEY", 736798136); // mainPaperdoll.setAppearenceSet(key); mainPaperdoll.zeroFrame(); this.animationNif.zeroFrame(); }
// Use this for initialization void Start() { AssetDatabase db = AssetDatabaseInst.DB; KFMFile kfm = new KFMFile(new FileStream(@"C:\Users\Spikeles\Documents\NetBeansProjects\TelaraDBExplorer\TelaraDBEditorCore\human_female_medium.kfm", FileMode.Open, FileAccess.Read, FileShare.Read)); NIFFile kfbfile = new NIFFile(new FileStream(@"C:\Users\Spikeles\Documents\NetBeansProjects\TelaraDBExplorer\TelaraDBEditorCore\human_female_2h_shared.kfb", FileMode.Open, FileAccess.Read, FileShare.Read)); // 230, string -> index 2 List <KFAnimation> anims = kfm.kfanimations; int maxAnimID = 0; foreach (KFAnimation anim in anims) { maxAnimID = Mathf.Max(anim.id, maxAnimID); //Debug.Log(anim.id + ":" + anim.sequenceFilename + ":" + anim.sequencename); } Debug.Log("maxAnimID:" + maxAnimID); for (int i = 0; i < kfbfile.numObjects; i += 4) { NiIntegerExtraData indexData = (NiIntegerExtraData)kfbfile.getObject(i); NiIntegerExtraData sizeData = (NiIntegerExtraData)kfbfile.getObject(i + 1); NiBinaryExtraData binData = (NiBinaryExtraData)kfbfile.getObject(i + 2); NiBinaryExtraData binData2 = (NiBinaryExtraData)kfbfile.getObject(i + 3); KFAnimation anim = anims.DefaultIfEmpty(null).FirstOrDefault(a => a.id == indexData.intExtraData); if (anim != null) { Debug.Log("kfb[" + indexData.intExtraData + "] match => [" + anim.id + "]" + anim.sequenceFilename); } else { Debug.Log("kfb[" + indexData.intExtraData + "] nomatch"); } } Debug.Log("kfb objs:" + kfbfile.numObjects / 4); Debug.Log("anims:" + anims.Count); //File.WriteAllBytes("human_female.kfb" + i + "_0", binData.getData()); //File.WriteAllBytes("human_female.kfb" + i + "_1", binData2.getData()); }