Beispiel #1
0
        public static ReplayBlock Parse(Stream data, ReplayBlockType replayBlockType)
        {
            switch (replayBlockType)
            {
            case ReplayBlockType.StartBlockOne:
            case ReplayBlockType.StartBlockTwo:
            case ReplayBlockType.StartBlockThree:
                return(null);

            case ReplayBlockType.TimeslotOld:
            case ReplayBlockType.Timeslot:
                return(new TimeslotBlock(data));

            default:
                return(null);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Seek the next <see cref="ReplayBlock"/> in the <paramref name="data"/>.
        /// </summary>
        internal static void SkipCurrentBlock(Stream data, out ReplayBlockType replayBlockType)
        {
            replayBlockType = (ReplayBlockType)data.ReadByte();

            switch (replayBlockType)
            {
            case ReplayBlockType.LeaveGame:
                data.Seek(13, SeekOrigin.Current);
                break;

            case ReplayBlockType.StartBlockOne:
            case ReplayBlockType.StartBlockTwo:
            case ReplayBlockType.StartBlockThree:
                data.Seek(4, SeekOrigin.Current);
                break;

            case ReplayBlockType.TimeslotOld:
            case ReplayBlockType.Timeslot:
                data.Seek(data.ReadWordAsInt(), SeekOrigin.Current);
                break;

            case ReplayBlockType.ChatMessage:
                data.Seek(1, SeekOrigin.Current);
                data.Seek(data.ReadWordAsInt(), SeekOrigin.Current);
                break;

            case ReplayBlockType.ChecksumOrSeed:
                data.Seek(5, SeekOrigin.Current);
                break;

            case ReplayBlockType.Unknown:
                data.Seek(10, SeekOrigin.Current);
                break;

            case ReplayBlockType.ForcedGameEnd:
                data.Seek(8, SeekOrigin.Current);
                break;

            default:
                throw new InvalidDataException($"Unknown replay block type: {replayBlockType}.");
            }
        }