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