private void Initialize(ChaControl character, CollisionOptions options) { m_collisionOptions = options; List <CollisionPoint> frontCollisionPoints = new List <CollisionPoint>(); List <CollisionPoint> backCollisionPoints = new List <CollisionPoint>(); m_collisionPointsFound = false; if (character == null) { return; } m_collisionCharacter = character; m_kokanBone = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Contains(BoneNames.KokanBone)); if (m_kokanBone == null) { return; } for (int index = 0; index < options.frontCollisionInfo.Count; index++) { Transform frontCollisionPoint = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Contains(options.frontCollisionInfo[index].name)); frontCollisionPoints.Add(new CollisionPoint(frontCollisionPoint, options.frontCollisionInfo[index])); } for (int index = 0; index < options.backCollisonInfo.Count; index++) { Transform backCollisionPoint = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Contains(options.backCollisonInfo[index].name)); backCollisionPoints.Add(new CollisionPoint(backCollisionPoint, options.backCollisonInfo[index])); } m_bpKokanTarget = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Equals(LookTargets.BPKokanTarget)); if (m_bpKokanTarget != null) { Console.WriteLine("BP Target Found " + m_bpKokanTarget.name); frontCollisionPoints[0].transform = m_bpKokanTarget; frontCollisionPoints[0].info.name = LookTargets.BPKokanTarget; } m_innerTarget = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Equals(LookTargets.InnerTarget)); m_innerHeadTarget = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Contains(LookTargets.InnerHeadTarget)); if (frontCollisionPoints.Count == options.frontCollisionInfo.Count && backCollisionPoints.Count == options.backCollisonInfo.Count) { m_collisionPointsFound = true; m_collisionPoints = new CollisionPoints(frontCollisionPoints, backCollisionPoints); } Console.WriteLine("constrainPointsFound " + m_collisionPointsFound); m_kokanDynamicBones = new List <DynamicBone>(); foreach (DynamicBone dynamicBone in m_collisionCharacter.GetComponentsInChildren <DynamicBone>()) { if (!dynamicBone.name.Contains(BoneNames.BPBone)) { continue; } dynamicBone.m_Colliders.Clear(); if (dynamicBone == null || dynamicBone.m_Root == null) { continue; } if (!BoneNames.uncensorBoneList.TryGetValue(dynamicBone.m_Root.name, out UncensorDynamicBone dynamicBoneValues)) { continue; } if (dynamicBoneValues.direction == UncensorDynamicBone.DynamicBoneDirection.Z) { dynamicBone.m_Radius *= m_kokanBone.lossyScale.z; } else if (dynamicBoneValues.direction == UncensorDynamicBone.DynamicBoneDirection.Z) { dynamicBone.m_Radius *= m_kokanBone.lossyScale.x; } else { dynamicBone.m_Radius *= (m_kokanBone.lossyScale.x + m_kokanBone.lossyScale.z) / 2; } #if HS2 || AIS dynamicBone.UpdateParameters(); #endif m_kokanDynamicBones.Add(dynamicBone); if (!m_collisionOptions.useBoundingColliders || dynamicBoneValues.selfColliderName == null) { continue; } DynamicBoneCollider selfCollider = m_collisionCharacter.GetComponentsInChildren <DynamicBoneCollider>().FirstOrDefault(x => x.name != null && x.name.Contains(dynamicBoneValues.selfColliderName)); if (selfCollider == null) { Transform colliderTransform = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Contains(dynamicBoneValues.selfColliderName)); if (colliderTransform == null) { continue; } selfCollider = colliderTransform.gameObject.AddComponent(typeof(DynamicBoneCollider)) as DynamicBoneCollider; selfCollider.m_Bound = DynamicBoneCollider.Bound.Inside; selfCollider.m_Direction = DynamicBoneCollider.Direction.Y; if (dynamicBoneValues.direction == UncensorDynamicBone.DynamicBoneDirection.Z) { selfCollider.m_Height = dynamicBoneValues.selfColliderHeight * m_kokanBone.lossyScale.z; selfCollider.m_Radius = dynamicBoneValues.selfColliderRadius * m_kokanBone.lossyScale.z; } else if (dynamicBoneValues.direction == UncensorDynamicBone.DynamicBoneDirection.X) { selfCollider.m_Height = dynamicBoneValues.selfColliderHeight * m_kokanBone.lossyScale.x; selfCollider.m_Radius = dynamicBoneValues.selfColliderRadius * m_kokanBone.lossyScale.x; } else { selfCollider.m_Height = dynamicBoneValues.selfColliderHeight * (m_kokanBone.lossyScale.x + m_kokanBone.lossyScale.z) / 2; selfCollider.m_Radius = dynamicBoneValues.selfColliderRadius * (m_kokanBone.lossyScale.x + m_kokanBone.lossyScale.z) / 2; } } dynamicBone.m_Colliders.Add(selfCollider); } }
private void Initialize(ChaControl character, CollisionOptions options) { m_collisionOptions = options; List <CollisionPoint> frontCollisionPoints = new List <CollisionPoint>(); List <CollisionPoint> backCollisionPoints = new List <CollisionPoint>(); m_collisionPointsFound = false; if (character == null) { return; } m_collisionCharacter = character; m_kokanBone = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Contains(BoneNames.KokanBone)); if (m_kokanBone == null) { return; } for (int index = 0; index < options.frontCollisionInfo.Count; index++) { Transform frontCollisionPoint = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Contains(options.frontCollisionInfo[index].name)); frontCollisionPoints.Add(new CollisionPoint(frontCollisionPoint, options.frontCollisionInfo[index])); } for (int index = 0; index < options.backCollisonInfo.Count; index++) { Transform backCollisionPoint = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Contains(options.backCollisonInfo[index].name)); backCollisionPoints.Add(new CollisionPoint(backCollisionPoint, options.backCollisonInfo[index])); } m_bpKokanTarget = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Equals(LookTargets.BPKokanTarget)); if (m_bpKokanTarget != null) { frontCollisionPoints[0].transform = m_bpKokanTarget; frontCollisionPoints[0].info.name = LookTargets.BPKokanTarget; } m_innerTarget = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Equals(LookTargets.InnerTarget)); m_innerHeadTarget = m_collisionCharacter.GetComponentsInChildren <Transform>().FirstOrDefault(x => x.name != null && x.name.Contains(LookTargets.InnerHeadTarget)); if (frontCollisionPoints.Count == options.frontCollisionInfo.Count && backCollisionPoints.Count == options.backCollisonInfo.Count && m_innerTarget != null && m_innerHeadTarget != null) { m_collisionPointsFound = true; m_collisionPoints = new CollisionPoints(frontCollisionPoints, backCollisionPoints); } Debug.Log($"constrainPointsFound {m_collisionPointsFound}"); m_kokanDynamicBones = new List <DynamicBone>(); foreach (DynamicBone dynamicBone in m_collisionCharacter.GetComponentsInChildren <DynamicBone>()) { if (dynamicBone == null || dynamicBone.m_Root == null || dynamicBone.name == null || !dynamicBone.name.Contains(BoneNames.BPBone)) { continue; } dynamicBone.m_Colliders.Clear(); m_kokanDynamicBones.Add(dynamicBone); } }
internal void Initialize(ChaControl character, CollisionOptions options) { m_collisionOptions = options; currentKokanPull = 0f; currentOralPull = 0f; currentAnaPull = 0f; currentKokanDanDirection = Vector3.up; currentOralDanDirection = Vector3.Normalize(Vector3.up + Vector3.back); currentAnaDanDirection = Vector3.up; List <CollisionPoint> frontCollisionPoints = new List <CollisionPoint>(); List <CollisionPoint> backCollisionPoints = new List <CollisionPoint>(); m_collisionPointsFound = false; if (character == null) { return; } m_collisionCharacter = character; m_kokanBone = Tools.GetTransformOfChaControl(m_collisionCharacter, BoneNames.KokanBone); if (m_kokanBone == null) { return; } m_bpKokanTarget = Tools.GetTransformOfChaControl(m_collisionCharacter, LookTargets.BPKokanTarget); m_bpAnaTarget = Tools.GetTransformOfChaControl(m_collisionCharacter, LookTargets.BPAnaTarget); m_innerTarget = Tools.GetTransformOfChaControl(m_collisionCharacter, LookTargets.InnerTarget); m_innerHeadTarget = Tools.GetTransformOfChaControl(m_collisionCharacter, LookTargets.InnerHeadTarget); m_siriBoneL = Tools.GetTransformOfChaControl(m_collisionCharacter, BoneNames.ButtBoneL); m_siriBoneR = Tools.GetTransformOfChaControl(m_collisionCharacter, BoneNames.ButtBoneR); m_innerKokan = Tools.GetTransformOfChaControl(m_collisionCharacter, "cf_J_Vagina_Inner"); #if !STUDIO for (int index = 0; index < options.frontCollisionInfo.Count; index++) { Transform frontCollisionPoint = Tools.GetTransformOfChaControl(m_collisionCharacter, options.frontCollisionInfo[index].name); frontCollisionPoints.Add(new CollisionPoint(frontCollisionPoint, options.frontCollisionInfo[index])); } for (int index = 0; index < options.backCollisonInfo.Count; index++) { Transform backCollisionPoint = Tools.GetTransformOfChaControl(m_collisionCharacter, options.backCollisonInfo[index].name); backCollisionPoints.Add(new CollisionPoint(backCollisionPoint, options.backCollisonInfo[index])); } if (frontCollisionPoints.Count == options.frontCollisionInfo.Count && backCollisionPoints.Count == options.backCollisonInfo.Count && m_innerTarget != null && m_innerHeadTarget != null) { m_collisionPointsFound = true; m_collisionPoints = new CollisionPoints(frontCollisionPoints, backCollisionPoints); } #else m_collisionPoints = null; #endif UnityEngine.Debug.Log($"constrainPointsFound {m_collisionPointsFound}"); m_kokanDynamicBones = new List <DynamicBone>(); foreach (DynamicBone dynamicBone in m_collisionCharacter.GetComponentsInChildren <DynamicBone>()) { if (dynamicBone == null || dynamicBone.m_Root == null || dynamicBone.name == null || m_collisionCharacter != dynamicBone.GetComponentInParent <ChaControl>()) { continue; } if (dynamicBone.name.Contains(BoneNames.BPBone)) { dynamicBone.m_Colliders.Clear(); m_kokanDynamicBones.Add(dynamicBone); } else if (dynamicBone.name.Contains(BoneNames.BellyBone)) { dynamicBone.m_Colliders.Clear(); m_bellyDynamicBone = dynamicBone; m_bellyColliderRadius = dynamicBone.m_Radius; UpdateBellyBones(options.bellyBulgeScale); } else if (dynamicBone.name.Contains(BoneNames.AnaTarget)) { dynamicBone.m_Colliders.Clear(); m_anaDynamicBones = dynamicBone; } } m_kokanPullBones = new List <Transform>(); foreach (var boneName in BoneNames.KokanPullBones) { var kokanTransform = Tools.GetTransformOfChaControl(m_collisionCharacter, boneName); if (kokanTransform == null) { continue; } m_kokanPullBones.Add(kokanTransform); } m_oralPullBone = Tools.GetTransformOfChaControl(m_collisionCharacter, BoneNames.MouthPullBone); foreach (var boneName in BoneNames.AnaPullBones) { var anaTransform = Tools.GetTransformOfChaControl(m_collisionCharacter, boneName); if (anaTransform == null) { continue; } m_anaPullBones.Add(anaTransform); } #if !STUDIO #if AI || HS2 InitializeFingerColliders(0.055f, 0.18f); #else InitializeFingerColliders(0.0055f, 0.018f); #endif #endif }