예제 #1
0
        public void TestGetLowerTile()
        {
            var tile      = new TileIndex(-1, -1, 1);
            var lowerTile = tile.GetLowerTile();

            Assert.AreEqual(new TileIndex(-1, -1, 0), lowerTile);

            Assert.AreEqual(new TileIndex(0, 0, 0), new TileIndex(1, 1, 1).GetLowerTile());
        }
예제 #2
0
		public void TestGetLowerTile()
		{
			var tile = new TileIndex(-1, -1, 1);
			var lowerTile = tile.GetLowerTile();

			Assert.AreEqual(new TileIndex(-1, -1, 0), lowerTile);

			Assert.AreEqual(new TileIndex(0, 0, 0), new TileIndex(1, 1, 1).GetLowerTile());
		}
		public bool Contains(TileIndex id)
		{
			int level = id.Level;
			if (level < minLevel || level > maxLevel)
				return false;

			TileIndex parent = id.GetLowerTile(levelDelta);

			ulong cacheLine;
			if (cache.TryGetValue(parent, out cacheLine))
			{
				int x = id.X - parent.X * levelSize;
				int y = id.Y - parent.Y * levelSize;

				int position = x * levelSize + y;

				return (cacheLine & ((ulong)1 << position)) != 0;
			}
			return false;
		}
		public void Add(TileIndex id, bool exists)
		{
			ulong cacheLine = 0;
			TileIndex parent = id.GetLowerTile(levelDelta);

			cache.TryGetValue(parent, out cacheLine);

			int x = id.X - parent.X * levelSize;
			int y = id.Y - parent.Y * levelSize;

			int position = x * levelSize + y;
			if (exists)
			{
				cacheLine |= ((ulong)1) << position;
			}
			else
			{
				cacheLine &= ~(((ulong)1) << position);
			}

			cache[parent] = cacheLine;
		}