#region Copyright & License Information /* * Copyright (c) The OpenRA Developers and Contributors * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. For more * information, see COPYING. */ #endregion using System; using System.Collections.Generic; namespace OpenRA.Mods.Common.Pathfinder { /// /// A sparse pathfinding graph that supports a search over provided cells. /// This is a classic graph that supports an arbitrary graph of nodes and edges, /// and does not require a dense grid of cells. /// Costs and any desired connections to a /// must be provided as input. /// sealed class SparsePathGraph : IPathGraph { readonly Func> edges; readonly Dictionary info; public SparsePathGraph(Func> edges, int estimatedSearchSize = 0) { this.edges = edges; info = new Dictionary(estimatedSearchSize); } public List GetConnections(CPos position, Func targetPredicate) { return edges(position) ?? new List(); } public CellInfo this[CPos pos] { get { if (info.TryGetValue(pos, out var cellInfo)) return cellInfo; return default; } set => info[pos] = value; } public void Dispose() { } } }