public static void Postfix(OCIChar __instance, CharDefine.CoordinateType _type, bool _force) { if (onSetCoordinateInfo != null) { onSetCoordinateInfo(__instance, _type, _force); } }
public static bool PoseSavePatch(OCIChar _ociChar, ref string _name) { var filename = $"{_name}_{DateTime.Now.ToString("yyyy_MMdd_HHmm_ss_fff")}{PngExt}"; var path = Path.Combine(SavePath.Value, filename); var fileInfo = new PauseCtrl.FileInfo(_ociChar); try { using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write)) using (var binaryWriter = new BinaryWriter(fileStream)) { var buffer = Studio.Studio.Instance.gameScreenShot.CreatePngScreen(320, 180, false, false); binaryWriter.Write(buffer); binaryWriter.Write(PauseCtrl.saveIdentifyingCode); binaryWriter.Write(PauseCtrl.saveVersion); binaryWriter.Write(_ociChar.oiCharInfo.sex); binaryWriter.Write(_name); fileInfo.Save(binaryWriter); } } catch (Exception ex) { Logger.Log(LogLevel.Message, "PosePng plugin save path has not been set properly"); Logger.Log(LogLevel.Error, ex); } return(false); }
internal static void GetTreeNodeInfo(TreeNodeObject _node) { int OldTreeNodeObjID = CurTreeNodeObjID; if (_node == null || ListSelectNodes.Count == 0) { if (OldTreeNodeObjID > -1) { CurOCIChar = null; CurTreeNodeObjID = -1; } return; } if (Studio.Studio.Instance.dicInfo.TryGetValue(_node, out ObjectCtrlInfo _info)) { CurTreeNodeObjID = StudioObjectExtensions.GetSceneId(_info); if (OldTreeNodeObjID != CurTreeNodeObjID) { OCIChar selected = _info as OCIChar; if (selected?.GetType() != null) { CurOCIChar = selected; } else { CurOCIChar = null; } } } }
public FileInfo(OCIChar _char = null) { if (_char == null) { return; } this.group = _char.oiCharInfo.animeInfo.group; this.category = _char.oiCharInfo.animeInfo.category; this.no = _char.oiCharInfo.animeInfo.no; this.normalizedTime = _char.charAnimeCtrl.normalizedTime; this.enableIK = _char.oiCharInfo.enableIK; for (int index = 0; index < this.activeIK.Length; ++index) { this.activeIK[index] = _char.oiCharInfo.activeIK[index]; } foreach (KeyValuePair <int, OIIKTargetInfo> keyValuePair in _char.oiCharInfo.ikTarget) { this.dicIK.Add(keyValuePair.Key, keyValuePair.Value.changeAmount.Clone()); } this.enableFK = _char.oiCharInfo.enableFK; for (int index = 0; index < this.activeFK.Length; ++index) { this.activeFK[index] = _char.oiCharInfo.activeFK[index]; } OIBoneInfo.BoneGroup fkGroup = OIBoneInfo.BoneGroup.Body | OIBoneInfo.BoneGroup.RightLeg | OIBoneInfo.BoneGroup.LeftLeg | OIBoneInfo.BoneGroup.RightArm | OIBoneInfo.BoneGroup.LeftArm | OIBoneInfo.BoneGroup.RightHand | OIBoneInfo.BoneGroup.LeftHand | OIBoneInfo.BoneGroup.Neck | OIBoneInfo.BoneGroup.Breast; foreach (KeyValuePair <int, OIBoneInfo> keyValuePair in _char.oiCharInfo.bones.Where <KeyValuePair <int, OIBoneInfo> >((Func <KeyValuePair <int, OIBoneInfo>, bool>)(b => (fkGroup & b.Value.group) != (OIBoneInfo.BoneGroup) 0))) { this.dicFK.Add(keyValuePair.Key, keyValuePair.Value.changeAmount.Clone()); } for (int index = 0; index < this.expression.Length; ++index) { this.expression[index] = _char.oiCharInfo.expression[index]; } }
internal static void GetSiruFlags(ChaFileDefine.SiruParts _parts, OCIChar __instance, ref byte __result) { if (__instance is OCICharMale charMale) { __result = charMale.male.GetSiruFlags(_parts); } }
private static IEnumerator EnableFKIKCoroutine(OCIChar ociChar) { yield return(null); ChangingChara = false; EnableFKIK(ociChar); }
// Token: 0x0600000A RID: 10 RVA: 0x0000244C File Offset: 0x0000064C public static void OnSave(XmlElement rootElement) { try { rootElement.SetAttribute("Version", "1"); KKVMDPlayExtSavePlugin.saveLoadForScene.OnSave(rootElement); Studio.Studio instance = Singleton <Studio.Studio> .Instance; new List <OCIChar>(); foreach (KeyValuePair <int, ObjectCtrlInfo> keyValuePair in from e in instance.dicObjectCtrl orderby e.Key select e) { if (keyValuePair.Value is OCIChar) { OCIChar ocichar = keyValuePair.Value as OCIChar; XmlElement xmlElement = KKVMDPlayExtSavePlugin.AddVMDCharaInfoElem(rootElement, ocichar, ocichar.charInfo); if (xmlElement != null) { xmlElement.SetAttribute("dicKey", keyValuePair.Key.ToString()); } } } } catch (Exception value) { Console.WriteLine(value); } }
internal static void RegisterControls() { if (!JetPack.CharaStudio.Running) { return; } _charaConfigWindow = _instance.gameObject.AddComponent <AccStateSyncUI>(); Texture2D _iconTex = TextureUtils.LoadTexture(ResourceUtils.GetEmbeddedResource("toolbar_icon.png")); _ttConfigWindow = CustomToolbarButtons.AddLeftToolbarToggle(_iconTex, false, _value => _charaConfigWindow.enabled = _value); List <Button> _buttons = GameObject.Find("StudioScene/Canvas Main Menu/02_Manipulate/00_Chara/01_State/Viewport/Content/Clothing Details").GetComponentsInChildren <Button>().ToList(); _buttons.Add(GameObject.Find($"StudioScene/Canvas Main Menu/02_Manipulate/00_Chara/01_State/Viewport/Content/Cos/Button Shoes 1").GetComponent <Button>()); _buttons.Add(GameObject.Find($"StudioScene/Canvas Main Menu/02_Manipulate/00_Chara/01_State/Viewport/Content/Cos/Button Shoes 2").GetComponent <Button>()); foreach (Button _button in _buttons) { _button.onClick.AddListener(delegate() { _instance.StartCoroutine(StatusPanelUpdateCoroutine()); }); } JetPack.CharaStudio.OnSelectNodeChange += (_sender, _args) => { _curTreeNodeObjID = JetPack.CharaStudio.CurTreeNodeObjID; _curOCIChar = JetPack.CharaStudio.CurOCIChar; UpdateUI(); }; HarmonyLib.Harmony.CreateAndPatchAll(typeof(HooksCharaStudio)); }
void Update() { if (InsideCharaStudio) { TreeNodeObject treeNodeObject = Studio.Studio.Instance.treeNodeCtrl.selectNode; if (treeNodeObject != null) { ObjectCtrlInfo info; if (Studio.Studio.Instance.dicInfo.TryGetValue(treeNodeObject, out info)) { OCIChar selected = info as OCIChar; if (selected != CurOCIChar) { CurOCIChar = selected; // Logger.LogWarning($"{StudioObjectExtensions.GetSceneId(info)}"); if (CurOCIChar?.GetType().ToString() != null) { UpdateStudioUI(); } } } } } }
private void ChangedOptionParam(float _value, int _kind) { if (this.isUpdateInfo) { return; } if (((IList <ObjectCtrlInfo>) this.arrayTarget).IsNullOrEmpty <ObjectCtrlInfo>()) { this.DownOptionParam((BaseEventData)null, _kind); } float num = Mathf.Lerp(0.0f, 1f, _value); for (int index = 0; index < this.num; ++index) { OCIChar ociChar = this.arrayTarget[index] as OCIChar; if (_kind == 0) { ociChar.animeOptionParam1 = num; } else { ociChar.animeOptionParam2 = num; } } this.inputOptionParam[_kind].set_text(num.ToString("0.00")); }
public void UpdateInfo() { this.isUpdateInfo = true; this.arrayTarget = (ObjectCtrlInfo[])null; bool flag1 = this.m_ObjectCtrlInfo.kind == 0; OCIChar objectCtrlInfo = this.m_ObjectCtrlInfo as OCIChar; bool flag2 = flag1 && objectCtrlInfo.isHAnime; this.sliderSpeed.set_value(this.m_ObjectCtrlInfo.animeSpeed); this.inputSpeed.set_text(this.m_ObjectCtrlInfo.animeSpeed.ToString("0.00")); ((Selectable)this.sliderPattern).set_interactable(flag1); ((Selectable)this.inputPattern).set_interactable(flag1); this.sliderPattern.set_value(!flag1 ? 0.5f : Mathf.InverseLerp(0.0f, 1f, objectCtrlInfo.animePattern)); this.inputPattern.set_text(!flag1 ? "-" : objectCtrlInfo.animePattern.ToString("0.00")); for (int index = 0; index < 2; ++index) { ((Selectable)this.sliderOptionParam[index]).set_interactable(flag2); ((Selectable)this.inputOptionParam[index]).set_interactable(flag2); this.sliderOptionParam[index].set_value(!flag2 ? 0.5f : objectCtrlInfo.animeOptionParam[index]); this.inputOptionParam[index].set_text(!flag2 ? "-" : objectCtrlInfo.animeOptionParam[index].ToString("0.00")); } ((Selectable)this.toggleOption).set_interactable(flag1); this.toggleOption.set_isOn(flag1 && objectCtrlInfo.optionItemCtrl.visible); ((Selectable)this.toggleLoop).set_interactable(flag1); this.toggleLoop.set_isOn(flag1 && objectCtrlInfo.charAnimeCtrl.isForceLoop); ((Selectable)this.buttons[2]).set_interactable(flag1); ((Selectable)this.buttons[3]).set_interactable(flag1); this.isUpdateInfo = false; }
public static bool ApplyPrefix(OCIChar _char, PauseCtrl.FileInfo __instance) { _char.LoadAnime(__instance.group, __instance.category, __instance.no, __instance.normalizedTime); for (int i = 0; i < __instance.activeIK.Length; i++) { _char.ActiveIK((OIBoneInfo.BoneGroup)(1 << i), __instance.activeIK[i], false); } _char.ActiveKinematicMode(OICharInfo.KinematicMode.IK, __instance.enableIK, true); foreach (KeyValuePair <int, ChangeAmount> keyValuePair in __instance.dicIK) { _char.oiCharInfo.ikTarget[keyValuePair.Key].changeAmount.Copy(keyValuePair.Value, true, true, true); } for (int j = 0; j < __instance.activeFK.Length; j++) { _char.ActiveFK(FKCtrl.parts[j], __instance.activeFK[j], false); } _char.ActiveKinematicMode(OICharInfo.KinematicMode.FK, __instance.enableFK, true); foreach (KeyValuePair <int, ChangeAmount> keyValuePair2 in __instance.dicFK) { _char.oiCharInfo.bones.TryGetValue(keyValuePair2.Key, out OIBoneInfo value); value?.changeAmount.Copy(keyValuePair2.Value, true, true, true); } for (int k = 0; k < __instance.expression.Length; k++) { _char.EnableExpressionCategory(k, __instance.expression[k]); } return(false); }
static void Postfix(OCIChar __instance) { var bmm = __instance.charInfo.human.GetComponent <BMMHuman>(); bmm.Name = __instance.charStatus.name; bmm.reset = true; }
public static void Postfix(OCIChar __instance, string _path) { if (onLoadClothesFile != null) { onLoadClothesFile(__instance); } }
internal static void Apply(PauseCtrl.FileInfo __instance, OCIChar _char) { if (__instance.enableFK && __instance.enableIK) { EnableFKIK(_char); } }
private void UpdateBlend(List <BlendSets.Set> sets, OCIChar chara) { foreach (var button in blendSetList.content.GetComponentsInChildren <Image>()) { button.gameObject.SetActive(false); Destroy(button); } foreach (var set in sets) { set.CreateActions(chara); var panel = UIUtility.CreatePanel("ShapePanel", blendSetList.content.transform); panel.gameObject.AddComponent <LayoutElement>().preferredHeight = elementSize; panel.color = new Color(1f, 1f, 1f, 1f); var text = UIUtility.CreateText("ShapeName", panel.transform, set.Name); text.transform.SetRect(0.01f, 0.01f, 0.44f, 0.99f); text.color = Color.black; text.alignment = TextAnchor.MiddleCenter; var slider = UIUtility.CreateSlider("ShapeSlider", panel.transform); slider.transform.SetRect(0.45f, 0.01f, 0.99f, 0.99f); slider.maxValue = 100f; slider.minValue = 0f; slider.value = set.Value; slider.onValueChanged.AddListener((value) => set.ChangeValue(value)); } }
internal static void ActiveKinematicModePostfix(OCIChar __instance, ref bool __state) { if (__state && ChangingChara) { Instance.StartCoroutine(EnableFKIKCoroutine(__instance)); } }
public CharaLoadEventArgs(OCIChar _chara, CharaLoadMode _mode, CharaLoadState _state) { ChaControl = _chara?.charInfo; OCIChar = _chara; Mode = _mode; State = _state; }
/// <summary> /// Fired when currently selected character changes and the controls need to be updated /// </summary> /// <param name="ociChar">Newly selected character</param> protected internal virtual void UpdateInfo(OCIChar ociChar) { foreach (var subItem in SubItems) { subItem.OnUpdateInfo(ociChar); } }
public static void InitIKTarget(OCIChar _ociChar, bool _addInfo) { IKSolverFullBodyBiped solver = (IKSolverFullBodyBiped)_ociChar.finalIK.solver; BipedReferences references = (BipedReferences)_ociChar.finalIK.references; _ociChar.ikCtrl = _ociChar.preparation.IKCtrl; AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 0, solver.get_bodyEffector(), false, (Transform)references.pelvis); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 1, solver.get_leftShoulderEffector(), false, (Transform)references.leftUpperArm); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 2, solver.get_leftArmChain(), false, (Transform)references.leftForearm); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 3, solver.get_leftHandEffector(), true, (Transform)references.leftHand); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 4, solver.get_rightShoulderEffector(), false, (Transform)references.rightUpperArm); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 5, solver.get_rightArmChain(), false, (Transform)references.rightForearm); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 6, solver.get_rightHandEffector(), true, (Transform)references.rightHand); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 7, solver.get_leftThighEffector(), false, (Transform)references.leftThigh); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 8, solver.get_leftLegChain(), false, (Transform)references.leftCalf); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 9, solver.get_leftFootEffector(), true, (Transform)references.leftFoot); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 10, solver.get_rightThighEffector(), false, (Transform)references.rightThigh); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 11, solver.get_rightLegChain(), false, (Transform)references.rightCalf); AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 12, solver.get_rightFootEffector(), true, (Transform)references.rightFoot); if (!_addInfo) { return; } _ociChar.ikCtrl.InitTarget(); }
public static void SetSiruFlags(ChaFileDefine.SiruParts _parts, byte _state, OCIChar __instance) { if (__instance is OCICharMale charMale) { charMale.male.SetSiruFlags(_parts, _state); } }
public static void InitLookAt(OCIChar _ociChar) { bool flag = _ociChar.oiCharInfo.lookAtTarget == null; if (flag) { _ociChar.oiCharInfo.lookAtTarget = new LookAtTargetInfo(Studio.Studio.GetNewIndex()); } Transform lookAtTarget = _ociChar.preparation.LookAtTarget; if (flag) { _ociChar.oiCharInfo.lookAtTarget.changeAmount.pos = lookAtTarget.get_localPosition(); } GuideObject _guideObject = Singleton <GuideObjectManager> .Instance.Add(lookAtTarget, _ociChar.oiCharInfo.lookAtTarget.dicKey); _guideObject.enableRot = false; _guideObject.enableScale = false; _guideObject.enableMaluti = false; _guideObject.scaleRate = 0.5f; _guideObject.scaleSelect = 0.25f; _guideObject.parentGuide = _ociChar.guideObject; _guideObject.changeAmount.OnChange(); _guideObject.mode = GuideObject.Mode.World; _guideObject.moveCalc = GuideMove.MoveCalc.TYPE2; _ociChar.lookAtInfo = new OCIChar.LookAtInfo(_guideObject, _ociChar.oiCharInfo.lookAtTarget); _ociChar.lookAtInfo.active = false; }
public void Apply(OCIChar _char) { _char.LoadAnime(this.group, this.category, this.no, this.normalizedTime); for (int index = 0; index < this.activeIK.Length; ++index) { _char.ActiveIK((OIBoneInfo.BoneGroup)(1 << index), this.activeIK[index], false); } _char.ActiveKinematicMode(OICharInfo.KinematicMode.IK, this.enableIK, true); foreach (KeyValuePair <int, ChangeAmount> keyValuePair in this.dicIK) { _char.oiCharInfo.ikTarget[keyValuePair.Key].changeAmount.Copy(keyValuePair.Value, true, true, true); } for (int index = 0; index < this.activeFK.Length; ++index) { _char.ActiveFK(FKCtrl.parts[index], this.activeFK[index], false); } _char.ActiveKinematicMode(OICharInfo.KinematicMode.FK, this.enableFK, true); foreach (KeyValuePair <int, ChangeAmount> keyValuePair in this.dicFK) { _char.oiCharInfo.bones[keyValuePair.Key].changeAmount.Copy(keyValuePair.Value, true, true, true); } for (int _category = 0; _category < this.expression.Length; ++_category) { _char.EnableExpressionCategory(_category, this.expression[_category]); } }
/// <summary> /// Enable simultaneous kinematics for the specified OCIChar /// </summary> public static void EnableFKIK(OCIChar ociChar) { //Store the original neck look pattern var origPtn = ociChar.neckLookCtrl.ptnNo; ociChar.oiCharInfo.enableIK = true; ociChar.ActiveIK(BoneGroup.Body, ociChar.oiCharInfo.activeIK[0], true); ociChar.ActiveIK(BoneGroup.RightLeg, ociChar.oiCharInfo.activeIK[1], true); ociChar.ActiveIK(BoneGroup.LeftLeg, ociChar.oiCharInfo.activeIK[2], true); ociChar.ActiveIK(BoneGroup.RightArm, ociChar.oiCharInfo.activeIK[3], true); ociChar.ActiveIK(BoneGroup.LeftArm, ociChar.oiCharInfo.activeIK[4], true); ociChar.ActiveKinematicMode(OICharInfo.KinematicMode.IK, true, true); ociChar.oiCharInfo.activeFK[3] = false; ociChar.fkCtrl.enabled = true; ociChar.oiCharInfo.enableFK = true; for (int j = 0; j < FKCtrl.parts.Length; j++) { ociChar.ActiveFK(FKCtrl.parts[j], ociChar.oiCharInfo.activeFK[j], true); } //Restore the original neck look pattern which will have been overwritten if (origPtn != ociChar.neckLookCtrl.ptnNo) { ociChar.ChangeLookNeckPtn(origPtn); } }
public static void ChangeCharaPostfix(OCIChar __instance) { if (KK_FBIOpenUp._isenabled) { Patches.ChangeChara(__instance.charInfo); } }
public static void SetBlendShapesObj(OCIChar ocichar, Dictionary <string, Dictionary <string, float> > fullObj) { var stringWriter = new StringWriter(); var xmlTextWriter = new XmlTextWriter(stringWriter); xmlTextWriter.WriteStartElement("blendShapes"); //self.GetBlendShapesEditor(ocichar).SaveXml(xmlTextWriter) xmlTextWriter.WriteStartElement("skinnedMeshes"); foreach (var smeshes in fullObj.Keys) { xmlTextWriter.WriteStartElement("skinnedMesh"); xmlTextWriter.WriteAttributeString("name", smeshes.ToString()); foreach (var smesh in fullObj[smeshes].Keys) { xmlTextWriter.WriteStartElement("blendShape"); xmlTextWriter.WriteAttributeString("index", smesh.ToString()); xmlTextWriter.WriteAttributeString("weight", fullObj[smeshes][smesh].ToString()); xmlTextWriter.WriteEndElement(); } xmlTextWriter.WriteEndElement(); } xmlTextWriter.WriteEndElement(); xmlTextWriter.WriteEndElement(); //print stringWriter.ToString() var text = stringWriter.ToString(); //pass SetBlendShapesXML(ocichar, text); }
public static bool PoseLoadPatch(OCIChar _ociChar, ref string _path, ref bool __result) { if (Path.GetExtension(_path).ToLower() == PngExt) { var fileInfo = new PauseCtrl.FileInfo(null); using (var fileStream = new FileStream(_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var binaryReader = new BinaryReader(fileStream)) { PngFile.SkipPng(binaryReader); if (string.Compare(binaryReader.ReadString(), PauseCtrl.saveIdentifyingCode) != 0) { __result = false; return(false); } int ver = binaryReader.ReadInt32(); binaryReader.ReadInt32(); binaryReader.ReadString(); fileInfo.Load(binaryReader, ver); } fileInfo.Apply(_ociChar); __result = true; return(false); } return(true); }
public static void Postfix(OCIChar __instance, string _path) { if (onChangeChara != null) { onChangeChara(__instance); } }
internal static void DisableFKIK(OCIChar ociChar) { ociChar.oiCharInfo.enableIK = false; ociChar.oiCharInfo.enableFK = false; ociChar.finalIK.enabled = true; ociChar.ActiveKinematicMode(OICharInfo.KinematicMode.IK, false, true); ociChar.ActiveKinematicMode(OICharInfo.KinematicMode.FK, false, true); }
private void OnDeleteWork(ObjectCtrlInfo info) { if (info.kind == 0) { currentCharaOCI = null; currentCharaInfo = null; } }