示例#1
0
        private static NodeWalkable GetPlayerStartNode(Node[] gridNodes, int gridSize)
        {
            Vector3Int playerStartNodeCoordinates = new Vector3Int(gridSize / 2, gridSize / 2, 0);
            int        playerStartNodeIndex       = WorldGridUtil.ConvertNodeCoordinatesToIndex(playerStartNodeCoordinates, gridSize);

            NodeWalkable playerStartNode = gridNodes[playerStartNodeIndex] as NodeWalkable;

            Debug.Assert(playerStartNode != null, "Invalid player start node!");

            return(playerStartNode);
        }
示例#2
0
        private Node TryGetNodeAtCoordinates(Vector3Int nodeCoordinates)
        {
            Node node = default;

            if (CheckIfNodeCoordinatesAreValid(nodeCoordinates) == true)
            {
                int nodeIndex = WorldGridUtil.ConvertNodeCoordinatesToIndex(nodeCoordinates, GridSize);
                node = m_GridNodes[nodeIndex];
            }

            return(node);
        }
示例#3
0
        public override WorldGridModel GenerateWorldGridModel(Transform gridRoot)
        {
            int nodeCount = m_GridSize * m_GridSize * m_GridSize;

            Node[] gridNodes = new Node[nodeCount];

            for (int i = 0; i < nodeCount; ++i)
            {
                Vector3Int nodeCoordinates = WorldGridUtil.ConvertNodeIndexToCoordinates(i, m_GridSize);
                gridNodes[i] = CreateGridNode(nodeCoordinates, m_GridSize, gridRoot);
            }

            NodeWalkable playerStartNode = GetPlayerStartNode(gridNodes, m_GridSize);

            if (m_ObstacleDensity > 0)
            {
                AddObstacles(gridNodes, playerStartNode, m_ObstacleDensity, m_ObstaclePattern, m_MinimumPlayerStartClearance);
            }

            WorldGridModel gridModel = new WorldGridModel(gridNodes, m_GridSize, playerStartNode);

            return(gridModel);
        }