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; } }
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); }
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); }