Esempio n. 1
0
        internal static ReplayMetadata Parse(BinaryReader reader)
        {
            var raw      = reader.ReadNullTerminatedAsciiString();
            var rawSplit = raw.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            var result = new ReplayMetadata();

            foreach (var rawEntry in rawSplit)
            {
                var keyValue = rawEntry.Split('=');

                switch (keyValue[0])
                {
                case "US":
                    break;

                case "M":
                    result.MapFileUnknownInt = Convert.ToInt32(keyValue[1].Substring(0, 2));
                    result.MapFile           = keyValue[1].Substring(2);
                    break;

                case "MC":
                    result.MapCrc = Convert.ToInt32(keyValue[1], 16);
                    break;

                case "MS":
                    result.MapSize = Convert.ToInt32(keyValue[1]);
                    break;

                case "SD":
                    result.SD = Convert.ToInt32(keyValue[1]);
                    break;

                case "C":
                    result.C = Convert.ToInt32(keyValue[1]);
                    break;

                case "SR":
                    result.SR = Convert.ToInt32(keyValue[1]);
                    break;

                case "SC":
                    result.StartingCredits = Convert.ToInt32(keyValue[1]);
                    break;

                case "O":
                    result.O = keyValue[1];
                    break;

                case "S":
                    var slots = keyValue[1].Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                    result.Slots = new ReplaySlot[slots.Length];
                    for (var i = 0; i < slots.Length; i++)
                    {
                        result.Slots[i] = ReplaySlot.Parse(slots[i]);
                    }

                    break;

                default:
                    throw new NotImplementedException($"Unexpected replay metadata key: '{keyValue[0]}'.");
                }
            }

            return(result);
        }