Ejemplo n.º 1
0
        public VecTypes CalcVecType(Vector3 vec)
        {
            VecTypes    vecType = VecTypes.UP;
            const float limit   = 5;

            if (Vector3.Angle(vec, Vector3.up) < limit)
            {
                vecType = VecTypes.UP;
            }
            if (Vector3.Angle(vec, Vector3.down) < limit)
            {
                vecType = VecTypes.DOWN;
            }
            if (Vector3.Angle(vec, Vector3.forward) < limit)
            {
                vecType = VecTypes.FORWARD;
            }
            if (Vector3.Angle(vec, Vector3.back) < limit)
            {
                vecType = VecTypes.BACK;
            }
            if (Vector3.Angle(vec, Vector3.right) < limit)
            {
                vecType = VecTypes.RIGHT;
            }
            if (Vector3.Angle(vec, Vector3.left) < limit)
            {
                vecType = VecTypes.LEFT;
            }
            return(vecType);
        }
Ejemplo n.º 2
0
        public Vector3 CalcVector(VecTypes type)
        {
            Vector3 vec = Vector3.up;

            if (type == VecTypes.UP)
            {
                vec = Vector3.up;
            }
            if (type == VecTypes.DOWN)
            {
                vec = Vector3.down;
            }
            if (type == VecTypes.FORWARD)
            {
                vec = Vector3.forward;
            }
            if (type == VecTypes.BACK)
            {
                vec = Vector3.back;
            }
            if (type == VecTypes.RIGHT)
            {
                vec = Vector3.right;
            }
            if (type == VecTypes.LEFT)
            {
                vec = Vector3.left;
            }
            return(vec);
        }
Ejemplo n.º 3
0
        public void Change(Vector3 up, float distance)
        {
            if (PlayerCharacter.Instance.Movement.CoordChanging)
            {
                return;
            }

            VecTypes vecType = CalcVecType(up);

            if (vecType == UpVecType)
            {
                return;
            }

            print("<color=yellow>Gravity Changed...</color>");

            UpVecType = vecType;

            Vector3 newUp = CalcVector(UpVecType);

            Vector3 forward = PlayerCharacter.Instance.Movement.TurnDirection;

            float diffAngle = -Vector3.SignedAngle(forward, -newUp, UpVec);

            // print("diff: " + diffAngle);

            Opposite = Vector3.Angle(UpVec, newUp) > 175;
            Distance = distance;

            if (Opposite)
            {
                ForwardVec = -forward;
                diffAngle  = 0;
            }
            else
            {
                ForwardVec = UpVec;
            }

            UpVec    = newUp;
            RightVec = Vector3.Cross(ForwardVec, UpVec);

            CoordinateChangedEvent?.Invoke();

            Vector3 vec = Quaternion.AngleAxis(diffAngle, UpVec) * ForwardVec;

            PlayerCharacter.Instance.Movement.ChangeCoord(vec);
            PlayerCharacter.Instance.Movement.SetTurnDirection(vec);

            Physics.gravity = DownVec * _gravityAmount;
        }