public void Unserialize(IO.BinaryStream binaryReader, int clientVersion) { Width = binaryReader.ReadUnsignedByte(); Height = binaryReader.ReadUnsignedByte(); if (Width > 1 || Height > 1) { ExactSize = binaryReader.ReadUnsignedByte(); } else { ExactSize = 32; } Layers = binaryReader.ReadUnsignedByte(); PatternWidth = binaryReader.ReadUnsignedByte(); PatternHeight = binaryReader.ReadUnsignedByte(); PatternDepth = clientVersion >= 755 ? binaryReader.ReadUnsignedByte() : (byte)1; Phases = binaryReader.ReadUnsignedByte(); if (Phases > 1 && clientVersion >= 1050) { Animator = new FrameGroupAnimator(); Animator.Unserialize(Phases, binaryReader); } int totalSprites = Width * Height * Layers * PatternWidth * PatternHeight * PatternDepth * Phases; for (int j = 0; j < totalSprites; j++) { Sprites.Add(clientVersion >= 960 ? binaryReader.ReadUnsignedInt() : binaryReader.ReadUnsignedShort()); } }
public void Serialize(ThingType thingType, IO.BinaryStream binaryWriter, int fromVersion, int newVersion, sbyte startPhase, byte phasesLimit) { binaryWriter.WriteUnsignedByte(Width); binaryWriter.WriteUnsignedByte(Height); if (Width > 1 || Height > 1) { binaryWriter.WriteUnsignedByte(ExactSize); } binaryWriter.WriteUnsignedByte(Layers); binaryWriter.WriteUnsignedByte(PatternWidth); binaryWriter.WriteUnsignedByte(PatternHeight); if (newVersion >= 755) { binaryWriter.WriteUnsignedByte(PatternDepth); } binaryWriter.WriteUnsignedByte(phasesLimit); if (fromVersion < 1050) { if (phasesLimit > 1 && newVersion >= 1050) { FrameGroupAnimator.SerializeLegacy(thingType, binaryWriter, startPhase, phasesLimit); } } else { if (phasesLimit > 1 && newVersion >= 1050) { Animator.Serialize(binaryWriter, startPhase, phasesLimit); } } int spritesPerPhase = Width * Height * Layers * PatternWidth * PatternHeight * PatternDepth; int totalSprites = phasesLimit * spritesPerPhase; int offset = startPhase * spritesPerPhase; for (int j = 0; j < totalSprites; j++) { uint spriteId = Sprites[offset + j]; if (newVersion >= 960) { binaryWriter.WriteUnsignedInt(spriteId); } else { binaryWriter.WriteUnsignedShort((ushort)spriteId); } } }