Example #1
0
    public void GenerateMap()
    {
        string floorType = "basement";

        float[] floorChance = new float[5] {
            20f, 40f, 60f, 80f, 100f
        };
        Coords start = new Coords(), end = new Coords(), stairs = new Coords();
        int    id = 1;

        //critical room locations
        start.Set(Random.Range(0, distanceX), Random.Range(0, distanceZ), 1);
        end.Set(Random.Range(0, distanceX), Random.Range(0, distanceZ), floors - 1);
        do
        {
            stairs.Set(Random.Range(0, distanceX), Random.Range(0, distanceZ));
        } while (stairs.CompairIgnoreFloor(start) || stairs.CompairIgnoreFloor(end));

        //room generation
        for (int f = 0; f < floors; f++)
        {
            for (int x = 0; x < distanceX; x++)
            {
                for (int z = 0; z < distanceZ; z++)
                {
                    Coords coords       = new Coords(x, z, f);
                    bool   criticalRoom = false;
                    if (start.Compair(x, z, f))
                    {
                        criticalRoom = true;
                    }
                    else if (end.Compair(x, z, f))
                    {
                        criticalRoom = true;
                    }
                    else if (stairs.Compair(x, z))
                    {
                        criticalRoom = true;
                    }

                    if (criticalRoom)
                    {
                        if (start.Compair(x, z, f))
                        {
                            RoomDetails(id, "entrance porch", coords, 4);
                            visualMap[x, z, f] = "Ep ";
                        }                         //start room
                        else if (end.Compair(x, z, f))
                        {
                            RoomDetails(id, "attic", coords, 10);
                            visualMap[x, z, f] = "At ";
                        }                         //end room
                        else if (stairs.Compair(x, z))
                        {
                            RoomDetails(id, "stairs", coords, 13);
                            visualMap[x, z, f] = "Sr ";
                        }
                    }                     //make critical rooms
                    else
                    {
                        float roll = Random.Range(0f, 100f);
                        switch (floorType)
                        {
                        case "basement":
                            if (roll <= floorChance[0])
                            {
                                RoomDetails(id, "cellar", coords, 1);
                                visualMap[x, z, f] = "Cr ";
                            }
                            else if (roll > floorChance[0] && roll <= floorChance[1])
                            {
                                RoomDetails(id, "ritual room", coords, 2);
                                visualMap[x, z, f] = "Rr ";
                            }
                            else if (roll > floorChance[1] && roll <= floorChance[2])
                            {
                                RoomDetails(id, "living room", coords, 3);
                                visualMap[x, z, f] = "Lr ";
                            }
                            else if (roll > floorChance[2] && roll <= floorChance[3])
                            {
                                RoomDetails(id, "side corridor", coords, 11);
                                visualMap[x, z, f] = "Sc ";
                            }
                            else if (roll > floorChance[3] && roll <= floorChance[4])
                            {
                                RoomDetails(id, "bedroom", coords, 12);
                                visualMap[x, z, f] = "Br ";
                            }
                            break;

                        case "main":
                            if (roll <= floorChance[0])
                            {
                                RoomDetails(id, "living room", coords, 3);
                                visualMap[x, z, f] = "Lr ";
                            }
                            else if (roll > floorChance[0] && roll <= floorChance[1])
                            {
                                RoomDetails(id, "main hall", coords, 5);
                                visualMap[x, z, f] = "Mh ";
                            }
                            else if (roll > floorChance[1] && roll <= floorChance[2])
                            {
                                RoomDetails(id, "kitchen", coords, 6);
                                visualMap[x, z, f] = "Kt ";
                            }
                            else if (roll > floorChance[2] && roll <= floorChance[3])
                            {
                                RoomDetails(id, "parlor", coords, 7);
                                visualMap[x, z, f] = "Pl ";
                            }
                            else if (roll > floorChance[3] && roll <= floorChance[4])
                            {
                                RoomDetails(id, "side corridor", coords, 11);
                                visualMap[x, z, f] = "Sc ";
                            }
                            else if (roll > floorChance[4] && roll <= floorChance[5])
                            {
                                RoomDetails(id, "bedroom", coords, 12);
                                visualMap[x, z, f] = "Br ";
                            }
                            break;

                        case "upper":
                            if (roll <= floorChance[0])
                            {
                                RoomDetails(id, "parlor", coords, 7);
                                visualMap[x, z, f] = "Pl ";
                            }
                            else if (roll > floorChance[0] && roll <= floorChance[1])
                            {
                                RoomDetails(id, "balcony", coords, 8);
                                visualMap[x, z, f] = "Bl ";
                            }
                            else if (roll > floorChance[1] && roll <= floorChance[2])
                            {
                                RoomDetails(id, "study", coords, 9);
                                visualMap[x, z, f] = "St ";
                            }
                            else if (roll > floorChance[2] && roll <= floorChance[3])
                            {
                                RoomDetails(id, "side corridor", coords, 11);
                                visualMap[x, z, f] = "Sc ";
                            }
                            else if (roll > floorChance[3] && roll <= floorChance[4])
                            {
                                RoomDetails(id, "bedroom", coords, 12);
                                visualMap[x, z, f] = "Br ";
                            }
                            break;
                        }
                    }                     //make filler rooms

                    id++;
                    map[x, z, f] = roomGen;
                }
            }

            if (floorType == "basement")
            {
                floorType   = "main";
                floorChance = new float[6] {
                    20f, 40f, 60f, 80f, 90f, 100f
                };
            }
            else if (floorType == "main")
            {
                floorType   = "upper";
                floorChance = new float[5] {
                    20f, 40f, 60f, 80f, 100f
                };
            }
        }
    }