public void OnDisable() { if (IsKiss || kissing) { Kiss(false, immediateStop: true); if (bvs.Count() == 0) { ReloadBlendValues(); } voiceCtrl.isPrcoStop = false; if (origFinishFlag != HFlag.FinishKind.none) { flags.finish = origFinishFlag; origFinishFlag = HFlag.FinishKind.none; } female.ChangeEyesBlinkFlag(true); } }
private void Update() { if (voiceCtrl == null) { voiceCtrl = FindObjectOfType <HVoiceCtrl>(); if (voiceCtrl == null) { return; } } if (bvs.Count() == 0) { ReloadBlendValues(); } float curDistance = Vector3.Distance(myMouth.transform.position, tang.transform.position); float threshold; if (flags.mode == HFlag.EMode.aibu) { threshold = CyuLoaderVR.KissDistanceAibu.Value; if (((VRHandCtrl[])hands).Any((VRHandCtrl h) => h.IsAction())) { isAibuTouching = true; } else { isAibuTouching = false; } } else { threshold = CyuLoaderVR.KissDistance.Value; } if (flags.click == HFlag.ClickKind.inside || flags.click == HFlag.ClickKind.outside) { isInOrgasm = true; } //If currently in o****m, stop kissing immediately without disengaging transition to prevent interferring with o****m animation or voice if (isInOrgasm) { Kiss(false, immediateStop: true); } else if (curDistance < threshold) { if (flags.mode != HFlag.EMode.aibu || (!kissing && !IsSiruActive())) { Kiss(true); } //Continue kissing if currently transitioning into kiss, or if within distance threshold //The distance threshold is larger when groping to allow some eye candy else if (curDistance < (isAibuTouching ? (ExitKissDistance + 0.04f) : ExitKissDistance) || kissPhase == Phase.Engaging) { Kiss(true); } else { Kiss(false); } } else { Kiss(false); } //Stop girl from speaking lines and manually proc breath/moan sounds //when she is not in o****m and is still kissing or saliva string still visible if (!isInOrgasm && (kissing || IsSiruActive())) { voiceCtrl.isPrcoStop = true; //Manually proc breath sound every frame causes eyes flickering when initiating kissing during transition of releasing a body part in caress mode //This makes sure breath proc is not run when approaching to kiss in caress mode if (flags.mode == HFlag.EMode.aibu ? kissPhase > Phase.Engaging : true) { breathProcDelegate.Invoke(voiceCtrl, female.animBody.GetCurrentAnimatorStateInfo(0), female, 0); } } else { voiceCtrl.isPrcoStop = false; } if (kissing) { if (flags.mode == HFlag.EMode.aibu) { //Use configured value (KissMotionSpeed) to control animation speed during kissing in caress mode //Increase animation speed further if GropeOverride is set to true and groping motion is larger than KissMotionSpeed if (CyuLoaderVR.GropeOverride.Value && kissPhase == Phase.InAction && isAibuTouching) { //Use the higher value between dragSpeed(value based on controller movement) and speedItem(game calculated value) to set kissing animation speed //Then make sure the speed value used for calculating animation speed is reset to a minimum //so that it doesn't get stuck at a high value, causing kissing animation speed to also be stuck at a high value. flags.SpeedUpClickAibu(flags.rateDragSpeedUp, Mathf.Clamp(Mathf.Max(dragSpeed, flags.speedItem), CyuLoaderVR.KissMotionSpeed.Value, 1.5f), true); dragSpeed = 0.0001f; } else { flags.SpeedUpClickAibu(flags.rateDragSpeedUp, CyuLoaderVR.KissMotionSpeed.Value, true); } } //While kissing, assigns HFlag.finish to none to prevent o****m, while storing the finish flag in origFinishFlag to be assigned back to the game after kissing if (flags.finish != HFlag.FinishKind.none) { origFinishFlag = flags.finish; flags.finish = HFlag.FinishKind.none; } flags.DragStart(); } else { //Outside of kissing, restore finish flag from origFinishFlag to resume o****m if (origFinishFlag != HFlag.FinishKind.none) { flags.finish = origFinishFlag; origFinishFlag = HFlag.FinishKind.none; } female.ChangeEyesBlinkFlag(true); } }