Пример #1
0
        public override float GetScreenPointProportionAlong(Vector2 point, Vector3 grabRelativePosition, Moveable_Drag drag)
        {
            bool flipSide = (drag && Vector3.Dot(drag.GetGrabPosition() - drag.Transform.position, drag.Transform.right) < 0f);

            float   worldDepth = Vector3.Dot(grabRelativePosition, Transform.forward);
            Vector3 grabOffset = Transform.forward * worldDepth;

            Vector2 screen_gizmoStartPosition = KickStarter.CameraMain.WorldToScreenPoint(GetGizmoPosition(0f) + grabOffset);
            Vector2 screen_gizmoEndPosition   = KickStarter.CameraMain.WorldToScreenPoint(GetGizmoPosition(1f) + grabOffset);
            Vector2 screen_origin             = KickStarter.CameraMain.WorldToScreenPoint(Transform.position + grabOffset);

            Vector2 startToOrigin = screen_gizmoStartPosition - screen_origin;
            Vector2 endToOrigin   = screen_gizmoEndPosition - screen_origin;

            Vector2 pointToOrigin = point - screen_origin;

            float startToPointAngle = AdvGame.SignedAngle(startToOrigin, pointToOrigin);
            float startToEndAngle   = AdvGame.SignedAngle(startToOrigin, endToOrigin);

            bool isFlipped = (Vector3.Dot(Transform.forward, KickStarter.CameraMainTransform.forward) < 0f);

            if (isFlipped)
            {
                startToEndAngle   *= -1f;
                startToPointAngle *= -1f;
            }

            if (flipSide)
            {
                startToPointAngle += 180f;
            }

            if (startToEndAngle < 0f)
            {
                startToEndAngle += 360f;
            }
            if (startToPointAngle < 0f)
            {
                startToPointAngle += 360f;
            }

            if (Loops)
            {
                startToEndAngle = 360f;
            }

            float reversedMidAngle = 180f + (startToEndAngle / 2f);

            if (startToPointAngle > reversedMidAngle)
            {
                startToPointAngle -= 360f;
            }

            return(startToPointAngle / startToEndAngle);
        }
Пример #2
0
        public override float GetScreenPointProportionAlong(Vector2 point)
        {
            Vector2 screen_gizmoStartPosition = KickStarter.CameraMain.WorldToScreenPoint(GetGizmoPosition(0f));
            Vector2 screen_gizmoEndPosition   = KickStarter.CameraMain.WorldToScreenPoint(GetGizmoPosition(1f));
            Vector2 screen_origin             = KickStarter.CameraMain.WorldToScreenPoint(transform.position);

            Vector2 startToOrigin = screen_gizmoStartPosition - screen_origin;
            Vector2 endToOrigin   = screen_gizmoEndPosition - screen_origin;

            Vector2 pointToOrigin = point - screen_origin;

            float startToPointAngle = AdvGame.SignedAngle(startToOrigin, pointToOrigin);
            float startToEndAngle   = AdvGame.SignedAngle(startToOrigin, endToOrigin);

            bool isFlipped = (Vector3.Dot(transform.forward, KickStarter.CameraMain.transform.forward) < 0f);

            if (isFlipped)
            {
                startToEndAngle   *= -1f;
                startToPointAngle *= -1f;
            }

            if (startToEndAngle < 0f)
            {
                startToEndAngle += 360f;
            }
            if (startToPointAngle < 0f)
            {
                startToPointAngle += 360f;
            }

            if (Loops)
            {
                startToEndAngle = 360f;
            }

            float reversedMidAngle = 180f + (startToEndAngle / 2f);

            if (startToPointAngle > reversedMidAngle)
            {
                startToPointAngle -= 360f;
            }

            return(startToPointAngle / startToEndAngle);
        }
Пример #3
0
        /**
         * Updates the current QTE. This is called every frame by StateHandler.
         */
        public void UpdateQTE()
        {
            if (endTime <= 0f)
            {
                return;
            }

            if (Time.time > endTime)
            {
                Lose();
                return;
            }

            switch (qteType)
            {
            case QTEType.SingleKeypress:
            {
                if (inputName == touchScreenTap)
                {
                    if (Input.touchCount > 0f)
                    {
                        Win();
                        return;
                    }
                }
                else
                {
                    if (KickStarter.playerInput.InputGetButtonDown(inputName))
                    {
                        Win();
                        return;
                    }
                    else if (wrongKeyFails && KickStarter.playerInput.InputAnyKey() && KickStarter.playerInput.GetMouseState() == MouseState.Normal)
                    {
                        Lose();
                        return;
                    }
                }
            }
            break;

            case QTEType.SingleAxis:
            {
                float axisValue = KickStarter.playerInput.InputGetAxis(inputName);

                if (axisThreshold > 0f && axisValue > axisThreshold)
                {
                    Win();
                    return;
                }
                else if (axisThreshold < 0f && axisValue < axisThreshold)
                {
                    Win();
                    return;
                }
                else if (wrongKeyFails)
                {
                    if (axisThreshold > 0f && axisValue < -axisThreshold)
                    {
                        Lose();
                        return;
                    }
                    else if (axisThreshold < 0f && axisValue > -axisThreshold)
                    {
                        Lose();
                        return;
                    }
                }
            }
            break;

            case QTEType.HoldKey:
            {
                if (inputName == touchScreenTap)
                {
                    if (Input.touchCount > 0f)
                    {
                        if (lastPressTime <= 0f)
                        {
                            lastPressTime = Time.time;
                        }
                        else if (Time.time > lastPressTime + holdDuration)
                        {
                            Win();
                            return;
                        }
                    }
                    else
                    {
                        lastPressTime = 0f;
                    }
                }
                else
                {
                    if (KickStarter.playerInput.InputGetButton(inputName))
                    {
                        if (lastPressTime <= 0f)
                        {
                            lastPressTime = Time.time;
                        }
                        else if (Time.time > lastPressTime + holdDuration)
                        {
                            Win();
                            return;
                        }
                    }
                    else if (wrongKeyFails && Input.anyKey)
                    {
                        Lose();
                        return;
                    }
                    else
                    {
                        lastPressTime = 0f;
                    }
                }

                if (animator != null)
                {
                    if (lastPressTime <= 0f)
                    {
                        animator.SetBool("Held", false);
                    }
                    else
                    {
                        animator.SetBool("Held", true);
                    }
                }
            }
            break;

            case QTEType.ButtonMash:
            {
                if (inputName == touchScreenTap)
                {
                    if (Input.touchCount > 1)
                    {
                        if (canMash)
                        {
                            numPresses++;
                            lastPressTime = Time.time;
                            if (animator)
                            {
                                animator.Play("Hit", 0, 0f);
                            }
                            canMash = false;
                        }
                    }
                    else
                    {
                        canMash = true;

                        if (doCooldown)
                        {
                            if (lastPressTime > 0f && Time.time > lastPressTime + cooldownTime)
                            {
                                numPresses--;
                                lastPressTime = Time.time;
                            }
                        }
                    }
                }
                else
                {
                    if (KickStarter.playerInput.InputGetButtonDown(inputName))
                    {
                        if (canMash)
                        {
                            numPresses++;
                            lastPressTime = Time.time;
                            if (animator)
                            {
                                animator.Play("Hit", 0, 0f);
                            }
                            canMash = false;
                        }
                    }
                    else
                    {
                        canMash = true;

                        if (doCooldown)
                        {
                            if (lastPressTime > 0f && Time.time > lastPressTime + cooldownTime)
                            {
                                numPresses--;
                                lastPressTime = Time.time;
                            }
                        }
                    }

                    if (KickStarter.playerInput.InputGetButtonDown(inputName))
                    {
                    }
                    else if (wrongKeyFails && Input.anyKeyDown)
                    {
                        Lose();
                        return;
                    }
                }

                if (numPresses < 0)
                {
                    numPresses = 0;
                }

                if (numPresses >= targetPresses)
                {
                    Win();
                    return;
                }
            }
            break;

            case QTEType.ThumbstickRotation:
            {
                Vector2 currentInput = new Vector2(KickStarter.playerInput.InputGetAxis(inputName), KickStarter.playerInput.InputGetAxis(verticalInputName));
                if (currentInput.sqrMagnitude > axisThreshold)
                {
                    if (lastFrameRotationInput != Vector2.zero)
                    {
                        float frameAngleDiff = AdvGame.SignedAngle(currentInput, lastFrameRotationInput);
                        if (frameAngleDiff > 180f)
                        {
                            frameAngleDiff -= 360f;
                        }
                        else if (frameAngleDiff < -180f)
                        {
                            frameAngleDiff += 360f;
                        }

                        currentRotations += frameAngleDiff / 360f;

                        if (rotationIsClockwise)
                        {
                            maxRotation = Mathf.Max(maxRotation, currentRotations);

                            if (currentRotations > targetRotations)
                            {
                                Win();
                                return;
                            }
                        }
                        else
                        {
                            maxRotation = Mathf.Min(maxRotation, currentRotations);

                            if (currentRotations < targetRotations)
                            {
                                Win();
                                return;
                            }
                        }

                        if (wrongKeyFails)
                        {
                            if (rotationIsClockwise)
                            {
                                if (maxRotation - currentRotations > 0.15f)
                                {
                                    Lose();
                                    return;
                                }
                            }
                            else
                            {
                                if (maxRotation - currentRotations < -0.15f)
                                {
                                    Lose();
                                    return;
                                }
                            }
                        }
                    }
                    lastFrameRotationInput = currentInput;
                }
                else
                {
                    currentRotations       = 0f;
                    lastFrameRotationInput = Vector2.zero;
                }
            }
            break;
            }
        }