示例#1
0
        private static string GetCommand(ChannelMethod method)
        {
            switch (method)
            {
            case ChannelMethod.Get:
                return("get:");

            case ChannelMethod.Create:
                return("add:");

            case ChannelMethod.Execute:
                return("exec:");

            case ChannelMethod.Update:
                return("update:");

            case ChannelMethod.Delete:
                return("delete:");

            default:
                throw new InvalidOperationException("Invalid channelMethod");
            }
        }
示例#2
0
        public ChunkyDataCHAN(int version_in, string name_in, byte[] innerData) : base("CHAN", version_in, name_in)
        {
            stringLength = innerData[12] + (innerData[13] << 8) + (innerData[14] << 16) + (innerData[15] << 24);

            colourMask    = new byte[4];
            colourMask[0] = innerData[8];
            colourMask[1] = innerData[9];
            colourMask[2] = innerData[10];
            colourMask[3] = innerData[11];

            if (innerData[4] == 1)
            {
                method = ChannelMethod.Texture;
            }
            else if (innerData[4] == 2)
            {
                method = ChannelMethod.Add;
            }
            else if (innerData[4] == 3)
            {
                method = ChannelMethod.Blend;
            }
            else if (innerData[4] > 3 || innerData[4] == 0)
            {
                method = ChannelMethod.None;
            }
            else
            {
                throw new InvalidChunkValueException("Invalid value found for CHAN method", "Channel Method", innerData[4]);
            }

            channel     = (ChannelType)innerData[0];
            channelName = ByteArrayToTextString(innerData, 16, stringLength);
            unknown     = new byte[4];
            unknown[0]  = innerData[stringLength + 16];
            unknown[1]  = innerData[stringLength + 17];
            unknown[2]  = innerData[stringLength + 18];
            unknown[3]  = innerData[stringLength + 19];
            int coordPos = stringLength + 20;

            numCoords   = innerData[coordPos] + (innerData[coordPos + 1] << 8) + (innerData[coordPos + 2] << 16) + (innerData[coordPos + 3] << 24);
            unknown2    = new byte[4];
            unknown2[0] = innerData[coordPos + 4];
            unknown2[1] = innerData[coordPos + 5];
            unknown2[2] = innerData[coordPos + 6];
            unknown2[3] = innerData[coordPos + 7];

            coords = new Coordinate[numCoords, 4];

            int pos = coordPos + 8;

            for (int i = 0; i < numCoords && pos < innerData.Length; i++)
            {
                coords[i, 0] = new Coordinate(ByteArrayToSingle(innerData, pos), ByteArrayToSingle(innerData, pos + 4));
                coords[i, 1] = new Coordinate(ByteArrayToSingle(innerData, pos + 8), ByteArrayToSingle(innerData, pos + 12));
                coords[i, 2] = new Coordinate(ByteArrayToSingle(innerData, pos + 16), ByteArrayToSingle(innerData, pos + 20));
                coords[i, 3] = new Coordinate(ByteArrayToSingle(innerData, pos + 24), ByteArrayToSingle(innerData, pos + 28));
                i++;
                pos = coordPos + 8 + (i * 32);
            }
        }