예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }