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;
    }
Esempio n. 2
0
    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;
        }
    }
Esempio n. 3
0
    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;
    }