Esempio n. 1
0
 public void DebugDraw(ShapeRenderer shapeRenderer, LevelImp level, Vector2 offset)
 {
     foreach (var placeNode in _nodesByTilePosition)
     {
         if (!placeNode.Value.IsReachable && !placeNode.Value.IsBoxToDestroy)
         {
             continue;
         }
         var start = level.GetWorldFromTilePosition(placeNode.Value.TilePosition) + offset;
         shapeRenderer.DrawFilledRectangle((int)start.X, (int)start.Y, 32, 32, (placeNode.Value.IsBoxToDestroy ? Color.Orange : Color.Red) * 0.5f);
     }
 }
Esempio 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);
        }
Esempio n. 3
0
 public void ScanFields(LevelImp level, Point current)
 {
     Clear();
     ScanRecursive(level, _nodesByTilePosition[current], 0);
 }
 public ComFigureController(LevelImp level)
 {
     Level   = level;
     NodeMap = new NodeMap();
     _tasks  = new Queue <ITask>();
 }