private static bool CharaList_ChangeCharaMale(CharaFileSort ___charaFileSort) { TreeNodeObject[] selectNodes = Singleton <Studio.Studio> .Instance.treeNodeCtrl.selectNodes; for (int i = 0; i < selectNodes.Length; i++) { if (Studio.Studio.Instance.dicInfo.TryGetValue(selectNodes[i], out ObjectCtrlInfo objectCtrlInfo)) { if (objectCtrlInfo is OCICharMale ociChar) { ociChar.ChangeChara(___charaFileSort.selectPath); } } } return(false); }
CharFileInfoCustomFemale GetCharCustom() { CharFileInfoCustomFemale charCustomFile = null; CharaList operatingList = listFemales.gameObject.activeInHierarchy ? listFemales.gameObject.GetComponent <CharaList>() : null; if (operatingList != null) { CharaFileSort charaFiles = (CharaFileSort)operatingList.GetType() .GetField("charaFileSort", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(operatingList); if (System.IO.File.Exists(charaFiles.selectPath) && charaFiles.selectPath != null) { CharFemaleFile charPNG = new CharFemaleFile(); charPNG.Load(charaFiles.selectPath, true, true); charCustomFile = charPNG.femaleCustomInfo; } return(charCustomFile); } return(charCustomFile); }
void Delete() { CharaList operatingList = mainCanvas.Find("01_Add/00_Female").gameObject.activeInHierarchy ? listFemale : mainCanvas.Find("01_Add/01_Male").gameObject.activeInHierarchy ? listMale : null; if (operatingList != null) { CharaFileSort charaFiles = (CharaFileSort)operatingList.GetType() .GetField("charaFileSort", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(operatingList); if (System.IO.File.Exists(charaFiles.selectPath) && charaFiles.selectPath != null) { var sortType = charaFiles.sortKind; mainCanvas.gameObject.SetActive(false); System.IO.File.Delete(charaFiles.selectPath); operatingList.InitCharaList(true); operatingList.OnSort(sortType); mainCanvas.gameObject.SetActive(true); } } }
//按鈕邏輯 internal static void OnButtonClick(CharaList __instance, int sex) { CharaFileSort charaFileSort = __instance.GetField("charaFileSort") as CharaFileSort; ChaFileControl chaFileControl = new ChaFileControl(); string fullPath = chaFileControl.ConvertCharaFilePath(charaFileSort.selectPath, (byte)sex, false); chaFileControl = null; OCIChar[] array = (from v in Singleton <GuideObjectManager> .Instance.selectObjectKey select Studio.Studio.GetCtrlInfo(v) as OCIChar into v where v != null select v).ToArray(); foreach (OCIChar ocichar in array) { ChaControl chaCtrl = ocichar.charInfo; foreach (OCIChar.BoneInfo boneInfo in (from v in ocichar.listBones where v.boneGroup == OIBoneInfo.BoneGroup.Hair select v).ToList <OCIChar.BoneInfo>()) { Singleton <GuideObjectManager> .Instance.Delete(boneInfo.guideObject, true); } ocichar.listBones = (from v in ocichar.listBones where v.boneGroup != OIBoneInfo.BoneGroup.Hair select v).ToList <OCIChar.BoneInfo>(); int[] array2 = (from b in ocichar.oiCharInfo.bones where b.Value.@group == OIBoneInfo.BoneGroup.Hair select b.Key).ToArray <int>(); for (int j = 0; j < array2.Length; j++) { ocichar.oiCharInfo.bones.Remove(array2[j]); } ocichar.hairDynamic = null; ocichar.skirtDynamic = null; string oldName = ocichar.charInfo.chaFile.parameter.fullname; //用這種方式初始化不會觸發其他鉤子 ChaControl tmpCtrl = new ChaControl(); tmpCtrl.SetProperty("chaFile", new ChaFileControl()); if (null != MoreAccessories) { CopyAllMoreAccessoriesData(ocichar.charInfo, tmpCtrl); } //Main Load Control if (chaCtrl.chaFile.LoadFileLimited(fullPath, (byte)sex, true, true, true, true, false) || !LoadExtendedData(ocichar, charaFileSort.selectPath, (byte)sex) || !UpdateTreeNodeObjectName(ocichar)) { Logger.LogError("Load Body FAILED"); } else { if (null != MoreAccessories) { CopyAllMoreAccessoriesData(tmpCtrl, ocichar.charInfo); } } GameObject.Destroy(tmpCtrl); ocichar.charInfo.AssignCoordinate((ChaFileDefine.CoordinateType)ocichar.charInfo.fileStatus.coordinateType); chaCtrl.Reload(false, false, false, false); AddObjectAssist.InitHairBone(ocichar, Singleton <Info> .Instance.dicBoneInfo); ocichar.hairDynamic = AddObjectFemale.GetHairDynamic(ocichar.charInfo.objHair); ocichar.skirtDynamic = AddObjectFemale.GetSkirtDynamic(ocichar.charInfo.objClothes); ocichar.InitFK(null); foreach (var tmp in FKCtrl.parts.Select((OIBoneInfo.BoneGroup p, int i2) => new { p, i2 })) { ocichar.ActiveFK(tmp.p, ocichar.oiCharInfo.activeFK[tmp.i2], ocichar.oiCharInfo.activeFK[tmp.i2]); } ocichar.ActiveKinematicMode(OICharInfo.KinematicMode.FK, ocichar.oiCharInfo.enableFK, true); ocichar.UpdateFKColor(new OIBoneInfo.BoneGroup[] { OIBoneInfo.BoneGroup.Hair }); ocichar.ChangeEyesOpen(ocichar.charFileStatus.eyesOpenMax); ocichar.ChangeBlink(ocichar.charFileStatus.eyesBlink); ocichar.ChangeMouthOpen(ocichar.oiCharInfo.mouthOpen); Logger.LogInfo($"Load Body: {oldName} -> {ocichar.charInfo.chaFile.parameter.fullname}"); } }