Esempio n. 1
0
        public Character Read()
        {
            var character   = new Character();
            var magicNumber = ReadMagicNumber();

            ValidateMagicNumber(magicNumber);

            var schemaVersion = _reader.ReadSingle();

            character.Version = SchemaVersion.Find(schemaVersion);

            character.UseQualifiedNames = _reader.ReadBoolean();
            character.UseSubpowerFields = _reader.ReadBoolean();

            // archetype
            character.Archetype = new ArchetypeReader(_reader).Read();

            // alignment is a lookup value
            // ideally this would be data driven
            if (character.Version > SchemaVersion.v1_0_0)
            {
                character.Alignment = Alignment.Find(_reader.ReadInt32(), string.Empty);
            }

            character.Name = _reader.ReadString();

            // read the first build with a build reader
            // if multiple builds are supported in the future, I assume it will be a version bump
            character.Builds = new List <Build>();
            var build = new BuildReader(character, _reader).Read();

            character.Builds.Add(build);

            return(character);
        }
Esempio n. 2
0
        public static SchemaVersion Find(float schemaVersion)
        {
            SchemaVersion version = Versions.FirstOrDefault(x => x.Version == schemaVersion);

            if (version != null)
            {
                return(version);
            }

            var decimalSchemaVersion = new decimal(schemaVersion);

            // attempt to generate a schema version
            var major = (int)decimalSchemaVersion;
            var minor = (int)((decimalSchemaVersion - major) * 100);
            var patch = 0;

            return(new SchemaVersion
            {
                Major = major,
                Minor = minor,
                Patch = patch,
                Version = schemaVersion,
            });
        }