예제 #1
0
        public void Merge(TilePool pool, TileImportPolicy policy)
        {
            Dictionary <string, Tile> existingHashes = new Dictionary <string, Tile>();
            Dictionary <string, Tile> newHashes      = new Dictionary <string, Tile>();

            using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider()) {
                foreach (Tile tile in _tiles)
                {
                    TextureResource tileTex = Tiles.GetTileTexture(tile.Uid);
                    string          hash    = Convert.ToBase64String(sha1.ComputeHash(tileTex.RawData));
                    existingHashes[hash] = tile;
                }

                foreach (Tile tile in pool.Tiles)
                {
                    TextureResource tileTex = pool.Tiles.GetTileTexture(tile.Uid);
                    string          hash    = Convert.ToBase64String(sha1.ComputeHash(tileTex.RawData));

                    if (policy == TileImportPolicy.SourceUnique && newHashes.ContainsKey(hash))
                    {
                        continue;
                    }
                    else if (policy == TileImportPolicy.SetUnique && existingHashes.ContainsKey(hash))
                    {
                        continue;
                    }

                    Tile newTile = _tiles.Add(tileTex);

                    existingHashes[hash] = newTile;
                    newHashes[hash]      = newTile;
                }
            }
        }
예제 #2
0
 public TileImportOptions()
 {
     ImportPolicty = TileImportPolicy.SetUnique;
 }