void Update() { maxDiff = maxPull / thresholdFactor; actualTriggerPoint = triggerPoint / thresholdFactor; if (!grabbable.isGrabbed && previouslyGrabbed) { StartCoroutine(RetractChain()); } var diff = Mathf.Clamp((controllerStartPos - transform.position).y, 0.0f, maxDiff); var newPos = chain.transform.position; newPos.y = chainStartPos.y - diff; chain.transform.position = newPos; if (!chainNeedsReset && diff >= actualTriggerPoint) { audioSource.playSound(); onChainTriggered.Invoke(); chainNeedsReset = true; } else if (diff < actualTriggerPoint) { chainNeedsReset = false; } previouslyGrabbed = grabbable.isGrabbed; }
void Update() { if (gameManager.milkingAllowed) { maxDiff = maxThreshold / thresholdFactor; minDiff = minThreshold / thresholdFactor; if (!grabbable.isGrabbed && previouslyGrabbed) { StartCoroutine(RetractNip()); } var diff = Mathf.Clamp((controllerStartPos - transform.position).y, minDiff, maxDiff); var newPos = tittyBone.transform.position; newPos.y = tittyStartPos.y - diff; tittyBone.transform.position = newPos; trySquirting = diff == maxDiff; var emission = tittyMilk.emission; emission.rateOverTime = 0.0f; if (!squirtRefractoryPeriod && trySquirting && milkTimer <= maxMilkTime) { nipAudio.playSound(); milkTimer += Time.deltaTime; var scoreDivisor = otherNips.Any(nc => nc.IsMilking()) ? 2 : 1; emission.rateOverTime = 10.0f / scoreDivisor; gameManager.IncreaseScore((int)(Time.deltaTime * 1000) / scoreDivisor); } else if (!grabbable.isGrabbed) { milkTimer = 0.0f; } previouslyGrabbed = grabbable.isGrabbed; } else if (!grabbable.isGrabbed) { transform.position = controllerStartPos; transform.rotation = controllerStartRot; tittyBone.transform.position = tittyStartPos; var emission = tittyMilk.emission; emission.rateOverTime = 0.0f; milkTimer = 0.0f; squirtRefractoryPeriod = false; previouslyGrabbed = false; } }
IEnumerator AnimateDoor(AnimState animState) { isAnimating = true; isDoorOpen = animState == AnimState.Open; var timer = 0.0f; var mainTriggerText = isDoorOpen ? "Open" : "Close"; var reverseTriggerText = isDoorOpen ? "Close" : "Open"; leftBarrel.SetTrigger(mainTriggerText); middleBarrel.SetTrigger(mainTriggerText); rightBarrel.SetTrigger(reverseTriggerText); leftDoor.SetTrigger(mainTriggerText); rightDoor.SetTrigger(mainTriggerText); rightChain.SetBool("Shake", true); leftChain.SetBool("Shake", true); audioSource.playSound(); while (timer <= animationLength) { timer += Time.deltaTime; if (timer >= animationLength - chainShakeAdvanceEndTime) { rightChain.SetBool("Shake", false); leftChain.SetBool("Shake", false); } yield return(null); } isAnimating = false; }