Exemple #1
0
        public NavigationService(TilemapNavData navData)
        {
            NavRegionGenerationFunctions.InitialiseNavRegionsFromData(navData);

            _navigationTable = navData.NavigationTable;
            _navigationTable.Initialise();
        }
Exemple #2
0
        public void InitialiseNavRegionsFromData_LoadsExpectedNeighbourRefsForRawData()
        {
            var nodes = new List <NavNode> {
                new NavNode {
                    Neighbours = new[] { 1, 2 }
                }, new NavNode {
                    Neighbours = new[] { 0, 2 }
                }, new NavNode {
                    Neighbours = new[] { 0, 1 }
                }
            };

            var nodeListingNeighbours = new List <NavNode> {
                new NavNode {
                    Neighbours = new[] { 0, 2 }
                }
            };

            var regions = new List <NavRegion> {
                new NavRegion(nodeListingNeighbours.ToArray())
            };

            var data = ScriptableObject.CreateInstance <TilemapNavData>();

            data.NodeData        = nodes;
            data.NavigationTable = new NavTable(regions);

            NavRegionGenerationFunctions.InitialiseNavRegionsFromData(data);

            foreach (var node in nodes)
            {
                Assert.AreEqual(2, node.NeighbourRefs.Length);
            }
        }
Exemple #3
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);
        }
Exemple #4
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);
        }
Exemple #5
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");
            }
        }
Exemple #6
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);
        }