Example #1
0
    public override void generate()
    {
        clearTo(AsciiMapSymbols.WALKABLE); // SET IT ALL TO (WALKABLE) TO START

        int numRooms = Mathf.Max(width / 10, height/10);
        int maxRoomSize = numRooms - 2;
        int minRoomSize = 3;

        maxRoomSize = Mathf.Clamp(maxRoomSize, minRoomSize, maxRoomSize);

        PseudoLinearLevel psl =
                new PseudoLinearLevel((uint)width,(uint)height,(uint)numRooms,
                                        (uint)minRoomSize,(uint)maxRoomSize,
                                        (uint)minRoomSize,(uint)maxRoomSize,
                                        1,1,r,4); //This line isn't really useful but has to be here

        createStartingDungeonMap(psl);

        RandomFill(-1, AsciiMapSymbols.WALKABLE, r.getIntInRange(15,25));

        OutlineMap(BASELAYER,AsciiMapSymbols.MOUNTAIN); // Outline the map with a blocking or warping tile

        placeTreasure(r.getIntInRange(1,numRooms/2), 4, psl); // UPDATE THIS TO TAKE ADVANTAGE OF THE PSL INFORMATION

        placeExitArea(r.getIntInRange(4,6)); //The start is a safe zone.

        //SET THE COLOR FOR THE ASCII TEXT THING
        UColor.HSL theMainColor = new UColor.HSL((float)r.getRandom(),0.7f,0.3f); //Choose a main color
        MainColor = theMainColor.toColor();

        md = new AsciiMapSymbols(LevelData.TYPE_CAVE, MainColor);

        base.generate();
    }
Example #2
0
    private void createStartingCaveMap(PseudoLinearLevel psl)
    {
        for(int yy=0; yy < height; yy++)
        {
            for(int xx=0; xx < width; xx++)
            {
                int placeType = AsciiMapSymbols.WALKABLE;
                if(psl.bitMap[xx,yy] == 0)
                {
                    placeType = AsciiMapSymbols.MOUNTAIN;
                }

                placeTile(xx,yy, placeType, BASELAYER);
            }//for
        }//for
    }
Example #3
0
    //Places 3D Tiles
    void place3DFloorTilesTest(PseudoLinearLevel psl)
    {
        //TEMP PLAYER PLACING STUFF.
        bool placedPlayer = false;

        for (int z = 0; z < psl.height; z++)
        {
            for (int x = 0; x < psl.width; x++)
            {
                Transform tileToPlace = null;
                double _rot = 0.0f;
                string objname = "";
                //0 is dead space, don't do anything for it.

                if(psl.bitMap[x,z] == 0)
                {
                    continue;
                }//if

                //Store the placement spot (the grid is 5mx5m

                Vector3 spot = new Vector3(x*-5.0f, -1.0f, z*5.0f);
                //1 is empty floor

                if(psl.bitMap[x,z] ==1)
                {
                    if(!placedPlayer)
                    {
                        Vector3 playerSpot = new Vector3(spot.x-2.5f, spot.y+1.0f, spot.z + 2.5f);
                        player.transform.position = playerSpot;
                        placedPlayer = true;
                    }
                    tileToPlace = floors[r.getIntInRange(0,floors.Length-1)]; // FLOOR SPOT
                    objname += "floor_";

                    if(r.getBoolean()) // 50% chance of rotating it
                    {
                        if(r.getBoolean()) // 50% it goes clockwise
                        {
                            _rot=Mathf.PI/2;
                        }
                        else
                        {
                            _rot=0-Mathf.PI/2;
                        }
                    }
                }//if
                else if(psl.bitMap[x,z] == 2) // U SHAPE
                {
                    tileToPlace = UShapedWalls[r.getIntInRange(0,UShapedWalls.Length-1)];
                }
                else if(psl.bitMap[x,z] == 3) // U SHAPE
                {
                    tileToPlace = UShapedWalls[r.getIntInRange(0,UShapedWalls.Length-1)];
                    _rot=Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 5) // U SHAPE
                {
                    tileToPlace = UShapedWalls[r.getIntInRange(0,UShapedWalls.Length-1)];
                    _rot=Mathf.PI;
                }
                else if(psl.bitMap[x,z] == 9) // U SHAPE
                {
                    tileToPlace = UShapedWalls[r.getIntInRange(0,UShapedWalls.Length-1)];
                    _rot=0-Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 6) // EQUAL SIGN HALLWAY
                {
                    tileToPlace = SmallHalls[r.getIntInRange(0,SmallHalls.Length-1)];
                    //rot=Mathf.PI;
                }
                else if(psl.bitMap[x,z] == 11) //EQUAL SIGN HALLWAY
                {
                    tileToPlace = SmallHalls[r.getIntInRange(0,SmallHalls.Length-1)];
                }
                else if(psl.bitMap[x,z] == 4) // INNER CORNER
                {
                    tileToPlace = InnerCorners[r.getIntInRange(0,InnerCorners.Length-1)];
                }
                else if(psl.bitMap[x,z] == 7) // INNER CORNER
                {
                    tileToPlace = InnerCorners[r.getIntInRange(0,InnerCorners.Length-1)];
                    _rot= Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 10) // INNER CORNER
                {
                    tileToPlace = InnerCorners[r.getIntInRange(0,InnerCorners.Length-1)];
                    _rot=0-Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 13) // INNER CORNER
                {
                    tileToPlace = InnerCorners[r.getIntInRange(0,InnerCorners.Length-1)];
                    _rot=Mathf.PI;
                }
                else if(psl.bitMap[x,z] == 8) // JUST A WALL
                {
                    tileToPlace = SingleWalls[r.getIntInRange(0,SingleWalls.Length-1)];
                    _rot=Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 12) // JUST A WALL
                {
                    tileToPlace = SingleWalls[r.getIntInRange(0,SingleWalls.Length-1)];
                    //_rot=0-Mathf.PI;
                }
                else if(psl.bitMap[x,z] == 14) // JUST A WALL
                {
                    tileToPlace = SingleWalls[r.getIntInRange(0,SingleWalls.Length-1)];
                    _rot=0-Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 15) // JUST A WALL
                {
                    tileToPlace = SingleWalls[r.getIntInRange(0,SingleWalls.Length-1)];
                    _rot=0-Mathf.PI;
                }
                else if(psl.bitMap[x,z] == 16) // CORNER WALL
                {
                    tileToPlace = OuterCornerWalls[r.getIntInRange(0,OuterCornerWalls.Length-1)];
                }
                else if(psl.bitMap[x,z] == 17) // CORNER WALL
                {
                    tileToPlace = OuterCornerWalls[r.getIntInRange(0,OuterCornerWalls.Length-1)];
                    _rot=Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 18) // CORNER WALL
                {
                    tileToPlace = OuterCornerWalls[r.getIntInRange(0,OuterCornerWalls.Length-1)];
                    _rot=Mathf.PI;
                }
                else if(psl.bitMap[x,z] == 19)// CORNER WALL
                {
                    tileToPlace = OuterCornerWalls[r.getIntInRange(0,OuterCornerWalls.Length-1)];
                    _rot=0-Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 20) // BIG INNER CORNER
                {
                    tileToPlace = LargeInnerCorners[r.getIntInRange(0,LargeInnerCorners.Length-1)];
                }
                else if(psl.bitMap[x,z] == 21) // BIG INNER CORNER
                {
                    tileToPlace = LargeInnerCorners[r.getIntInRange(0,LargeInnerCorners.Length-1)];
                    _rot=Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 22) // BIG INNER CORNER
                {
                    tileToPlace = LargeInnerCorners[r.getIntInRange(0,LargeInnerCorners.Length-1)];
                    _rot=Mathf.PI;
                }
                else if(psl.bitMap[x,z] == 23) // BIG INNER CORNER
                {
                    tileToPlace = LargeInnerCorners[r.getIntInRange(0,LargeInnerCorners.Length-1)];
                    _rot=0-Mathf.PI/2;
                }
                else if(psl.bitMap[x,z] == 24) // ENCLOSED
                {
                    tileToPlace = EnclosedWalls[r.getIntInRange(1,EnclosedWalls.Length-1)];
                }
                else
                {
                    //LETS JUST PLACE CUBE WALLS TO START.
                    //tileToPlace = walls[psl.bitMap[x,z]+1];
                    tileToPlace = EnclosedWalls[0];
                    spot.y+=2.5f;
                }//if

                Transform obj = (Transform)Instantiate(tileToPlace,spot , Quaternion.identity);
                obj.gameObject.layer = this.gameObject.layer;

                if(objname == "")
                    objname = "wall_";

                obj.name = objname + psl.bitMap[x,z];
                //obj.transform.RotateAround(Vector3.up, (float)_rot);
                obj.transform.rotation = Quaternion.AngleAxis((float)_rot, Vector3.up);
            }//for
        }//for
    }
Example #4
0
    void Start()
    {
        long seed = System.DateTime.Now.Ticks;
        r = new RandomSeed(seed);
        player = GameObject.Find("Player");
        //tiles = new Transform[1];

        PseudoLinearLevel psl =
                new PseudoLinearLevel((uint)numberOfTilesWide,(uint)numberOfTilesHigh,(uint)numberOfLG_RoomsToSpawn,
                                        (uint)minimumLG_RoomWidthInTiles,(uint)maximumLG_RoomWidthInTiles,
                                        (uint)minimumLG_RoomHeightInTiles,(uint)maximumLG_RoomHeightInTiles,
                                        1,1,r,4); //This line isn't really useful but has to be here

        string baseMap = psl.toReadableMap();
        print("SEED:" + seed + "\n" +"--CLICK HERE FOR PRINTED ASCII MAP--\n"+ baseMap);

        place3DFloorTilesTest(psl);
        placeFurnitureTest(psl);
        placeEnemyTest(psl);
    }
Example #5
0
    void placeFurnitureTest(PseudoLinearLevel psl)
    {
        //BASIC LG_Room FURNITURE PLACEMENT (IN THE MIDDLE OF THE LG_Room, RANDOMLY ROTATED
        foreach( LG_Room theRoom in psl.rooms)
        {
            Vector3 spot = new Vector3(theRoom.center.x*-5.0f, -1, theRoom.center.y*5.0f);
            //LOOP THROUGH AND PLACE FURNITURE NEAR THE CENTER OF EACH ONE WITH RANDOM ROTATIONS AND CRAP
            Transform tileToPlace = RoomFurniture[r.getIntInRange(0,RoomFurniture.Length-1)];
            Transform furniture = (Transform)Instantiate(tileToPlace,spot , Quaternion.identity);
            furniture.gameObject.layer = this.gameObject.layer;

            furniture.name = "furniture_" + furniture.name;
            float _rot = 0.0f;
            if(r.getBoolean()) // 50% chance of rotating it
            {
                if(r.getBoolean()) // 50% it goes clockwise
                {
                    _rot=Mathf.PI/2;
                }//if
                else
                {
                    _rot=0-Mathf.PI/2;
                }//else
            }//if
            furniture.transform.Rotate(Vector3.up, (float)_rot);
        }//foreach
    }
Example #6
0
    // Enemies can be optional, but print a message
    void placeEnemyTest(PseudoLinearLevel psl)
    {
        //BASIC LG_Room FURNITURE PLACEMENT (IN THE MIDDLE OF THE LG_Room, RANDOMLY ROTATED
        if(Enemies.Length <=0)
        {
            //No enemies specified in dungeon maker. This is just a notification and is not an error.
            return;
        }

        foreach(LG_Room theRoom in psl.rooms)
        {
            Vector3 spot = new Vector3((theRoom.center.x+1)*-5.0f, -1, (theRoom.center.y+1)*5.0f);
            //LOOP THROUGH AND PLACE FURNITURE NEAR THE CENTER OF EACH ONE WITH RANDOM ROTATIONS AND CRAP
            Transform enemyToPlace = Enemies[Mathf.Min(0,r.getIntInRange(0,Enemies.Length-1))];
            Transform enemy = (Transform)Instantiate(enemyToPlace,spot , Quaternion.identity);
            enemy.gameObject.layer = this.gameObject.layer;

            enemy.name = "enemy_" + enemy.name;
        }//foreach
    }
Example #7
0
    private void createStartingDungeonMap(PseudoLinearLevel psl)
    {
        for(int yy=0; yy < height; yy++)
        {
            for(int xx=0; xx < width; xx++)
            {
                int tileCode = AsciiMapSymbols.WALKABLE;
                if(psl.bitMap[xx,yy] == 0)
                {
                    tileCode = AsciiMapSymbols.MOUNTAIN;
                }

                placeTile(xx,yy, tileCode, -1);
            }//for
        }//for
    }
Example #8
0
    public void placeTreasure(int numberOfTreasures, int iconCode, PseudoLinearLevel psl)
    {
        Vector2 endPoint = psl.roomTree.allPoints[psl.numRooms-1];
        placeATreasure((int)endPoint.x, (int)endPoint.y, iconCode);

        numberOfTreasures = Mathf.Clamp(numberOfTreasures,0, psl.numRooms); // make sure it's always valid

        for(int i=2; i <= numberOfTreasures; i++)
        {
            Vector2 spot = psl.roomTree.allPoints[psl.numRooms-i];
            placeATreasure((int)spot.x, (int)spot.y, iconCode);
        }//foreach
    }