コード例 #1
0
    /// <summary>
    /// Returns true if player is facing away from the bed.
    /// </summary>
    /// <param name="player"></param>
    /// <returns></returns>
    public bool CheckPlayerFacing(Transform player)
    {
        float leftAngle    = ArcFunctions.AngleHalf(Vector3.up, player.transform.forward, Vector3.forward);
        float forwardAngle = ArcFunctions.AngleHalf(Vector3.up, Camera.main.transform.forward, Vector3.left);

        if (leftAngle > facingTriggerDegree ||
            forwardAngle < -facingTriggerDegree)
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }
コード例 #2
0
    public static Vector3 BiarcPoint(Vector3 positionOne, Vector3 vectorOne, Vector3 positionTwo, Vector3 vectorTwo, float t)
    {
        float combinedAngle = 0;

        combinedAngle += (AngleHalf(Vector3.forward, vectorOne, Vector3.up) + -AngleHalf(Vector3.forward, vectorTwo, Vector3.up)) / 2;
        combinedAngle += AngleHalf(Vector3.forward, Vector3.Normalize(positionTwo - positionOne), Vector3.up);

        Vector3 combined = Vector3.Normalize(Quaternion.AngleAxis(combinedAngle, Vector3.up) * Vector3.forward);

        Vector3 arcMid = Vector3.zero;

        ArcData data;
        ArcData dataCircOne;
        ArcData dataCircTwo;

        arcMid = ArcFunctions.ArcNormalised(out data, positionOne, combined, positionTwo, t);
        float circ = 0;

        ArcFunctions.ArcNormalised(out dataCircOne, positionOne, vectorOne, arcMid, 0);
        ArcFunctions.ArcNormalised(out dataCircTwo, positionTwo, -vectorTwo, arcMid, 0);
        circ = (dataCircOne.angle * dataCircOne.circumference) + (dataCircTwo.angle * dataCircTwo.circumference);

        ArcData data2;
        ArcData dataCircOne1;
        ArcData dataCircTwo1;

        arcMid = ArcFunctions.ArcNormalised(out data2, positionOne, -combined, positionTwo, t);
        float circ2 = data2.angle;

        ArcFunctions.ArcNormalised(out dataCircOne1, positionOne, vectorOne, arcMid, 0);
        ArcFunctions.ArcNormalised(out dataCircTwo1, positionTwo, -vectorTwo, arcMid, 0);
        circ2 = (dataCircOne1.angle * dataCircOne1.circumference) + (dataCircTwo1.angle * dataCircTwo1.circumference);

        if (circ < circ2)
        {
            arcMid = ArcFunctions.ArcNormalised(out data, positionOne, combined, positionTwo, t);
        }
        else if (circ > circ2)
        {
            arcMid = ArcFunctions.ArcNormalised(out data, positionOne, -combined, positionTwo, t);
        }

        return(arcMid);
    }
コード例 #3
0
    public override void Update()
    {
        base.Update();

        #region Camera Math
        Vector3 dir = ((fireLight.transform.position + transform.position) / 2) - player.transform.position;

        float angleY     = ArcFunctions.AngleHalf(dir, player.transform.forward, Vector3.up);
        float abs_AngleY = Mathf.Abs(angleY);
        float map_AngleY = map(abs_AngleY, 0, slowViewTriggerAngle, 1, 0);

        float anglePlayerX     = ArcFunctions.AngleHalf(dir, cam.transform.forward, player.transform.right);
        float abs_AnglePlayerX = Mathf.Abs(anglePlayerX);
        float map_AnglePlayerX = map(abs_AnglePlayerX, 0, slowViewTriggerAngle, 1, 0);

        map_AngleXY = map_AngleY * map_AnglePlayerX;
        abs_Sum     = abs_AnglePlayerX + abs_AnglePlayerX + abs_AngleY;
        #endregion

        #region Annoying Camera
        //player
        if (r_sleepScript.sleepState == SleepState.standing && abs_AngleY < slowViewTriggerAngle)
        {
            float y_rotate_Amount = map_AngleXY * map_AngleY * rotateAmount * Time.deltaTime;
            if (angleY > 0)
            {
                r_mouseLook.TriggerFirePlayerRotate(y_rotate_Amount);
            }
            else
            {
                r_mouseLook.TriggerFirePlayerRotate(-y_rotate_Amount);
            }

            if (abs_AnglePlayerX < slowViewTriggerAngle)
            {
                float x_rotate_Amount = map_AngleXY * map_AnglePlayerX * rotateAmount * Time.deltaTime;
                if (anglePlayerX > 0)
                {
                    r_mouseLook.TriggerFireCameraRotate(x_rotate_Amount);
                }
                else
                {
                    r_mouseLook.TriggerFireCameraRotate(-x_rotate_Amount);
                }
            }
        }
        #endregion

        #region LookAtTrigger
        if (Interaction.reticule == LookingAt.Fire)
        {
            lookingAtFire    = true;
            lookAtFireTimer += Time.deltaTime;
        }
        else
        {
            lookingAtFire    = false;
            lookAtFireTimer -= Time.deltaTime / 2;
            if (lookAtFireTimer < 0)
            {
                lookAtFireTimer = 0;
            }
        }
        #endregion

        #region fireEffects
        float fireTimerPercentage = lookAtFireTimer / lookAtFireTimerMax;

        foreach (Rotate rot in flameArray)
        {
            rot.speed = flameRotateSpeedNormal + fireTimerPercentage * flameRotateSpeedModifier;
        }

        particles.SetEmissionRate(2 + fireTimerPercentage * 4);
        fireLight.intensity = lightIntensityNormal + fireTimerPercentage * lightIntensityModifier;
        float newScaleNumber = 0.5f + fireTimerPercentage;
        transform.localScale = Vector3.Lerp(transform.localScale, new Vector3(1, newScaleNumber, 1), 0.2f);
        #endregion

        if (lookAtFireTimer > lookAtFireTimerMax)
        {
            DreamTriggerEffect();
        }
    }
コード例 #4
0
    public static Vector3 ArcNormalised(out ArcData data, Vector3 startPosition, Vector3 startNormal, Vector3 endPosition, float t)
    {
        //Vector3 currentNormal;
        Vector3 toEndNormal;
        //Vector3 toStartNormal;
        Vector3 endNormal;
        Vector3 startInsideNormal;
        Vector3 endInsideNormal;
        //Vector3 startPoint;
        //Vector3 endPoint;
        //Vector3 anglePoint;
        Vector3 circleCentre = Vector3.zero;
        Vector3 intersect    = Vector3.zero;
        float   radius;
        float   angle       = 0;
        float   properAngle = 0;
        float   angleToStart;
        //float angleToEnd;
        float worldAngle;
        float worldAngleTwo;

        startPosition.y = 0;
        endPosition.y   = 0;
        startNormal.y   = 0;

        toEndNormal   = Vector3.Normalize(endPosition - startPosition);
        properAngle   = AngleHalf(startNormal, toEndNormal, Vector3.up);
        worldAngle    = Vector3.Angle(Vector3.forward, startNormal);
        worldAngleTwo = AngleHalf(Vector3.forward, startNormal, Vector3.up);

        if (properAngle > 0)
        {
            //anglePoint = startNormal * (Vector3.Distance(startPosition, endPosition) * 0.5f);


            //toStartNormal = Vector3.Normalize(startPosition - endPosition);
            angle = Vector3.Angle(startNormal, toEndNormal);

            endNormal = Quaternion.Euler(new Vector3(0, angle, 0)) * -toEndNormal;

            endInsideNormal   = Quaternion.Euler(new Vector3(0, -90, 0)) * endNormal;
            startInsideNormal = Quaternion.Euler(new Vector3(0, 90, 0)) * startNormal;
            angleToStart      = AngleFull(startInsideNormal, endInsideNormal, Vector3.up);
        }
        else
        {
            //anglePoint = startNormal * (Vector3.Distance(startPosition, endPosition) * 0.5f);


            //toStartNormal = Vector3.Normalize(startPosition - endPosition);
            angle = Vector3.Angle(startNormal, toEndNormal);

            endNormal = Quaternion.Euler(new Vector3(0, -angle, 0)) * -toEndNormal;

            endInsideNormal   = Quaternion.Euler(new Vector3(0, 90, 0)) * endNormal;
            startInsideNormal = Quaternion.Euler(new Vector3(0, -90, 0)) * startNormal;
            angleToStart      = AngleFull(endInsideNormal, startInsideNormal, Vector3.up);
        }
        if (LineLineIntersection(out intersect, startPosition, startInsideNormal * 100000, endPosition, endInsideNormal * 100000))
        {
            circleCentre = intersect;
        }
        else
        {
        }
        radius = Vector3.Distance(circleCentre, startPosition);

        Vector3 newPos = Vector3.zero;


        if (angleToStart < 1)
        {
        }
        else
        {
        }

        Vector3 tNormal;

        if (LineLineIntersection(out intersect, startPosition, startInsideNormal * 100000, endPosition, endInsideNormal * 100000))
        {
            if (properAngle > 0)
            {
                if (worldAngleTwo >= 0)
                {
                    newPos = Orbit(circleCentre, radius, -90 + t * (angleToStart) + worldAngle);
                }
                else
                {
                    newPos = Orbit(circleCentre, radius, -90 + t * (angleToStart) - worldAngle);
                }
            }
            else
            {
                if (worldAngleTwo >= 0)
                {
                    newPos = Orbit2(circleCentre, radius, -90 + t * (angleToStart) - worldAngle);
                }
                else
                {
                    newPos = Orbit2(circleCentre, radius, -90 + t * (angleToStart) + worldAngle);
                }
            }
            tNormal = Vector3.Normalize(circleCentre - newPos);
        }
        else
        {
            newPos    = Vector3.Lerp(startPosition, endPosition, t);
            tNormal   = Quaternion.Euler(0, 90, 0) * Vector3.Normalize(endPosition - startPosition);
            endNormal = Vector3.Normalize(startPosition - endPosition);
        }


        //float newAngle =AngleFull(startNormal, endNormal, Vector3.up);

        data = new ArcData(startPosition, startNormal, endPosition, -endNormal, radius, 2 * radius * Mathf.PI, angleToStart, circleCentre, ArcFunctions.ArcLength(startPosition, startNormal, endPosition), tNormal);

        return(newPos);
    }