Example #1
0
    public static MazeSector Generate(GridPosition Origin, int Width, int Height, EMazeAlgorithm Algorithm)
    {
        MazeSector Sector = new MazeSector(Origin, Width, Height, Algorithm);

        Sector.Generate();
        return(Sector);
    }
Example #2
0
    public void GenerateSimpleFloor(int Size, EMazeAlgorithm Algorithm)
    {
        m_Sectors.Clear();

        MazeSector Sector = MazeSector.Generate(new GridPosition(0, 0, 0), Size, Size, Algorithm);

        AddSector(Sector);
    }
Example #3
0
    private void MergeSector(MazeSector Sector)
    {
        Debug.Log("Merging Sector");

        foreach (MazeNode Node in Sector.Nodes())
        {
            // If one doesn't already exist, create a new node so that we can force it to merge (for more
            // uniform control).
            if (!m_NodeMap.ContainsKey(Node.Position))
            {
                m_NodeMap.Add(Node.Position, Node);
            }
            else
            {
                m_NodeMap[Node.Position] = m_NodeMap[Node.Position].MergeNode(Node);
            }
        }
    }
Example #4
0
 public void AddSector(MazeSector Sector)
 {
     m_Sectors.Add(Sector);
     UpdateNodeMap();
 }
Example #5
0
    public void GenerateComplexFloor(int SectorCount, int SectorSpacing)
    {
        m_Sectors.Clear();

        List <MazeSector> SectorList = new List <MazeSector>();


        // The first sector defaults to a 5x5 room so we have a consistent starting point
        int            SectorWidth  = 5;
        int            SectorHeight = 5;
        GridPosition   SectorOrigin = GridPosition.zero;
        EMazeAlgorithm Algorithm    = EMazeAlgorithm.SIMPLE;
        MazeSector     LastSector   = MazeSector.Generate(SectorOrigin, SectorWidth, SectorHeight, Algorithm);

        SectorList.Add(LastSector);

        // The rest of the sectors will be semi-randomly generated and placed towards the left or up
        // and have simple connectors for now
        GridPosition ConnectorOrigin = GridPosition.zero;
        int          ConnectorWidth  = 0;
        int          ConnectorHeight = 0;

        for (int x = 1; x < SectorCount; x++)
        {
            // Set up our parms for the next sector
            SectorWidth  = Random.Range(SectorSpacing - 10, SectorSpacing - 5);
            SectorHeight = Random.Range(SectorSpacing - 10, SectorSpacing - 5);

            if ((x % 2) == 1)
            {
                ConnectorOrigin = new GridPosition(SectorOrigin.x - Mathf.FloorToInt(SectorSpacing / 2), SectorOrigin.y, 0);
                ConnectorHeight = 3;
                ConnectorWidth  = SectorSpacing;

                SectorOrigin = new GridPosition(SectorOrigin.x - SectorSpacing, SectorOrigin.y, 0);
            }
            else
            {
                ConnectorOrigin = new GridPosition(SectorOrigin.x, SectorOrigin.y + Mathf.FloorToInt(SectorSpacing / 2), 0);
                ConnectorHeight = SectorSpacing;
                ConnectorWidth  = 3;

                SectorOrigin = new GridPosition(SectorOrigin.x, SectorOrigin.y + SectorSpacing, 0);
            }

            switch (x % 3)
            {
            case 0:
                Algorithm = EMazeAlgorithm.SIMPLE;
                break;

            case 1:
                Algorithm = EMazeAlgorithm.CELLULAR_AUTOMATA;
                break;

            case 2:
                Algorithm = EMazeAlgorithm.GROWING_TREE;
                break;
            }

            MazeSector NextSector = MazeSector.Generate(SectorOrigin, SectorWidth, SectorHeight, Algorithm);
            SectorList.Add(NextSector);

            //Add a connector between the two sectors and update our lastsector
            SectorList.Add(MazeSector.Generate(ConnectorOrigin, ConnectorWidth, ConnectorHeight, EMazeAlgorithm.SIMPLE));
            LastSector = NextSector;
        }

        AddSectors(SectorList);
    }