Ejemplo n.º 1
0
 private void Clear()
 {
     foreach (var keyValuePair in _nodesByTilePosition)
     {
         keyValuePair.Value.Reset();
     }
     ReachableNodes.Clear();
     BombNodes.Clear();
     ItemNodes.Clear();
 }
Ejemplo n.º 2
0
        private void ScanRecursive(LevelImp level, PlaceNode currentNode, int depth)
        {
            if (currentNode.IsReachable)
            {
                return;
            }

            if (level.IsCollidable(currentNode.TilePosition))
            {
                var b = level.GetFringe(currentNode.TilePosition);
                if (b.Type == BlockType.Box && b.IsActive)
                {
                    currentNode.IsBoxToDestroy = true;
                    ReachableBoxNodes.Add(currentNode);
                    return;
                }

                currentNode.Bomb = level.ActualBombs.FirstOrDefault(bb => bb.TilePosition == currentNode.TilePosition);
                if (currentNode.Bomb != null)
                {
                    BombNodes.Add(currentNode);
                }
                if (depth > 0)
                {
                    return;
                }
            }

            var item = level.GetItemData(currentNode.TilePosition);

            if (item.IsActive && item.Type != ItemType.Empty)
            {
                currentNode.ItemType = item.Type;
                ItemNodes.Add(currentNode);
            }

            currentNode.IsReachable = true;
            currentNode.CostToReach = depth;
            ReachableNodes.Add(currentNode.TilePosition, currentNode);
            ScanRecursive(level, currentNode.Left, depth + 1);
            ScanRecursive(level, currentNode.Right, depth + 1);
            ScanRecursive(level, currentNode.Up, depth + 1);
            ScanRecursive(level, currentNode.Down, depth + 1);
        }