Пример #1
0
        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);
        }
Пример #2
0
 //所有单位的回合都结束:回调函数
 protected virtual void OnTurnAllEnd()
 {
     SelfBaseGlobal.OnGameLogicTurn();
     OperatedUnits.Clear();
     TurnCount++;
     BaseGlobal.DBMgr.AutoSave();
 }
Пример #3
0
        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);
        }
Пример #4
0
 void RecreateAlerts()
 {
     foreach (var alert in ActiveItems)
     {
         GOPool.Despawn(alert.gameObject);
     }
     ActiveItems.Clear();
     if (delayCallTask != null)
     {
         BattleCoroutine.Kill(delayCallTask);
     }
     delayCallTask = BattleCoroutine.Run(AddInitAlerts());
 }
Пример #5
0
        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);
        }
Пример #6
0
 public void Clear()
 {
     AllBlockers.Clear();
     BlockNodes.Clear();
     BlockNodesUnit.Clear();
 }