Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
    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);
            }
        }
    }
Exemplo n.º 3
0
        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);
        }