/// <summary>
        /// Initializes a new instance of the <see cref="PropertyVisitor" /> class.
        /// </summary>
        /// <param name="map">The translation map.</param>
        public PropertyVisitor(TranslationMap map)
        {
            if (map == null)
                throw new ArgumentNullException("map");

            this.map = map;
        }
        public static void Configure()
        {
            ConventionPack conventionPack = new ConventionPack
            {
                new IgnoreIfDefaultConvention(true),
                new IgnoreExtraElementsConvention(true),
                new CamelCaseElementNameConvention(),
                new EnumRepresentationConvention(BsonType.String)
            };

            ConventionRegistry.Register("LuduStackConventions", conventionPack, t => true);

            BsonDefaults.GuidRepresentation = GuidRepresentation.Standard;

            EntityBaseMap.Configure();
            UserProfileMap.Configure();
            GameMap.Configure();
            UserContentMap.Configure();
            UserPreferencesMap.Configure();
            FeaturedContentMap.Configure();
            GamificationActionMap.Configure();
            GamificationLevelMap.Configure();
            GamificationMap.Configure();
            PollMap.Configure();
            BrainstormMap.Configure();
            TeamMap.Configure();
            JobsMap.Configure();
            TranslationMap.Configure();
        }
Beispiel #3
0
        private static Block[] LoadBlocks(TagNodeCompound tag, TranslationMap palette, int length, int width, Dictionary <BlockPos, TileEntity> tiles)
        {
            var bLower = tag["Blocks"].ToTagByteArray().Data;
            var bUpper = new byte[(bLower.Length >> 1) + 1];

            if (tag.ContainsKey("AddBlocks"))
            {
                bUpper = tag["AddBlocks"].ToTagByteArray().Data;
            }
            else if (tag.ContainsKey("Add"))
            {
                Console.WriteLine("Schematic contains deprecated tag \"Add\", use \"AddBlocks\" instead. Loading regardless.");
                var add = tag["Add"].ToTagByteArray().Data;
                for (var i = 0; i < bLower.Length; i++)
                {
                    if ((i & 1) == 1)
                    {
                        bUpper[i >> 1] |= (byte)(add[i] & 0x0F);
                    }
                    else
                    {
                        bUpper[i >> 1] |= (byte)((add[i] & 0x0F) << 4);
                    }
                }
            }

            var bMetadata = new byte[bLower.Length];

            if (tag.ContainsKey("Metadata"))
            {
                bMetadata = tag["Metadata"].ToTagByteArray().Data;
            }
            else if (tag.ContainsKey("Data"))
            {
                bMetadata = tag["Data"].ToTagByteArray().Data;
            }

            var blocks = new Block[bLower.Length];

            for (var i = 0; i < bLower.Length; i++)
            {
                short id;
                if ((i & 1) == 1)
                {
                    id = (short)(((bUpper[i >> 1] & 0x0F) << 8) + (bLower[i] & 0xFF));
                }
                else
                {
                    id = (short)(((bUpper[i >> 1] & 0xF0) << 4) + (bLower[i] & 0xFF));
                }

                var pos      = GetBlockPos(length, width, i);
                var metadata = bMetadata[i];
                tiles.TryGetValue(pos, out var tile);

                blocks[i] = new Block(TranslateBlockId(palette, id), metadata, tile?.Data);
            }

            return(blocks);
        }
Beispiel #4
0
        private TranslationMap BuildCodonDictionaryFromFileContents(string fileContents)
        {
            var codonData = new TranslationMap();

            var lines = fileContents.Replace(NewLine, Splitter).Split(Splitter.ToCharArray().First());

            foreach (var line in lines)
            {
                InsertValueIntoMapOrStartOrStopList(line, codonData);
            }

            return(codonData);
        }
Beispiel #5
0
        private void InsertValueIntoMapOrStartOrStopList(string line, TranslationMap translationTranslationMap)
        {
            var lineValues = line.Split(Comma);

            if (lineValues[1].ToLower() == StopKey)
            {
                translationTranslationMap.Stops.Add(lineValues[0]);
            }

            else if (lineValues[1].ToLower() == StartKey)
            {
                translationTranslationMap.Starts.Add(lineValues[0]);
            }

            else
            {
                translationTranslationMap.CodonMap.Add(lineValues[0], lineValues[1]);
            }
        }
        /// <inheritdoc />
        public Structure Load(string filename)
        {
            using (var fs = File.OpenRead(filename))
                using (var bs = new BrotliStream(fs, CompressionMode.Decompress))
                    using (var s = new BinaryReader(bs))
                    {
                        var idMap   = new TranslationMap();
                        var diffMap = new DiffMap();

                        var identBytes = new byte[ScarifStructure.Magic.Length];
                        var read       = s.Read(identBytes, 0, identBytes.Length);
                        var ident      = Encoding.UTF8.GetString(identBytes);
                        if (ident != ScarifStructure.Magic || read != identBytes.Length)
                        {
                            throw new IOException("Input file not SCARIF structure");
                        }

                        var version = s.ReadInt32();
                        if (version != 1)
                        {
                            throw new IOException("Input file not SCARIF v1");
                        }
                        var numChunks       = s.ReadInt32();
                        var numIdMapEntries = s.ReadInt32();

                        for (var entryIdx = 0; entryIdx < numIdMapEntries; entryIdx++)
                        {
                            var id   = s.ReadInt16();
                            var name = ReadNullTerminatedString(s);
                            idMap.Add(id, name);
                        }

                        var lowestPos  = new BlockPos(int.MaxValue, int.MaxValue, int.MaxValue);
                        var highestPos = new BlockPos(int.MinValue, int.MinValue, int.MinValue);

                        for (var chunkIdx = 0; chunkIdx < numChunks; chunkIdx++)
                        {
                            var chunkX    = s.ReadInt32();
                            var chunkZ    = s.ReadInt32();
                            var numBlocks = s.ReadInt32();

                            var blocks = new Dictionary <BlockPos, Block>();

                            for (var blockIdx = 0; blockIdx < numBlocks; blockIdx++)
                            {
                                // Format:
                                // 0b 0000 1111
                                //    xxxx zzzz
                                var xz = s.ReadByte();

                                var x = (byte)((xz & 0xF0) >> 4);
                                var z = (byte)(xz & 0x0F);
                                var y = s.ReadByte();

                                EnforceBounds(chunkX * 16 + x, y, chunkZ * 16 + z, ref lowestPos, ref highestPos);

                                var id    = s.ReadInt16();
                                var flags = (BlockFlags)s.ReadByte();

                                byte    metadata = 0;
                                NbtTree tileTag  = null;

                                if (flags.Has(BlockFlags.Metadata))
                                {
                                    metadata = s.ReadByte();
                                }
                                if (flags.Has(BlockFlags.Nbt))
                                {
                                    var len = s.ReadInt32();
                                    if (len <= 0)
                                    {
                                        throw new IOException("Zero-length NBT present");
                                    }
                                    var bytes = s.ReadBytes(len);
                                    using (var ms = new MemoryStream(bytes))
                                    {
                                        tileTag = new NbtTree(ms);
                                    }
                                }

                                if (idMap.ContainsKey(id))
                                {
                                    blocks[new BlockPos(x, y, z)] = new Block(idMap.TranslateBlock(id), metadata, tileTag?.Root);
                                }
                                else
                                {
                                    throw new IOException($"Unknown block ID found: {id}");
                                }
                            }

                            diffMap.Add(new ChunkPosition(chunkX, chunkZ), blocks);
                        }

                        return(new ScarifStructure(idMap, diffMap, lowestPos, highestPos));
                    }
        }
Beispiel #7
0
 private static string TranslateBlockId(TranslationMap map, int id)
 {
     return(map.ContainsKey((short)id) ? map[(short)id] : $"unknown:{id}");
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="codonTableFileName">Filename of the DNA codon table.</param>
 public CodonTranslator(string codonTableFileName)
 {
     _translationMap = new CsvCodonDataBuilder().Build(codonTableFileName);
 }