/// <summary> /// Указывает, что узел карты занят блоком. /// </summary> /// <param name="node">Узел, который будет занят указанным блоком.</param> /// <param name="blocker">Блокер, который занимает узел.</param> public void HoldNode(IMapNode node, IPassMapBlocker blocker) { if (!_nodeBlockers.TryGetValue(node, out IList <IPassMapBlocker> blockers)) { blockers = new List <IPassMapBlocker>(1); _nodeBlockers.Add(node, blockers); } blockers.Add(blocker); }
/// <summary> /// Указывает, что узел карты освобождён одним из блоков. /// </summary> /// <param name="node">Узел, который будет освобождён указанным блоком.</param> /// <param name="blocker">Блокер, который освобождает узел.</param> /// <exception cref="System.InvalidOperationException"> /// Попытка освободить узел {node} /// or /// Попытка освободить узел {node}, который не заблокирован блокировщиком {blocker} /// </exception> public void ReleaseNode(IMapNode node, IPassMapBlocker blocker) { if (!_nodeBlockers.TryGetValue(node, out IList <IPassMapBlocker> blockers)) { throw new InvalidOperationException($"Попытка освободить узел {node}, который не заблокирован."); } if (!blockers.Contains(blocker)) { throw new InvalidOperationException($"Попытка освободить узел {node}, который не заблокирован блокировщиком {blocker}."); } blockers.Remove(blocker); }