public bool isEqualTo(SETObject other) { return( other.id == id && other.clip == clip && other.x == x && other.y == y && other.z == z && other.rotX == rotX && other.rotY == rotY && other.rotZ == rotZ && other.var1 == var1 && other.var2 == var2 && other.var3 == var3); }
public static void addObjectsFromRawBytes(byte[] buf) { //Since the object count is stored in 4 bytes, // and since theres usually a "small" (less than 65k) number of objects // in these files, we can assume the endianess by computing // both counts and comparing the sizes uint endianCheck1 = (uint)0; endianCheck1 += (uint)(buf[0]); endianCheck1 += (uint)(buf[1] << 8); endianCheck1 += (uint)(buf[2] << 16); endianCheck1 += (uint)(buf[3] << 24); uint endianCheck2 = (uint)0; endianCheck2 += (uint)(buf[3]); endianCheck2 += (uint)(buf[2] << 8); endianCheck2 += (uint)(buf[1] << 16); endianCheck2 += (uint)(buf[0] << 24); if (endianCheck1 < endianCheck2) //Little endian: SADX { uint objCount = endianCheck1; for (uint i = 1; i < objCount + 1; i++) { SETObject obj = new SETObject(); uint off = i * 32; byte id = 0; id = buf[off + 0]; //id += (buf[off+0] << 8); //Its only 4 bits of this? byte clip = 0; clip = buf[off + 1]; //Only 4 bits of it? ushort rotX = 0; rotX += (ushort)(buf[off + 2]); rotX += (ushort)(buf[off + 3] << 8); ushort rotY = 0; rotY += (ushort)(buf[off + 4]); rotY += (ushort)(buf[off + 5] << 8); ushort rotZ = 0; rotZ += (ushort)(buf[off + 6]); rotZ += (ushort)(buf[off + 7] << 8); byte[] tmp = new byte[4]; tmp[3] = buf[off + 11]; tmp[2] = buf[off + 10]; tmp[1] = buf[off + 9]; tmp[0] = buf[off + 8]; float x = System.BitConverter.ToSingle(tmp, 0); tmp[3] = buf[off + 15]; tmp[2] = buf[off + 14]; tmp[1] = buf[off + 13]; tmp[0] = buf[off + 12]; float y = System.BitConverter.ToSingle(tmp, 0); tmp[3] = buf[off + 19]; tmp[2] = buf[off + 18]; tmp[1] = buf[off + 17]; tmp[0] = buf[off + 16]; float z = System.BitConverter.ToSingle(tmp, 0); tmp[3] = buf[off + 23]; tmp[2] = buf[off + 22]; tmp[1] = buf[off + 21]; tmp[0] = buf[off + 20]; float var1 = System.BitConverter.ToSingle(tmp, 0); tmp[3] = buf[off + 27]; tmp[2] = buf[off + 26]; tmp[1] = buf[off + 25]; tmp[0] = buf[off + 24]; float var2 = System.BitConverter.ToSingle(tmp, 0); tmp[3] = buf[off + 31]; tmp[2] = buf[off + 30]; tmp[1] = buf[off + 29]; tmp[0] = buf[off + 28]; float var3 = System.BitConverter.ToSingle(tmp, 0); obj.id = id; obj.clip = clip; obj.x = x; obj.y = y; obj.z = z; obj.rotX = rotX; obj.rotY = rotY; obj.rotZ = rotZ; obj.var1 = var1; obj.var2 = var2; obj.var3 = var3; obj.genDisp(); objList.Add(obj); } } else //Big endian : SA2 { uint objCount = endianCheck2; for (uint i = 1; i < objCount + 1; i++) { SETObject obj = new SETObject(); uint off = i * 32; byte id = 0; id = buf[off + 1]; //id += (buf[off+0] << 8); //Its only 4 bits of this? byte clip = 0; clip = buf[off + 0]; //Only 4 bits of it? ushort rotX = 0; rotX += (ushort)(buf[off + 3]); rotX += (ushort)(buf[off + 2] << 8); ushort rotY = 0; rotY += (ushort)(buf[off + 5]); rotY += (ushort)(buf[off + 4] << 8); ushort rotZ = 0; rotZ += (ushort)(buf[off + 7]); rotZ += (ushort)(buf[off + 6] << 8); byte[] tmp = new byte[4]; tmp[0] = buf[off + 11]; tmp[1] = buf[off + 10]; tmp[2] = buf[off + 9]; tmp[3] = buf[off + 8]; float x = System.BitConverter.ToSingle(tmp, 0); tmp[0] = buf[off + 15]; tmp[1] = buf[off + 14]; tmp[2] = buf[off + 13]; tmp[3] = buf[off + 12]; float y = System.BitConverter.ToSingle(tmp, 0); tmp[0] = buf[off + 19]; tmp[1] = buf[off + 18]; tmp[2] = buf[off + 17]; tmp[3] = buf[off + 16]; float z = System.BitConverter.ToSingle(tmp, 0); tmp[0] = buf[off + 23]; tmp[1] = buf[off + 22]; tmp[2] = buf[off + 21]; tmp[3] = buf[off + 20]; float var1 = System.BitConverter.ToSingle(tmp, 0); tmp[0] = buf[off + 27]; tmp[1] = buf[off + 26]; tmp[2] = buf[off + 25]; tmp[3] = buf[off + 24]; float var2 = System.BitConverter.ToSingle(tmp, 0); tmp[0] = buf[off + 31]; tmp[1] = buf[off + 30]; tmp[2] = buf[off + 29]; tmp[3] = buf[off + 28]; float var3 = System.BitConverter.ToSingle(tmp, 0); obj.id = id; obj.clip = clip; obj.x = x; obj.y = y; obj.z = z; obj.rotX = rotX; obj.rotY = rotY; obj.rotZ = rotZ; obj.var1 = var1; obj.var2 = var2; obj.var3 = var3; obj.genDisp(); objList.Add(obj); } } }
public int CompareTo(object obj) { SETObject orderToCompare = obj as SETObject; //Always organize by ID first if (orderToCompare.id < id) { return(1); } else if (orderToCompare.id > id) { return(-1); } switch (organizeType) { //Just organize by ID case 0: break; //Organize by X Rotation case 1: if (orderToCompare.rotX < rotX) { return(1); } else if (orderToCompare.rotX > rotX) { return(-1); } break; //Organize by Y Rotation case 2: if (orderToCompare.rotY < rotY) { return(1); } else if (orderToCompare.rotY > rotY) { return(-1); } break; //Organize by Z Rotation case 3: if (orderToCompare.rotZ < rotZ) { return(1); } else if (orderToCompare.rotZ > rotZ) { return(-1); } break; //Organize by X case 4: if (orderToCompare.x < x) { return(1); } else if (orderToCompare.x > x) { return(-1); } break; //Organize by Y case 5: if (orderToCompare.y < y) { return(1); } else if (orderToCompare.y > y) { return(-1); } break; //Organize by Z case 6: if (orderToCompare.z < z) { return(1); } else if (orderToCompare.z > z) { return(-1); } break; //Organize by Variable 1 case 7: if (orderToCompare.var1 < var1) { return(1); } else if (orderToCompare.var1 > var1) { return(-1); } break; //Organize by Variable 2 case 8: if (orderToCompare.var2 < var2) { return(1); } else if (orderToCompare.var2 > var2) { return(-1); } break; //Organize by Variable 3 case 9: if (orderToCompare.var3 < var3) { return(1); } else if (orderToCompare.var3 > var3) { return(-1); } break; default: break; } //Still a tie? At least make it stable if (orderToCompare.index < index) { return(1); } return(-1); }