public static void LookAtDanSetup(Transform lookAtTransform, string currentMotion, bool topStick, int maleNum, int femaleNum, bool twoDans, bool isInScene) { if (maleNum >= danAgents.Count || femaleNum >= collisionAgents.Count) { return; } if (!twoDans && danAgents.Count > 1 && danAgents[1] != null) { danAgents[1].RemoveDanColliders(collisionAgents[femaleNum]); #if HS2 || AI danAgents[1].RemoveMidsectionColliders(collisionAgents[femaleNum].m_collisionCharacter); danAgents[1].RemoveDanCollidersFromDB2(collisionAgents[femaleNum].m_collisionCharacter); #endif } if (maleNum == 1 && !twoDans) { return; } CollisionAgent firstAgent = collisionAgents[femaleNum]; CollisionAgent secondAgent = null; var secondFemaleNum = femaleNum == 0 ? 1 : 0; if (collisionAgents.Count > secondFemaleNum && collisionAgents[secondFemaleNum].m_collisionCharacter.visibleAll && collisionAgents[secondFemaleNum].m_collisionCharacter.objTop != null) { secondAgent = collisionAgents[secondFemaleNum]; } danAgents[maleNum].SetupNewDanTarget(lookAtTransform, currentMotion, topStick, isInScene, firstAgent, secondAgent, twoDans); danHasNewTarget[maleNum] = false; }
internal static void ClearFingerColliders(DanAgent danAgent, CollisionAgent firstAgent, CollisionAgent secondAgent = null) { if (firstAgent == null) { return; } firstAgent.RemoveFingerColliders(firstAgent); if (danAgent != null) { danAgent.RemoveFingerColliders(firstAgent); } if (secondAgent == null) { return; } firstAgent.RemoveFingerColliders(secondAgent); secondAgent.RemoveFingerColliders(firstAgent); if (danAgent != null) { danAgent.RemoveFingerColliders(secondAgent); } }
public void SetCollisionAgent(ChaControl target, bool kokanTarget, bool anaTarget, bool oralTarget) { if (danAgent == null || controllerOptions == null || !danTargetsValid) { return; } if (collisionAgent != null && collisionAgent.m_collisionCharacter != null) { danAgent.RemoveDanCollidersFromTarget(collisionAgent.m_collisionCharacter, isKokan, isAna); danAgent.RemoveTamaColliders(); } collisionAgent = new CollisionAgent(target, collisionOptions); isKokan = kokanTarget; isAna = anaTarget; isOral = oralTarget; if (isKokan) { danAgent.AddDanCollidersToTargetKokan(collisionAgent.m_collisionCharacter, collisionOptions.enableBellyBulge); } if (isAna) { danAgent.AddDanCollidersToTargetAna(collisionAgent.m_collisionCharacter); } danAgent.AddTamaColliders(collisionAgent.m_collisionCharacter, false); }
internal void SetDanTarget(CollisionAgent targetAgent) { if (!m_danPointsFound || !targetAgent.m_collisionPointsFound) { return; } if (m_referenceTarget == null) { m_danPoints.AimDanTop(); return; } Vector3 danStartPosition = m_danPoints.GetDanStartPosition(); Vector3 danTarget = m_referenceTarget.position; if (m_referenceTarget.name == LookTargets.KokanTarget) { danTarget += (m_referenceTarget.forward * targetAgent.m_collisionOptions.kokanForwardOffset) + (m_referenceTarget.up * targetAgent.m_collisionOptions.kokanUpOffset); } else if (m_referenceTarget.name == LookTargets.HeadTarget) { danTarget += (m_referenceTarget.forward * targetAgent.m_collisionOptions.headForwardOffset) + (m_referenceTarget.up * targetAgent.m_collisionOptions.headUpOffset); } if (targetAgent.m_collisionOptions.kokan_adjust && targetAgent.adjustFAnimation && (m_referenceTarget.name == LookTargets.KokanTarget || m_referenceTarget.name == LookTargets.BPKokanTarget)) { danTarget += m_referenceTarget.forward * targetAgent.m_collisionOptions.kokan_adjust_position_z; } Vector3 danTargetVector = Vector3.Normalize(danTarget - danStartPosition); Vector3 danEndTarget = danStartPosition + danTargetVector * m_baseDanLength; float danDistanceToTarget = Vector3.Distance(danStartPosition, danTarget); float adjustedDanLength = GetSquishedDanLength(danDistanceToTarget); float girthScaleFactor = GetSquishedDanGirth(danDistanceToTarget); if (m_referenceTarget.name != LookTargets.HeadTarget || m_danOptions.squishOralGirth) { m_danPoints.SquishDanGirth(girthScaleFactor); } if (m_referenceTarget.name == LookTargets.KokanTarget || m_referenceTarget.name == LookTargets.AnaTarget || m_referenceTarget.name == LookTargets.BPKokanTarget) { adjustedDanLength = GetMaxDanLength(adjustedDanLength, danTarget, targetAgent.m_innerTarget.position, danDistanceToTarget); } else if (m_referenceTarget.name == LookTargets.HeadTarget) { adjustedDanLength = GetMaxDanLength(adjustedDanLength, danTarget, targetAgent.m_innerHeadTarget.position, danDistanceToTarget); } danEndTarget = ConstrainDan(danStartPosition, danTargetVector, danEndTarget, adjustedDanLength, danDistanceToTarget, targetAgent); ScaleDanColliders(adjustedDanLength); List <Vector3> adjustedDanPoints = AdjustDanPointsToTargets(danTarget, danEndTarget, adjustedDanLength, danDistanceToTarget); m_danPoints.AimDanPoints(adjustedDanPoints); }
private Vector3 ConstrainDanToBody(CollisionAgent target, Vector3 dan101_pos, Vector3 danVector, float squishedDanLength) { Vector3 adjustedDan109 = dan101_pos + danVector * squishedDanLength; bool constrainPointFound = false; adjustedDan109 = ConstrainDanToCollisionPoints(dan101_pos, adjustedDan109, squishedDanLength, ref constrainPointFound, target.m_collisionPoints.frontCollisionPoints, target.m_collisionOptions.clippingDepth, true); adjustedDan109 = ConstrainDanToCollisionPoints(dan101_pos, adjustedDan109, squishedDanLength, ref constrainPointFound, target.m_collisionPoints.backCollisionPoints, target.m_collisionOptions.clippingDepth, false); return(adjustedDan109); }
internal void ClearDanTarget(CollisionAgent firstTarget, CollisionAgent secondTarget = null) { ClearTarget(); ResetDanAdjustment(); RemoveTamaColliders(); RemoveColliders(firstTarget); if (secondTarget != null) { RemoveColliders(secondTarget); } }
public void RemoveCollisionAgent(bool wasKokan, bool wasAna) { if (danAgent == null || controllerOptions == null || !danTargetsValid || collisionAgent == null || collisionAgent.m_collisionCharacter == null) { return; } danAgent.RemoveDanCollidersFromTarget(collisionAgent.m_collisionCharacter, wasKokan, wasAna); danAgent.RemoveTamaColliders(); collisionAgent = null; }
private void AddDanColliders(CollisionAgent target) { foreach (var danCollider in m_danColliders) { foreach (DynamicBone dynamicBone in target.m_kokanDynamicBones) { if (danCollider != null && !dynamicBone.m_Colliders.Contains(danCollider)) { dynamicBone.m_Colliders.Add(danCollider); } } } }
private void RemoveDanColliders(CollisionAgent target) { foreach (var danCollider in m_danColliders) { foreach (DynamicBone dynamicBone in target.m_kokanDynamicBones) { if (danCollider != null) { dynamicBone.m_Colliders.Remove(danCollider); } } } }
internal void AddFingerColliders(CollisionAgent target) { if (m_fingerColliders == null || m_fingerColliders.Count == 0) { return; } foreach (DynamicBone dynamicBone in target.m_kokanDynamicBones) { foreach (var collider in m_fingerColliders) { if (collider != null && !dynamicBone.m_Colliders.Contains(collider)) { dynamicBone.m_Colliders.Add(collider); } } } }
internal void RemoveFingerColliders(CollisionAgent target) { if (m_fingerColliders == null || m_fingerColliders.Count == 0) { return; } foreach (DynamicBone dynamicBone in target.m_kokanDynamicBones) { foreach (var collider in m_fingerColliders) { if (collider != null) { dynamicBone.m_Colliders.Remove(collider); } } } }
internal static void ClearFingerColliders() { DanAgent danAgent = null; if (danAgents != null && danAgents.Count > 0) { danAgent = danAgents[0]; } CollisionAgent firstAgent = collisionAgents[0]; CollisionAgent secondAgent = null; if (collisionAgents.Count > 1) { secondAgent = collisionAgents[1]; } ClearFingerColliders(danAgent, firstAgent, secondAgent); }
private void RemoveFingerColliders(CollisionAgent target) { foreach (DynamicBone dynamicBone in target.m_kokanDynamicBones) { if (m_indexCollider != null) { dynamicBone.m_Colliders.Remove(m_indexCollider); } if (m_middleCollider != null) { dynamicBone.m_Colliders.Remove(m_middleCollider); } if (m_ringCollider != null) { dynamicBone.m_Colliders.Remove(m_ringCollider); } } }
private void AddFingerColliders(CollisionAgent target) { foreach (DynamicBone dynamicBone in target.m_kokanDynamicBones) { if (m_indexCollider != null && !dynamicBone.m_Colliders.Contains(m_indexCollider)) { dynamicBone.m_Colliders.Add(m_indexCollider); } if (m_middleCollider != null && !dynamicBone.m_Colliders.Contains(m_middleCollider)) { dynamicBone.m_Colliders.Add(m_middleCollider); } if (m_ringCollider != null && !dynamicBone.m_Colliders.Contains(m_ringCollider)) { dynamicBone.m_Colliders.Add(m_ringCollider); } } }
internal static void SetupFingerColliders(string animation) { DanAgent danAgent = null; if (danAgents != null && danAgents.Count > 0) { danAgent = danAgents[0]; } CollisionAgent firstAgent = collisionAgents[0]; CollisionAgent secondAgent = null; if (collisionAgents.Count > 1 && collisionAgents[1].m_collisionCharacter.visibleAll && collisionAgents[1].m_collisionCharacter.objTop != null) { secondAgent = collisionAgents[1]; } ClearFingerColliders(danAgent, firstAgent, secondAgent); AddFingerColliders(animation, danAgent, firstAgent, secondAgent); }
internal static void AddFingerColliders(string animation, DanAgent danAgent, CollisionAgent firstAgent, CollisionAgent secondAgent = null) { if (animation == null || firstAgent == null) { return; } if (danAgent != null && BoneNames.maleFingerAnimationNames.Contains(animation)) { danAgent.AddFingerColliders(firstAgent); if (secondAgent != null) { danAgent.AddFingerColliders(secondAgent); } return; } if (BoneNames.femaleSelfFingerAnimationNames.Contains(animation)) { firstAgent.AddFingerColliders(firstAgent); return; } if (secondAgent == null) { return; } if (BoneNames.lesbianFingerAnimationNames.Contains(animation)) { firstAgent.AddFingerColliders(secondAgent); secondAgent.AddFingerColliders(firstAgent); return; } }
internal void RemoveColliders(CollisionAgent target) { RemoveDanColliders(target); RemoveFingerColliders(target); }
internal void SetupNewDanTarget(Transform lookAtTransform, string currentMotion, bool topStick, CollisionAgent firstTarget, CollisionAgent secondTarget = null) { ClearTarget(); if (!m_danPointsFound) { return; } if (secondTarget != null) { if (lookAtTransform == null) { AddDanColliders(firstTarget); AddDanColliders(secondTarget); RemoveFingerColliders(firstTarget); RemoveFingerColliders(secondTarget); } else if (lookAtTransform.name == LookTargets.KokanTarget) { AddDanColliders(firstTarget); RemoveDanColliders(secondTarget); RemoveFingerColliders(firstTarget); if (m_danOptions.useFingerColliders) { AddFingerColliders(secondTarget); } else { RemoveFingerColliders(secondTarget); } } else { RemoveDanColliders(firstTarget); RemoveDanColliders(secondTarget); RemoveFingerColliders(firstTarget); RemoveFingerColliders(secondTarget); } } else { if (lookAtTransform == null || lookAtTransform.name == LookTargets.KokanTarget) { AddDanColliders(firstTarget); } else { RemoveDanColliders(firstTarget); } if (m_danOptions.useFingerColliders && lookAtTransform == null) { AddFingerColliders(firstTarget); } else { RemoveFingerColliders(firstTarget); } } ResetDanAdjustment(); if (lookAtTransform == null) { return; } m_referenceTarget = lookAtTransform; if (topStick && m_referenceTarget.name == LookTargets.KokanTarget && !currentMotion.Contains("Idle") && !currentMotion.Contains("Pull") && !currentMotion.Contains("OUT") && firstTarget.m_bpKokanTarget != null) { m_referenceTarget = firstTarget.m_bpKokanTarget; } m_danPenetration = topStick || currentMotion.Contains("IN"); }
private Vector3 ConstrainDan(Vector3 danStart, Vector3 danTargetVector, Vector3 danEndTarget, float danLength, float danDistanceToTarget, CollisionAgent targetAgent) { if (m_danPenetration) { if (m_referenceTarget.name == LookTargets.KokanTarget || m_referenceTarget.name == LookTargets.AnaTarget || m_referenceTarget.name == LookTargets.BPKokanTarget) { if (m_danOptions.simplifyPenetration && m_bpDanPointsFound) { danEndTarget = targetAgent.m_innerTarget.position; } else { danEndTarget = ConstrainDanToBody(targetAgent, danStart, danTargetVector, danLength); } } else if (m_referenceTarget.name == LookTargets.HeadTarget) { if (m_danOptions.simplifyOral && m_bpDanPointsFound) { danEndTarget = targetAgent.m_innerHeadTarget.position; } else { danEndTarget = ConstrainDanToHead(danStart, danTargetVector, danLength); } } } else if ((m_referenceTarget.name == LookTargets.KokanTarget) && (m_baseDanLength > danDistanceToTarget)) { danEndTarget = ConstrainDanToPull(danStart, danTargetVector, danLength); } return(danEndTarget); }
internal void SetupNewDanTarget(Transform lookAtTransform, string currentMotion, bool topStick, CollisionAgent firstTarget, CollisionAgent secondTarget = null) { ClearDanTarget(firstTarget, secondTarget); if (!m_danPointsFound) { return; } if (secondTarget != null) { if (lookAtTransform == null) { AddDanColliders(firstTarget); AddDanColliders(secondTarget); } else if (lookAtTransform.name == LookTargets.KokanTarget) { AddDanColliders(firstTarget); if (m_danOptions.useFingerColliders) { AddFingerColliders(secondTarget); } } } else { if (lookAtTransform == null || lookAtTransform.name == LookTargets.KokanTarget) { AddDanColliders(firstTarget); } if (m_danOptions.useFingerColliders && lookAtTransform == null) { AddFingerColliders(firstTarget); } } AddTamaColliders(firstTarget.m_collisionCharacter, false); if (secondTarget != null) { AddTamaColliders(secondTarget.m_collisionCharacter, false); } if (currentMotion == string.Empty) { return; } m_referenceTarget = lookAtTransform; #if KK m_danPenetration = (topStick && m_referenceTarget != null) || currentMotion.Contains("IN"); #else m_danPenetration = topStick && m_referenceTarget != null; #endif if (m_danPenetration && firstTarget.m_bpKokanTarget != null && (m_referenceTarget == null || m_referenceTarget.name == LookTargets.KokanTarget) && !currentMotion.Contains("Idle") && !currentMotion.Contains("Pull") && !currentMotion.Contains("OUT")) { m_referenceTarget = firstTarget.m_bpKokanTarget; } }