Beispiel #1
0
        public void GenerateNavRegionsFromNodes_CreatesExpectedNumberOfRegionsForClashingPoints()
        {
            const int neighbourCount      = 4;
            const int singleNodes         = 30;
            const int expectedRegionCount = 5;

            var     nodesToAllocate = new List <NavNode>();
            var     neighbourNodes  = new List <NavNode>(neighbourCount);
            NavNode priorNode       = null;

            for (int j = 0; j < expectedRegionCount; j++)
            {
                for (int i = 0; i < singleNodes; i++)
                {
                    var newNode = new NavNode();

                    for (int k = 0; k < neighbourCount - 1; k++)
                    {
                        var newNeighbour = new NavNode();
                        neighbourNodes.Add(newNeighbour);
                    }

                    if (priorNode != null)
                    {
                        var updatedPriorNeighbours = priorNode.NeighbourRefs.ToList();
                        updatedPriorNeighbours.Add(newNode);

                        priorNode.NeighbourRefs = updatedPriorNeighbours.ToArray();
                        neighbourNodes.Add(priorNode);
                    }

                    newNode.NeighbourRefs = neighbourNodes.ToArray();

                    nodesToAllocate.Add(newNode);

                    foreach (var neighbourNode in neighbourNodes)
                    {
                        nodesToAllocate.Add(neighbourNode);
                    }

                    neighbourNodes.Clear();

                    priorNode = newNode;
                }
            }

            Assert.AreEqual(1, NavRegionGenerationFunctions.GenerateNavRegionsFromNodes(nodesToAllocate, singleNodes * neighbourCount).Count);
        }
Beispiel #2
0
        public void GenerateNavRegionsFromNodes_DoesNotConsiderDuplicates()
        {
            const int singleNodes         = 30;
            const int expectedRegionCount = 5;

            var nodesToAllocate = new List <NavNode>();

            var newNode = new NavNode();

            for (int j = 0; j < expectedRegionCount; j++)
            {
                for (int i = 0; i < singleNodes; i++)
                {
                    nodesToAllocate.Add(newNode);
                }
            }

            Assert.AreEqual(1, NavRegionGenerationFunctions.GenerateNavRegionsFromNodes(nodesToAllocate, singleNodes).Count);
        }
Beispiel #3
0
        private void OnGUI()
        {
            GUILayout.Label("Nav Settings", EditorStyles.boldLabel);
            filePath       = EditorGUILayout.TextField("File Path", filePath);
            fileName       = EditorGUILayout.TextField("File Name", fileName);
            tilesPerRegion = EditorGUILayout.IntField("Tiles Per Region", tilesPerRegion);

            GUILayout.Label("Operations", EditorStyles.boldLabel);
            if (GUILayout.Button("Build Tilemap Nav"))
            {
                var returnedNodes   = NavGenerationFunctions.GenerateNavDataForCurrentScene();
                var returnedRegions = NavRegionGenerationFunctions.GenerateNavRegionsFromNodes(returnedNodes, tilesPerRegion);

                var navData = CreateInstance <TilemapNavData>();
                navData.NodeData        = returnedNodes;
                navData.NavigationTable = new NavTable(returnedRegions);

                AssetDatabase.CreateAsset(navData, filePath + fileName + ".asset");
            }
        }
Beispiel #4
0
        public void GenerateNavRegionsFromNodes_DoesNotCreateRegionsAcrossUnconnectedComponents()
        {
            const int neighbourCount      = 4;
            const int singleNodes         = 30;
            const int expectedRegionCount = 5;

            var nodesToAllocate = new List <NavNode>();
            var neighbourNodes  = new List <NavNode>(neighbourCount);

            for (int j = 0; j < expectedRegionCount; j++)
            {
                for (int i = 0; i < singleNodes; i++)
                {
                    var newNode = new NavNode();

                    for (int k = 0; k < neighbourCount - 1; k++)
                    {
                        var newNeighbour = new NavNode();
                        neighbourNodes.Add(newNeighbour);
                    }

                    newNode.NeighbourRefs = neighbourNodes.ToArray();

                    nodesToAllocate.Add(newNode);

                    foreach (var neighbourNode in neighbourNodes)
                    {
                        nodesToAllocate.Add(neighbourNode);
                    }

                    neighbourNodes.Clear();
                }
            }

            Assert.AreEqual(expectedRegionCount * singleNodes, NavRegionGenerationFunctions.GenerateNavRegionsFromNodes(nodesToAllocate, singleNodes * neighbourCount).Count);
        }