Esempio n. 1
0
        public static void LockFreeAxisRotation(ref Vector3 cuurentEuler, RotAxis activeRotAxis)
        {
            switch (activeRotAxis)
            {
            case RotAxis.X:
                cuurentEuler.y = 0;
                cuurentEuler.z = 0;
                break;

            case RotAxis.Y:

                cuurentEuler.x = 0;
                cuurentEuler.z = 0;
                break;

            case RotAxis.Z:

                cuurentEuler.x = 0;
                cuurentEuler.y = 0;
                break;

            case RotAxis.XY:
                cuurentEuler.z = 0;
                break;

            case RotAxis.XZ:
                cuurentEuler.y = 0;
                break;

            case RotAxis.YZ:
                cuurentEuler.x = 0;
                break;
            }
        }
Esempio n. 2
0
        public static Vector3 LimitRot(Vector3 targetEuler, RotAxis rotAxis, Vector2 rangeOne, Vector2 rangeTwo)
        {
            switch (rotAxis)
            {
            case RotAxis.X:
                targetEuler.x = Mathf.Max(targetEuler.x, rangeOne.x);
                targetEuler.x = Mathf.Min(targetEuler.x, rangeOne.y);
                break;

            case RotAxis.Y:
                targetEuler.y = Mathf.Max(targetEuler.y, rangeOne.x);
                targetEuler.y = Mathf.Min(targetEuler.y, rangeOne.y);
                break;

            case RotAxis.Z:
                targetEuler.z = Mathf.Max(targetEuler.z, rangeOne.x);
                targetEuler.z = Mathf.Min(targetEuler.z, rangeOne.y);
                break;

            case RotAxis.XY:
                targetEuler.x = Mathf.Max(targetEuler.x, rangeOne.x);
                targetEuler.x = Mathf.Min(targetEuler.x, rangeOne.y);

                targetEuler.y = Mathf.Max(targetEuler.y, rangeTwo.x);
                targetEuler.y = Mathf.Min(targetEuler.y, rangeTwo.y);
                break;

            case RotAxis.XZ:

                targetEuler.x = Mathf.Max(targetEuler.x, rangeOne.x);
                targetEuler.x = Mathf.Min(targetEuler.x, rangeOne.y);

                targetEuler.z = Mathf.Max(targetEuler.z, rangeTwo.x);
                targetEuler.z = Mathf.Min(targetEuler.z, rangeTwo.y);
                break;

            case RotAxis.YZ:

                targetEuler.y = Mathf.Max(targetEuler.y, rangeOne.x);
                targetEuler.y = Mathf.Min(targetEuler.y, rangeOne.y);

                targetEuler.z = Mathf.Max(targetEuler.z, rangeTwo.x);
                targetEuler.z = Mathf.Min(targetEuler.z, rangeTwo.y);
                break;
            }
            return(targetEuler);
        }
Esempio n. 3
0
            public bool Load(BinaryReader br, byte majorVersion, byte minorVersion, bool main)
            {
                Name       = br.ReadCString(40);
                ParentName = br.ReadCString(40);

                IsMain = main;

                int textureCount = br.ReadInt32();

                Textures = new int[textureCount];

                for (int i = 0; i < textureCount; i++)
                {
                    Textures[i] = br.ReadInt32();
                }

                OffsetMT = new float[12];
                for (int i = 0; i < 12; i++)
                {
                    OffsetMT[i] = br.ReadSingle();
                }

                Position.Read(br);
                RotAngle = br.ReadSingle();
                RotAxis.Read(br);
                Scale.Read(br);

                int vertexCount = br.ReadInt32();

                Vertices = new Vertex[vertexCount];

                for (int i = 0; i < vertexCount; i++)
                {
                    Vertices[i].Read(br);
                }

                int tvertexCount = br.ReadInt32();

                TVertices = new TVertex[tvertexCount];

                for (int i = 0; i < tvertexCount; i++)
                {
                    TVertices[i].Read(br, majorVersion, minorVersion);
                }

                int faceCount = br.ReadInt32();

                Faces = new Face[faceCount];

                for (int i = 0; i < faceCount; i++)
                {
                    Face f = new Face();

                    f.VertexID  = new ushort[3];
                    f.TVertexID = new ushort[3];

                    for (int n = 0; n < 3; n++)
                    {
                        f.VertexID[n] = br.ReadUInt16();
                    }

                    for (int n = 0; n < 3; n++)
                    {
                        f.TVertexID[n] = br.ReadUInt16();
                    }

                    f.TexID   = br.ReadUInt16();
                    f.Padding = br.ReadUInt16();
                    f.TwoSide = br.ReadInt32();

                    if (majorVersion >= 1 && minorVersion >= 2)
                    {
                        f.SmoothGroup = br.ReadInt32();
                    }
                    else
                    {
                        f.SmoothGroup = 0;
                    }

                    Faces[i] = f;
                }

                if (majorVersion >= 1 && minorVersion >= 5)
                {
                    int frameCount = br.ReadInt32();
                    PosKeyFrames = new PosKeyFrame[frameCount];

                    for (int i = 0; i < frameCount; i++)
                    {
                        PosKeyFrame pfk = new PosKeyFrame();

                        pfk.Read(br);

                        PosKeyFrames[i] = pfk;
                    }
                }

                int rotFrameCount = br.ReadInt32();

                RotKeyFrames = new RotKeyFrame[rotFrameCount];

                for (int i = 0; i < rotFrameCount; i++)
                {
                    RotKeyFrame rfk = new RotKeyFrame();

                    rfk.Read(br);

                    RotKeyFrames[i] = rfk;
                }

                return(true);
            }