Пример #1
0
    // This method returns a square Sector edged in walls but otherwise open and doesn't include default exits between Sectors
    public Dictionary <GridPosition, MazeNode> CreateSimpleSector()
    {
        int WidthOffset = Mathf.FloorToInt(m_Width / 2);
        int LeftEdge    = m_Origin.x - WidthOffset;
        int RightEdge   = m_Origin.x + WidthOffset;

        int HeightOffset = Mathf.FloorToInt(m_Height / 2);
        int TopEdge      = m_Origin.y + HeightOffset;
        int BottomEdge   = m_Origin.y - HeightOffset;

        Dictionary <GridPosition, MazeNode> NodeList = new Dictionary <GridPosition, MazeNode>();

        Vector3 ExitPoint = Vector3.zero;

        for (int x = LeftEdge; x <= RightEdge; x++)
        {
            for (int y = TopEdge; y >= BottomEdge; y--)
            {
                MazeNode NewNode = new MazeNode(new GridPosition(x, y, m_Origin.z));

                if (x > LeftEdge)
                {
                    ExitPoint = new Vector3(-1, 0, 0);
                    NewNode.AddExitPoint(ExitPoint);
                }
                if (x < RightEdge)
                {
                    ExitPoint = new Vector3(1, 0, 0);
                    NewNode.AddExitPoint(ExitPoint);
                }

                if (y < TopEdge)
                {
                    ExitPoint = new Vector3(0, 1, 0);
                    NewNode.AddExitPoint(ExitPoint);
                }
                if (y > BottomEdge)
                {
                    ExitPoint = new Vector3(0, -1, 0);
                    NewNode.AddExitPoint(ExitPoint);
                }

                GridPosition Key = new GridPosition(x, y, 0);
                NodeList.Add(Key, NewNode);
            }
        }

        return(NodeList);
    }
Пример #2
0
    private void ConnectNodes(MazeNode Node1, MazeNode Node2)
    {
        if (Node1.Position.x > Node2.Position.x)
        {
            Node1.AddExitPoint(new GridPosition(-1, 0, 0));
            Node2.AddExitPoint(new GridPosition(1, 0, 0));
        }
        else if (Node1.Position.x < Node2.Position.x)
        {
            Node1.AddExitPoint(new GridPosition(1, 0, 0));
            Node2.AddExitPoint(new GridPosition(-1, 0, 0));
        }

        if (Node1.Position.y > Node2.Position.y)
        {
            Node1.AddExitPoint(new GridPosition(0, -1, 0));
            Node2.AddExitPoint(new GridPosition(0, 1, 0));
        }
        else if (Node1.Position.y < Node2.Position.y)
        {
            Node1.AddExitPoint(new GridPosition(0, 1, 0));
            Node2.AddExitPoint(new GridPosition(0, -1, 0));
        }
    }