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); } }
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); }
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>(); }