public void AddConnectedNode(MapPathNode node, enConnectType connect)
 {
     connectedNode[node.nodeNo] = node;
     connectType[node.nodeNo]   = connect;
     walkableNodeNum            = connectType.Values
                                  .Where(v => (v == enConnectType.Walk))
                                  .Count();
     jumpableNodeNum = connectType.Values
                       .Where(v => (v == enConnectType.Jump))
                       .Count();
 }
Exemple #2
0
        static public void CreateMapPathObject(int mapId, List <MapNodePlate> pathList)
        {
            //パスリストからすべてのノードを作成
            List <MapPathNode> nodeList = new List <MapPathNode>();

            foreach (var item in pathList.Select((v, i) => new { v, i }))
            {
                MapPathNode node = new MapPathNode(item.i, item.v);
                nodeList.Add(node);
            }

            //隣接ノードチェック
            foreach (var item in nodeList)
            {
                foreach (var target in nodeList)
                {
                    //自分自身以外
                    if (item.nodeNo == target.nodeNo)
                    {
                        continue;
                    }
                    //接続できるノードかチェック
                    if (!item.plate.IsSideBySide(target.plate))
                    {
                        continue;
                    }

                    //Debug.Log("MapPathNode.enConnectType.Walk");
                    //歩きで接続
                    item.AddConnectedNode(target, MapPathNode.enConnectType.Walk);
                }
            }

            //ジャンプノードチェック
            foreach (var item in nodeList)
            {
                //崖ノードかチェック
                if (!item.IsCliff())
                {
                    continue;
                }

                foreach (var target in nodeList)
                {
                    //自分自身以外
                    if (item.nodeNo == target.nodeNo)
                    {
                        continue;
                    }

                    //既に登録済みノード
                    if (item.IsContainsNodeNo(target.nodeNo))
                    {
                        continue;
                    }

                    //地続きのノードもジャンプ可能に入ってしまっているので、
                    //それを排除する

                    //ジャンプできるノードかチェック
                    if (!item.plate.IsJumpable(target.plate))
                    {
                        continue;
                    }

                    //ジャンプで接続
                    item.AddConnectedNode(target, MapPathNode.enConnectType.Jump);
                }
            }

            //スクリプタブルオブジェクトにすべて追加
            MapPathNodes pathNodes = CreateInstance <MapPathNodes>();

            pathNodes.mapId = mapId;
            pathNodes.nodes = nodeList.ToArray();
            string filepath = $"{MapEditorMain.MapPathPath}{mapId.ToString("d3")}.asset";

            AssetDatabase.CreateAsset(pathNodes, filepath);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
            Debug.Log($"CreateAsset:{filepath}");
        }
 public IEnumerable <IAStarNode> GetConnectedNodes()
 {
     MapPathNode[] values = new MapPathNode[connectedNode.Values.Count];
     connectedNode.Values.CopyTo(values, 0);
     return(values);
 }