private void Clear() { foreach (var keyValuePair in _nodesByTilePosition) { keyValuePair.Value.Reset(); } ReachableNodes.Clear(); BombNodes.Clear(); ItemNodes.Clear(); }
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); }