Alexandria.Engines.Creation.Group.ReadGroup C# (CSharp) Метод

ReadGroup() статический приватный Метод

static private ReadGroup ( Module module ) : Group
module Module
Результат Group
        internal static Group ReadGroup(Module module)
        {
            BinaryReader reader = module.Reader;

            string type = reader.ReadId4();
            if (type != "GRUP")
                throw new InvalidDataException(string.Format("Expected GRUP; received {0}.", type));
            uint contentSize = checked(reader.ReadUInt32() - 24);
            uint label = reader.ReadUInt32();
            string labelId = Extensions.ToId4((int)label);
            ModuleGroupType groupType = (ModuleGroupType)reader.ReadInt32();

            switch (groupType) {
                case ModuleGroupType.Top:
                    switch(labelId) {
                        case "CELL":
                        case "WRLD":
                        case "DIAL":
                            return new GroupTopGroup(module, contentSize, label);
                        default:
                            return new RecordTopGroup(module, contentSize, label);
                    }

                default:
                    throw new NotImplementedException("Group type " + groupType + " is not implemented.");
            }
        }

Usage Example

Пример #1
0
        internal Module(AssetLoader loader)
            : base(loader)
        {
            loader.Progress = 0;
            Reader          = loader.Reader;
            var tes4Record = new RecordHeader(Reader);

            tes4Record.RequireType("TES4");
            using (RecordReader reader = tes4Record.OpenReader(Reader)) {
                while (reader.ReadField())
                {
                    switch (reader.Field.Type)
                    {
                    case "HEDR":
                        reader.RequireFieldSize(12);
                        Version               = reader.ReadSingle();
                        RecordCount           = reader.ReadInt32();
                        NextAvailableObjectId = reader.ReadFormId();
                        break;

                    case "CNAM": Author = reader.ReadStringBody(); break;

                    case "SNAM": Description = reader.ReadStringBody(); break;

                    case "MAST": MastersMutable.Add(reader.ReadStringBody()); break;

                    case "DATA":                             // File size of a MAST - always 0, probably vestigial.
                        long fileSize = reader.ReadInt64OrInt32Body();
                        if (fileSize != 0)
                        {
                            throw new InvalidDataException();
                        }
                        break;

                    case "ONAM":
                        OverridesMutable.Capacity = reader.Field.Size / 4;
                        for (int index = 0, count = reader.Field.Size / 4; index < count; index++)
                        {
                            OverridesMutable.Add(reader.ReadFormId());
                        }
                        break;

                    case "INTV": InternalVersion = reader.ReadInt32Body(); break;

                    case "INCC": InternalCC = reader.ReadInt32Body(); break;

                    default:
                        throw reader.UnknownFieldException();
                    }
                }
            }

            while (!loader.AtEnd)
            {
                loader.SetProgressToPosition();
                AddChild(Group.ReadGroup(this));
            }
        }