public bool CopyParamTo(DynamicBone_Ver02 target) { if (parameters == null || particles == null) { return(false); } if (parameters.Count() != 3 || particles.Count() != 4) { return(false); } target.Gravity.Set(gravity.x, gravity.y, gravity.z); for (int i = 0; i < parameters.Count(); i++) { target.Patterns[0].Params[i].IsRotationCalc = parameters[i].IsRotationCalc; target.Patterns[0].Params[i].Damping = parameters[i].Damping; target.Patterns[0].Params[i].Elasticity = parameters[i].Elasticity; target.Patterns[0].Params[i].Stiffness = parameters[i].Stiffness; target.Patterns[0].Params[i].Inert = parameters[i].Inert; } for (int i = 0; i < particles.Count(); i++) { target.Patterns[0].ParticlePtns[i].IsRotationCalc = particles[i].IsRotationCalc; target.Patterns[0].ParticlePtns[i].Damping = particles[i].Damping; target.Patterns[0].ParticlePtns[i].Elasticity = particles[i].Elasticity; target.Patterns[0].ParticlePtns[i].Stiffness = particles[i].Stiffness; target.Patterns[0].ParticlePtns[i].Inert = particles[i].Inert; } return(true); }
public bool Init(ChaControl _female) { this.chaFemale = _female; if (Object.op_Equality((Object)this.chaFemale, (Object)null)) { return(false); } DynamicBone_Ver02[] dynamicBoneVer02Array = new DynamicBone_Ver02[2] { this.chaFemale.GetDynamicBoneBustAndHip(ChaControlDefine.DynamicBoneKind.BreastL), this.chaFemale.GetDynamicBoneBustAndHip(ChaControlDefine.DynamicBoneKind.BreastR) }; for (int index1 = 0; index1 < 2; ++index1) { this.lstsRef[index1] = new List <DynamicBoneReferenceCtrl.Reference>(); this.bonePtns[index1] = new DynamicBone_Ver02.BonePtn(); this.lstsTrans[index1] = new List <Transform>(); if (Object.op_Inequality((Object)dynamicBoneVer02Array[index1], (Object)null) && dynamicBoneVer02Array[index1].Patterns.Count > 0) { this.bonePtns[index1] = dynamicBoneVer02Array[index1].Patterns[0]; for (int index2 = 1; index2 < this.bonePtns[index1].Params.Count; ++index2) { this.lstsTrans[index1].Add(this.bonePtns[index1].Params[index2].RefTransform); } } } return(true); }
public static void RegisterDynamicBone(DynamicBone_Ver02 bone, Action <DynamicBone_Ver02> updateListener) { bool foundBone = false; foreach (WeakReference <DynamicBone_Ver02> wr in DynamicBoneV2UpdateListeners.Keys) { bool found = wr.TryGetTarget(out DynamicBone_Ver02 checkBone); if (found && checkBone == bone) { #if DEBUG Log.LogInfo($"Adding Listener to {bone.name}"); #endif DynamicBoneV2UpdateListeners[wr].Add(updateListener); foundBone = true; break; } } if (!foundBone) { #if DEBUG Log.LogInfo($"Adding new Bone Listener {bone.name}"); #endif List <Action <DynamicBone_Ver02> > listeners = new List <Action <DynamicBone_Ver02> >(); listeners.Add(updateListener); DynamicBoneV2UpdateListeners[new WeakReference <DynamicBone_Ver02>(bone)] = listeners; } }
/// <summary> /// Apply adjustments to breast dynamic bones /// </summary> private void UpdateBreastDB(DynamicBone_Ver02 dynamicBone) { if (!BreastDBComments.Contains(dynamicBone.Comment)) { return; } //Expand the collision radius for the breast dynamic bones foreach (var pat in dynamicBone.Patterns) { #if KK pat.Params[0].CollisionRadius = BreastCollidersEnabled ? 0.08f * BreastCollisionRadiusMultiplier : 0; pat.Params[1].CollisionRadius = BreastCollidersEnabled ? 0.06f * BreastCollisionRadiusMultiplier : 0; #elif AI pat.Params[2].CollisionRadius = BreastCollidersEnabled ? 0.8f * BreastCollisionRadiusMultiplier : 0; pat.Params[3].CollisionRadius = BreastCollidersEnabled ? 0.6f * BreastCollisionRadiusMultiplier : 0; #else throw new System.NotImplementedException(); #endif } dynamicBone.GetType().GetMethod("InitNodeParticle", AccessTools.all).Invoke(dynamicBone, null); dynamicBone.GetType().GetMethod("SetupParticles", AccessTools.all).Invoke(dynamicBone, null); dynamicBone.InitLocalPosition(); if ((bool)dynamicBone.GetType().GetMethod("IsRefTransform", AccessTools.all).Invoke(dynamicBone, null)) { dynamicBone.setPtn(0, true); } dynamicBone.GetType().GetMethod("InitTransforms", AccessTools.all).Invoke(dynamicBone, null); }
/// <summary> /// Applies this character's arm colliders to breast dynamic bones /// </summary> private void UpdateArmCollidersBreastDB(DynamicBone_Ver02 dynamicBone) { if (!BreastDBComments.Contains(dynamicBone.Comment)) { return; } if (ArmColliders == null) { return; } UpdateArmCollidersBreastDB(dynamicBone, ArmColliders); for (var i = 0; i < ArmColliders.Count; i++) { var armCollider = ArmColliders[i]; if (!BreastCollidersEnabled) { dynamicBone.Colliders.Remove(armCollider); } else if (armCollider != null && !dynamicBone.Colliders.Contains(armCollider)) { dynamicBone.Colliders.Add(armCollider); } } }
/// <summary> /// Apply adjustments to breast dynamic bones /// </summary> private void UpdateBreastDB(DynamicBone_Ver02 dynamicBone) { if (!BreastDBComments.Contains(dynamicBone.Comment)) { return; } //Expand the collision radius for the breast dynamic bones for (var index = 0; index < dynamicBone.Patterns.Count; index++) { var pat = dynamicBone.Patterns[index]; #if KK || KKS pat.Params[0].CollisionRadius = BreastCollidersEnabled ? 0.10f * BreastSize : 0; pat.Params[1].CollisionRadius = BreastCollidersEnabled ? 0.08f * BreastSize : 0; #elif AI || HS2 pat.Params[2].CollisionRadius = BreastCollidersEnabled ? 1.0f * BreastSize : 0; pat.Params[3].CollisionRadius = BreastCollidersEnabled ? 0.8f * BreastSize : 0; #endif } dynamicBone.GetType().GetMethod("InitNodeParticle", AccessTools.all).Invoke(dynamicBone, null); dynamicBone.GetType().GetMethod("SetupParticles", AccessTools.all).Invoke(dynamicBone, null); dynamicBone.InitLocalPosition(); if ((bool)dynamicBone.GetType().GetMethod("IsRefTransform", AccessTools.all).Invoke(dynamicBone, null)) { dynamicBone.setPtn(0, true); } dynamicBone.GetType().GetMethod("InitTransforms", AccessTools.all).Invoke(dynamicBone, null); }
public static bool ApplyParamBust(ParamBustCustom source, DynamicBone_Ver02 target) { Regex regex = new Regex("_R$"); //For Params //Parameter Patterns[0]="通常" target.setGravity(0, new UnityEngine.Vector3(0, source.gravity, 0)); for (int i = 0; i < target.Patterns[0].Params.Count; i++) { string boneName = regex.Replace(target.Patterns[0].Params[i].Name, "_L"); if (source.paramBones.ContainsKey(boneName)) { ParamBone parameterSet = source.paramBones[boneName]; if (parameterSet != null) { parameterSet.CopyParameterTo(target.Patterns[0].Params[i]); } else { return(false); } } } //For ParticlePtn //ParticlePtn Patterns[0]="通常" CopyParamsToParticlePtn(target); //For Particle. Must set at last. target.setPtn(0, true); return(true); }
public void ReCalc(params int[] changePtn) { if (Object.op_Equality((Object)null, (Object)this.chaCtrl) || Object.op_Equality((Object)null, (Object)this.info) || changePtn.Length == 0) { return; } float rate = Mathf.Clamp((float)((double)this.info.fileBody.bustSoftness * (double)this.info.fileBody.shapeValueBody[1] + 0.00999999977648258), 0.0f, 1f); float _stiffness = this.TreeLerp(this.bustStiffness, rate); float _elasticity = this.TreeLerp(this.bustElasticity, rate); float _damping = this.TreeLerp(this.bustDamping, rate); DynamicBone_Ver02[] dynamicBoneVer02Array = new DynamicBone_Ver02[2] { this.chaCtrl.GetDynamicBoneBustAndHip(ChaControlDefine.DynamicBoneKind.BreastL), this.chaCtrl.GetDynamicBoneBustAndHip(ChaControlDefine.DynamicBoneKind.BreastR) }; foreach (int _ptn in changePtn) { foreach (DynamicBone_Ver02 dynamicBoneVer02 in dynamicBoneVer02Array) { if (Object.op_Inequality((Object)dynamicBoneVer02, (Object)null)) { dynamicBoneVer02.setSoftParams(_ptn, -1, _damping, _elasticity, _stiffness, true); } } } }
public void LoadFrom(BoobsEditor other) { PHPE._self.ExecuteDelayed(() => { ChaControl charFemale = this._target.ociChar.charInfo; ChaControl otherFemale = other._target.ociChar.charInfo; this._alternativeUpdateMode = other._alternativeUpdateMode; foreach (KeyValuePair <DynamicBone_Ver02, BoobData> kvp in other._dirtyDynamicBones) { DynamicBone_Ver02 db = this.GetDynamicBone(other.GetID(kvp.Key)); if (db != null) { if (kvp.Value.originalEnabled.hasValue) { db.enabled = other.GetEnabled(kvp.Key); } if (kvp.Value.originalForce.hasValue) { db.Force = other.GetForce(kvp.Key); } if (kvp.Value.originalGravity.hasValue) { db.Gravity = other.GetGravity(kvp.Key); } this._dirtyDynamicBones.Add(db, new BoobData(kvp.Value)); } } }, 2); }
public void CopyParamFrom(DynamicBone_Ver02 target) { gravity.Set(target.Gravity.x, target.Gravity.y, target.Gravity.z); parameters = new ParamBone[target.Patterns[0].Params.Count()]; for (int i = 0; i < parameters.Count(); i++) { ParamBone param = new ParamBone(""); param.IsRotationCalc = target.Patterns[0].Params[i].IsRotationCalc; param.Damping = target.Patterns[0].Params[i].Damping; param.Elasticity = target.Patterns[0].Params[i].Elasticity; param.Stiffness = target.Patterns[0].Params[i].Stiffness; param.Inert = target.Patterns[0].Params[i].Inert; parameters[i] = param; } particles = new ParamBone[target.Patterns[0].ParticlePtns.Count()]; for (int i = 0; i < particles.Count(); i++) { particles[i] = new ParamBone(""); particles[i].IsRotationCalc = target.Patterns[0].ParticlePtns[i].IsRotationCalc; particles[i].Damping = target.Patterns[0].ParticlePtns[i].Damping; particles[i].Elasticity = target.Patterns[0].ParticlePtns[i].Elasticity; particles[i].Stiffness = target.Patterns[0].ParticlePtns[i].Stiffness; particles[i].Inert = target.Patterns[0].ParticlePtns[i].Inert; } }
public static void ResetButtGravity(DynamicBone_Ver02 bone) { UpdateButtGravity(bone, new Vector3( BoobController.floatDefaults[BoobController.BUTT + BoobController.GRAVITY_X], BoobController.floatDefaults[BoobController.BUTT + BoobController.GRAVITY_Y], BoobController.floatDefaults[BoobController.BUTT + BoobController.GRAVITY_Z] )); }
private void DisplaySingle(DynamicBone_Ver02 elem, string label) { GUILayout.BeginHorizontal(); GUILayout.Label(label + (this.IsDirty(elem) ? "*" : "")); GUILayout.FlexibleSpace(); bool e = this.GetEnabled(elem); bool newE = GUILayout.Toggle(e, "Enabled"); if (newE != e) { this.SetEnabled(elem, newE); } GUILayout.EndHorizontal(); GUILayout.Label("Gravity"); Vector3 gravity = this.GetGravity(elem); Vector3 newGravity = this.Vector3Editor(gravity, AdvancedModeModule._redColor, "X: ", "Y: ", "Z: "); if (newGravity != gravity) { this.SetGravity(elem, newGravity); } GUILayout.Label("Force"); Vector3 force = this.GetForce(elem); Vector3 newForce = this.Vector3Editor(force, AdvancedModeModule._blueColor, "X: ", "Y: ", "Z: "); if (newForce != force) { this.SetForce(elem, newForce); } GUILayout.BeginHorizontal(); if (GUILayout.Button("Go to root", GUILayout.ExpandWidth(false))) { this._parent.EnableModule(this._parent._bonesEditor); this._parent._bonesEditor.GoToObject(elem.Root.gameObject); } if (GUILayout.Button("Go to tail", GUILayout.ExpandWidth(false))) { this._parent.EnableModule(this._parent._bonesEditor); this._parent._bonesEditor.GoToObject(elem.Root.GetDeepestLeaf().gameObject); } GUILayout.FlexibleSpace(); Color c = GUI.color; GUI.color = AdvancedModeModule._redColor; if (GUILayout.Button("Reset", GUILayout.ExpandWidth(false))) { this.SetNotDirty(elem); } GUI.color = c; GUILayout.EndHorizontal(); }
public static void UpdateButtGravity(DynamicBone_Ver02 bone, Vector3 gravity) { if (bone == null) { return; } bone.setGravity(0, gravity, true); }
public BoobsEditor(CharaPoseController parent, GenericOCITarget target) : base(parent) { this._target = target; this._parent.onLateUpdate += this.LateUpdate; if (_debugLines == null) { _debugLines = new DebugLines(); _debugLines.SetActive(false); } this._leftBoob = this._target.ociChar.charInfo.human.body.bustDynamicBone_L; this._rightBoob = this._target.ociChar.charInfo.human.body.bustDynamicBone_R; DynamicBone_Ver02_LateUpdate_Patches.shouldExecuteLateUpdate += this.ShouldExecuteDynamicBoneLateUpdate; MethodInfo initTransforms = typeof(DynamicBone_Ver02).GetMethod("InitTransforms", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy); MethodInfo updateDynamicBones = typeof(DynamicBone_Ver02).GetMethod("UpdateDynamicBones", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy); this._leftBoobInitTransforms = (Action)Delegate.CreateDelegate(typeof(Action), this._leftBoob, initTransforms); this._leftBoobUpdateDynamicBones = (Action <float>)Delegate.CreateDelegate(typeof(Action <float>), this._leftBoob, updateDynamicBones); this._rightBoobInitTransforms = (Action)Delegate.CreateDelegate(typeof(Action), this._rightBoob, initTransforms); this._rightBoobUpdateDynamicBones = (Action <float>)Delegate.CreateDelegate(typeof(Action <float>), this._rightBoob, updateDynamicBones); this._dynamicBones = this._parent.GetComponentsInChildren <DynamicBone_Ver02>(true); foreach (KeyValuePair <DynamicBoneColliderBase, CollidersEditor> pair in CollidersEditor._loneColliders) { DynamicBoneCollider normalCollider = pair.Key as DynamicBoneCollider; if (normalCollider == null) { continue; } HashSet <object> ignoredDynamicBones; if (pair.Value._dirtyColliders.TryGetValue(pair.Key, out CollidersEditor.ColliderDataBase data) == false || data.ignoredDynamicBones.TryGetValue(this._parent, out ignoredDynamicBones) == false) { ignoredDynamicBones = null; } foreach (DynamicBone_Ver02 bone in this._dynamicBones) { if (ignoredDynamicBones != null && ignoredDynamicBones.Contains(bone)) // Should be ignored { if (bone.Colliders.Contains(normalCollider)) { bone.Colliders.Remove(normalCollider); } } else { if (bone.Colliders.Contains(normalCollider) == false) { bone.Colliders.Add(normalCollider); } } } } this._incIndex = -3; }
public static void ResetButtPhysics(DynamicBone_Ver02 bone) { UpdateButtPhysics( bone, BoobController.floatDefaults[BoobController.BUTT + BoobController.DAMPING], BoobController.floatDefaults[BoobController.BUTT + BoobController.ELASTICITY], BoobController.floatDefaults[BoobController.BUTT + BoobController.STIFFNESS], BoobController.floatDefaults[BoobController.BUTT + BoobController.INERT] ); }
public static void UpdateBustInert(DynamicBone_Ver02 bone, float inert) { if (bone == null) { return; } bone.setSoftParamsEx(0, -1, inert, true); bone.ResetPosition(); }
private void SetForce(DynamicBone_Ver02 bone, Vector3 force) { BoobData data = this.SetDirty(bone); if (data.originalForce.hasValue == false) { data.originalForce = bone.Force; } data.force = force; }
private void SetGravity(DynamicBone_Ver02 bone, Vector3 gravity) { BoobData data = this.SetDirty(bone); if (data.originalGravity.hasValue == false) { data.originalGravity = bone.Gravity; } data.gravity = gravity; }
private void SetEnabled(DynamicBone_Ver02 bone, bool e) { BoobData data = this.SetDirty(bone); if (data.originalEnabled.hasValue == false) { data.originalEnabled = bone.enabled; } data.enabled = e; }
private Vector3 GetForce(DynamicBone_Ver02 bone) { BoobData data; if (this._dirtyDynamicBones.TryGetValue(bone, out data) && data.originalForce.hasValue) { return(data.force); } return(bone.Force); }
private Vector3 GetGravity(DynamicBone_Ver02 bone) { BoobData data; if (this._dirtyDynamicBones.TryGetValue(bone, out data) && data.originalGravity.hasValue) { return(data.gravity); } return(bone.Gravity); }
private bool GetEnabled(DynamicBone_Ver02 bone) { BoobData data; if (this._dirtyDynamicBones.TryGetValue(bone, out data) && data.originalEnabled.hasValue) { return(data.enabled); } return(bone.enabled); }
public void OnDynamicBoneV2Update(DynamicBone_Ver02 bone) { #if DEBUG if (parentTransform == null) { Log.LogInfo($"Receiving Update on Dead Controller: {bone.name}"); } #endif LateUpdate(); }
public void UpdateBone(DynamicBone_Ver02 bone) { if (bone == null) { return; } UpdateSoftness(bone); UpdateWeight(bone); }
public static bool Prefix(DynamicBone_Ver02 __instance) { bool result = true; if (shouldExecuteLateUpdate != null) { shouldExecuteLateUpdate(__instance, ref result); } return(result); }
private BoobData SetDirty(DynamicBone_Ver02 boob) { BoobData data; if (this._dirtyDynamicBones.TryGetValue(boob, out data) == false) { data = new BoobData(); this._dirtyDynamicBones.Add(boob, data); } return(data); }
private void DynamicBoneDraggingLogic() { if (this._preDragAction != null) { this._preDragAction(); } this._preDragAction = null; if (Input.GetMouseButtonDown(0)) { float distanceFromCamera = float.PositiveInfinity; Vector3 leftBoobRaycastPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Vector3.Project(this._leftBoob.Bones[2].position - Camera.main.transform.position, Camera.main.transform.forward).magnitude)); if ((leftBoobRaycastPos - this._leftBoob.Bones[2].position).sqrMagnitude < (_dragRadius * _dragRadius)) { this.isDraggingDynamicBone = true; distanceFromCamera = (leftBoobRaycastPos - Camera.main.transform.position).sqrMagnitude; this._dynamicBoneDragType = DynamicBoneDragType.LeftBoob; this._dragDynamicBoneStartPosition = leftBoobRaycastPos; this._lastDynamicBoneGravity = this.GetGravity(this._leftBoob); } Vector3 rightBoobRaycastPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Vector3.Project(this._rightBoob.Bones[2].position - Camera.main.transform.position, Camera.main.transform.forward).magnitude)); if ((rightBoobRaycastPos - this._rightBoob.Bones[2].position).sqrMagnitude < (_dragRadius * _dragRadius) && (rightBoobRaycastPos - Camera.main.transform.position).sqrMagnitude < distanceFromCamera) { this.isDraggingDynamicBone = true; distanceFromCamera = (leftBoobRaycastPos - Camera.main.transform.position).sqrMagnitude; this._dynamicBoneDragType = DynamicBoneDragType.RightBoob; this._dragDynamicBoneStartPosition = rightBoobRaycastPos; this._lastDynamicBoneGravity = this.GetGravity(this._rightBoob); } } else if (Input.GetMouseButton(0) && this.isDraggingDynamicBone) { this._dragDynamicBoneEndPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Vector3.Project(this._dragDynamicBoneStartPosition - Camera.main.transform.position, Camera.main.transform.forward).magnitude)); DynamicBone_Ver02 db = null; switch (this._dynamicBoneDragType) { case DynamicBoneDragType.LeftBoob: db = this._leftBoob; break; case DynamicBoneDragType.RightBoob: db = this._rightBoob; break; } this.SetGravity(db, this._lastDynamicBoneGravity + (this._dragDynamicBoneEndPosition - this._dragDynamicBoneStartPosition) * (this._inc * 1000f) / 12f); } else if (Input.GetMouseButtonUp(0)) { this.isDraggingDynamicBone = false; } }
public string GetID(DynamicBone_Ver02 db) { if (db == this._leftBoob) { return("BreastL"); } if (db == this._rightBoob) { return("BreastR"); } return(null); }
private void ShouldExecuteDynamicBoneLateUpdate(DynamicBone_Ver02 bone, ref bool b) { if (this._parent.enabled && this._alternativeUpdateMode && ( bone == this._leftBoob || bone == this._rightBoob ) ) { b = this._target.ociChar.oiCharInfo.enableIK == false && this._target.ociChar.oiCharInfo.enableFK == false; } }
private bool DynamicBoneSetup(DynamicBone_Ver02 bone) { List <DynamicBone_Ver02.Particle> particleList = (List <DynamicBone_Ver02.Particle>)mParticles2Field.GetValue(bone); foreach (DynamicBone_Ver02.Particle particle in particleList) { if (particle.Transform != null) { return(true); } } return(false); }