public HashList <GraphNode> GetDistanceRange(Vector3 pos, float distance, Func <GraphNode, bool> filter = null) { BFSQueue.Clear(); BFSResult.Clear(); BFSRange.Clear(); var depth = distance / NodeSize; GraphNode seed = GetNode(pos); Action <GraphNodeRange, GraphNode> callback = (parent, node) => { if (node.Walkable && !BFSResult.Contains(node)) { if (filter != null && !filter(node)) { return; } var nRangeItem = new GraphNodeRange(parent, node); if (nRangeItem.Distance > distance) { return; } if (nRangeItem.Depth > depth) { return; } BFSResult.Add(node); BFSQueue.Enqueue(node); BFSRange.Add(node, nRangeItem); } }; callback(null, seed); while (BFSQueue.Count > 0) { GraphNode n = BFSQueue.Dequeue(); GraphNodeRange nRangeItem = BFSRange[n]; if (nRangeItem.Distance > distance) { break; } if (nRangeItem.Depth > depth) { break; } n.GetConnections((x) => { callback(nRangeItem, x); }); } return(BFSResult); }
//所有单位的回合都结束:回调函数 protected virtual void OnTurnAllEnd() { SelfBaseGlobal.OnGameLogicTurn(); OperatedUnits.Clear(); TurnCount++; BaseGlobal.DBMgr.AutoSave(); }
public override void OnCreate() { base.OnCreate(); LangTypes.Clear(); FirstRowStrs.Clear(); Enum <LanguageType> .For(x => { LangTypes.Add(x); FirstRowStrs.Add(x.ToString(), x); }); FirstRowStrs.Add("ID", null); }
void RecreateAlerts() { foreach (var alert in ActiveItems) { GOPool.Despawn(alert.gameObject); } ActiveItems.Clear(); if (delayCallTask != null) { BattleCoroutine.Kill(delayCallTask); } delayCallTask = BattleCoroutine.Run(AddInitAlerts()); }
public HashList <GraphNode> CalcConstant() { float range = CurMovePoint; ConstantNodesDraw.Clear(); ConstantNodesMove.Clear(); ConstantNodesMove = AStarMgr.GetDistanceRange(SelfBaseUnit.Pos, range, x => Traversal.CanTraverse(null, x)); foreach (var item in ConstantNodesMove) { //过滤掉占有单位得节点,并且这个节点不是自身,防止重复绕路 if (AStarMgr.IsHaveUnit(item)) { continue; } ConstantNodesDraw.Add(item); } return(ConstantNodesDraw); }
public void Clear() { AllBlockers.Clear(); BlockNodes.Clear(); BlockNodesUnit.Clear(); }