Пример #1
0
    public static FloorInstance PlaceFloor(RoomInstance roomPrefab, FloorSettings floorSettings)
    {
        FloorInstance instance = new GameObject().AddComponent <FloorInstance>();

        instance.gameObject.name = "Floor";
        instance.m_FloorSettings = floorSettings;
        instance.m_RoomPrefab    = roomPrefab;

        List <PlacedRoomInfo> roomInfos = new List <PlacedRoomInfo>();

        int roomCount = Random.Range(floorSettings.m_MinRoomCount, floorSettings.m_MaxRoomCount);

        for (int i = 0; i < roomCount; ++i)
        {
            roomInfos.Add(instance.NewRoomInfo(roomInfos, roomCount));
        }


        foreach (PlacedRoomInfo info in roomInfos)
        {
            instance.CreateRoom(info);
        }

        return(instance);
    }
Пример #2
0
    public static RoomInstance PlaceRoom(RoomInstance prefab, bool isBossRoom, FloorSettings floorSettings, RoomSettings roomSettings, Vector3Int location, Vector3Int extents, RoomConnections connection)
    {
        RoomInstance instance = Instantiate(prefab, location, Quaternion.identity);

        instance.m_Connections   = connection;
        instance.m_IsBossRoom    = isBossRoom;
        instance.m_RoomSettings  = roomSettings;
        instance.m_FloorSettings = floorSettings;

        RoomGeneratorHelper generator = new RoomGeneratorHelper(roomSettings, extents, connection);

        instance.SetupRoom(generator, extents);
        return(instance);
    }
Пример #3
0
    public void NextLevel()
    {
        m_FloorIndex++;
        Debug.Log("Level " + m_FloorIndex);

        if (m_CurrentFloor != null)
        {
            m_CurrentFloor.Cleanup();
        }

        FloorSettings floorSettings = m_Floors[Mathf.Min(m_FloorIndex, m_Floors.Length - 1)];

        m_CurrentFloor = FloorInstance.PlaceFloor(m_RoomPrefab, floorSettings);

        SpawnPlayer();

        StageNamePopup.Main.DisplayText(floorSettings.m_StageName, m_FloorIndex);
    }
Пример #4
0
 public void LoadAlgorithmSettings()
 {
     FloorSettings.Clear();
     TileLayers.Clear();
     TileData.Clear();
     Items.Clear();
     Npcs.Clear();
     Rooms.Clear();
     if (Algorithm > -1)
     {
         FloorAlgorithm settingsGuide = GameData.FloorAlgorithmDex[Algorithm];
         for (int i = 0; i < settingsGuide.FloorSettings.Count; i++)
         {
             FloorSettings.Add(settingsGuide.FloorSettings[i].Item1, 0);
         }
         for (int i = 0; i < settingsGuide.LayerSettings.Count; i++)
         {
             TileLayers.Add(settingsGuide.LayerSettings[i], new List <Maps.TileAnim>());
         }
         for (int i = 0; i < settingsGuide.TileSettings.Count; i++)
         {
             TileData.Add(settingsGuide.TileSettings[i], new List <Maps.TileData>());
         }
         for (int i = 0; i < settingsGuide.ItemGroups.Count; i++)
         {
             Items.Add(settingsGuide.ItemGroups[i], new List <Tuple <ItemPreset, int> >());
         }
         for (int i = 0; i < settingsGuide.NpcGroups.Count; i++)
         {
             Npcs.Add(settingsGuide.NpcGroups[i], new List <Tuple <NpcPreset, int> >());
         }
         for (int i = 0; i < settingsGuide.RoomGroups.Count; i++)
         {
             Rooms.Add(settingsGuide.RoomGroups[i], new List <Tuple <int, int> >());
         }
     }
 }
Пример #5
0
        public void Load(int rdungeonNum, int floorNum)
        {
            using (XmlReader reader = XmlReader.Create(Paths.DataPath + "RDungeon\\" + rdungeonNum.ToString() + "\\" + floorNum + ".xml")) {
                while (reader.Read())
                {
                    if (reader.IsStartElement())
                    {
                        switch (reader.Name)
                        {
                        case "Algorithm": {
                            Algorithm = reader.ReadString().ToInt();
                            LoadAlgorithmSettings();
                            break;
                        }

                        case "FloorSettings": {
                            XmlReader settingsReader = reader.ReadSubtree();
                            while (settingsReader.Read())
                            {
                                if (settingsReader.IsStartElement() && FloorSettings.ContainsKey(settingsReader.Name))
                                {
                                    FloorSettings[settingsReader.Name] = settingsReader.ReadString().ToInt();
                                }
                            }
                            break;
                        }

                        case "TileLayers": {
                            XmlReader settingsReader = reader.ReadSubtree();
                            while (settingsReader.Read())
                            {
                                if (settingsReader.IsStartElement() && FloorSettings.ContainsKey(settingsReader.Name))
                                {
                                    string settingName = settingsReader.Name;
                                    if (settingsReader.Read())
                                    {
                                        List <Maps.TileAnim> layerList = new List <Maps.TileAnim>();
                                        while (settingsReader.Read())
                                        {
                                            int tileNumX  = settingsReader.ReadElementString("TextureX").ToInt();
                                            int tileNumY  = settingsReader.ReadElementString("TextureY").ToInt();
                                            int tileSheet = settingsReader.ReadElementString("Sheet").ToInt();
                                            layerList.Add(new Maps.TileAnim(new Maps.Loc2D(tileNumX, tileNumY), tileSheet));
                                        }
                                        TileLayers[settingName] = layerList;
                                    }
                                }
                            }
                            break;
                        }

                        case "TileData": {
                            XmlReader settingsReader = reader.ReadSubtree();
                            while (settingsReader.Read())
                            {
                                if (settingsReader.IsStartElement() && FloorSettings.ContainsKey(settingsReader.Name))
                                {
                                    string settingName = settingsReader.Name;
                                    if (settingsReader.Read())
                                    {
                                        List <Maps.TileData> tileDataList = new List <Maps.TileData>();
                                        while (settingsReader.Read())
                                        {
                                            Enums.TileType type       = settingsReader.ReadString().ToEnum <Enums.TileType>();
                                            int            data1      = settingsReader.ReadElementString("Data1").ToInt();
                                            int            data2      = settingsReader.ReadElementString("Data2").ToInt();
                                            int            data3      = settingsReader.ReadElementString("Data3").ToInt();
                                            string         tileString = settingsReader.ReadElementString("String");
                                            tileDataList.Add(new Maps.TileData(type, data1, data2, data3, tileString, "", ""));
                                        }
                                        TileData[settingName] = tileDataList;
                                    }
                                }
                            }
                            break;
                        }

                        case "Weather": {
                            FloorWeather.Add(reader.ReadString().ToEnum <Enums.Weather>(), reader.ReadString().ToInt());
                            break;
                        }

                        case "Darkness": {
                            Darkness = reader.ReadString().ToInt();
                            break;
                        }

                        case "Music": {
                            Music = reader.ReadString();
                            break;
                        }

                        case "NpcSpawnTime": {
                            NpcSpawnTime = reader.ReadString().ToInt();
                            break;
                        }

                        case "NpcMin": {
                            NpcMin = reader.ReadString().ToInt();
                            break;
                        }

                        case "NpcMax": {
                            NpcMax = reader.ReadString().ToInt();
                            break;
                        }

                        case "Items": {
                            XmlReader settingsReader = reader.ReadSubtree();
                            while (settingsReader.Read())
                            {
                                if (settingsReader.IsStartElement())
                                {
                                    string settingName = settingsReader.Name;
                                    settingsReader.Read();
                                    if (settingsReader.Read())
                                    {
                                        List <Tuple <ItemPreset, int> > itemList = new List <Tuple <ItemPreset, int> >();
                                        while (settingsReader.Read())
                                        {
                                            if (settingsReader.IsStartElement() && settingsReader.Name == "Element")
                                            {
                                                settingsReader.Read();
                                                ItemPreset preset = new ItemPreset();
                                                preset.ItemNum   = settingsReader.ReadElementString("ItemNum").ToInt();
                                                preset.MinAmount = settingsReader.ReadElementString("MinAmount").ToInt();
                                                preset.MaxAmount = settingsReader.ReadElementString("MaxAmount").ToInt();
                                                int appearanceRate = settingsReader.ReadElementString("AppearanceRate").ToInt();
                                                preset.StickyRate = settingsReader.ReadElementString("StickyRate").ToInt();
                                                preset.Tag        = settingsReader.ReadElementString("Tag");
                                                preset.Hidden     = settingsReader.ReadElementString("Hidden").ToBool();
                                                preset.OnGround   = settingsReader.ReadElementString("Ground").ToBool();
                                                preset.OnWater    = settingsReader.ReadElementString("Water").ToBool();
                                                preset.OnWall     = settingsReader.ReadElementString("Wall").ToBool();
                                                itemList.Add(new Tuple <ItemPreset, int>(preset, appearanceRate));
                                            }
                                        }
                                        Items[settingName] = itemList;
                                    }
                                }
                            }
                            break;
                        }

                        case "Npcs": {
                            XmlReader settingsReader = reader.ReadSubtree();
                            while (settingsReader.Read())
                            {
                                if (settingsReader.IsStartElement())
                                {
                                    string settingName = settingsReader.Name;
                                    settingsReader.Read();
                                    if (settingsReader.Read())
                                    {
                                        List <Tuple <NpcPreset, int> > npcList = new List <Tuple <NpcPreset, int> >();
                                        while (settingsReader.Read())
                                        {
                                            if (settingsReader.IsStartElement() && settingsReader.Name == "Element")
                                            {
                                                settingsReader.Read();
                                                NpcPreset preset = new NpcPreset();
                                                preset.NpcNum   = settingsReader.ReadElementString("NpcNum").ToInt();
                                                preset.SpawnX   = settingsReader.ReadElementString("SpawnX").ToInt();
                                                preset.SpawnY   = settingsReader.ReadElementString("SpawnY").ToInt();
                                                preset.MinLevel = settingsReader.ReadElementString("MinLevel").ToInt();
                                                preset.MaxLevel = settingsReader.ReadElementString("MaxLevel").ToInt();
                                                int appearanceRate = settingsReader.ReadElementString("AppearanceRate").ToInt();
                                                npcList.Add(new Tuple <NpcPreset, int>(preset, appearanceRate));
                                            }
                                        }
                                        Npcs[settingName] = npcList;
                                    }
                                }
                            }
                            break;
                        }

                        case "Rooms": {
                            XmlReader settingsReader = reader.ReadSubtree();
                            while (settingsReader.Read())
                            {
                                if (settingsReader.IsStartElement())
                                {
                                    string settingName = settingsReader.Name;
                                    settingsReader.Read();
                                    if (settingsReader.Read())
                                    {
                                        List <Tuple <int, int> > roomList = new List <Tuple <int, int> >();
                                        while (settingsReader.Read())
                                        {
                                            if (settingsReader.IsStartElement() && settingsReader.Name == "Element")
                                            {
                                                settingsReader.Read();
                                                int num            = settingsReader.ReadElementString("RoomNum").ToInt();
                                                int appearanceRate = settingsReader.ReadElementString("AppearanceRate").ToInt();
                                                roomList.Add(new Tuple <int, int>(num, appearanceRate));
                                            }
                                        }
                                        Rooms[settingName] = roomList;
                                    }
                                }
                            }
                            break;
                        }
                        }
                    }
                }
            }
        }
Пример #6
0
        public void Load(int algorithmNum)
        {
            Num = algorithmNum;
            using (XmlReader reader = XmlReader.Create(Paths.DataPath + "FloorAlgorithm\\" + algorithmNum + ".xml")) {
                while (reader.Read())
                {
                    if (reader.IsStartElement())
                    {
                        switch (reader.Name)
                        {
                        case "Name": {
                            Name = reader.ReadString();
                            break;
                        }

                        case "FloorSetting": {
                            if (reader.Read())
                            {
                                string settingName = reader.ReadElementString("FloorInt");
                                bool   settingBool = reader.ReadElementString("FloorIntBool").ToBool();
                                FloorSettings.Add(new Tuple <string, bool>(settingName, settingBool));
                            }
                        }
                        break;

                        case "LayerSetting": {
                            LayerSettings.Add(reader.ReadString());
                        }
                        break;

                        case "TileSetting": {
                            TileSettings.Add(reader.ReadString());
                        }
                        break;

                        case "FoliageSetting": {
                            FoliageSettings.Add(reader.ReadString());
                        }
                        break;

                        case "CoverSetting": {
                            CoverSettings.Add(reader.ReadString());
                        }
                        break;

                        case "ItemGroup": {
                            ItemGroups.Add(reader.ReadString());
                        }
                        break;

                        case "NpcGroup": {
                            NpcGroups.Add(reader.ReadString());
                        }
                        break;

                        case "RoomGroup": {
                            RoomGroups.Add(reader.ReadString());
                        }
                        break;
                        }
                    }
                }
            }
        }
Пример #7
0
 private void CreateFloor(FloorSettings floor)
 {
     m_CurrentFloor = FloorInstance.PlaceFloor(m_RoomPrefab, floor);
 }