Esempio n. 1
0
 public SaveGame(DungeonParameters dungeonParameters, GameObject player,
                 GameObject itemsParent, GameObject breadcrumbsParent,
                 int keysCollected, float timeElapsed)
 {
     DungeonParameters = dungeonParameters;
     PlayerPosition    = player.transform.position;
     PlayerRotation    = player.transform.rotation;
     KeysCollected     = keysCollected;
     TimeElapsed       = timeElapsed;
     Items             = new List <ItemSave>();
     Breadcrumbs       = new List <ItemSave>();
     foreach (Transform child in itemsParent.transform)
     {
         string name = child.name;
         if (name.EndsWith(SaveGame.CloneSuffix))
         {
             name = name.Remove(name.Length - SaveGame.CloneSuffix.Length);
         }
         Items.Add(new ItemSave(name, child.position, child.rotation, child.localScale));
     }
     foreach (Transform child in breadcrumbsParent.transform)
     {
         Breadcrumbs.Add(new ItemSave(
                             BreadcrumbNameToChar[child.name], child.position, child.rotation, child.localScale));
     }
 }
 public RoomDungeon(DungeonParameters parameters, DungeonTile[,] tiles, int[,] regions, List <Room> rooms)
 {
     SetDungeonParameters(parameters);
     this.tiles   = tiles;
     this.regions = regions;
     this.rooms   = rooms;
 }
Esempio n. 3
0
        public ActionResult Index(string theme, string rockColor, string floorColor)
        {
            var config = new DungeonParameters {
                ChanceToRemoveDeadends = 0.5, Height = 33, Width = 33, MaxRoomHeight = 7, MinRoomHeight = 3, MaxRoomWidth = 7, MinRoomWidth = 3, Randomness = 0.3, RoomCount = 12, Sparseness = 0.5, RockColor = rockColor, FloorColor = floorColor, CellSize = 32, Theme = theme
            };

            if (string.IsNullOrWhiteSpace(theme) || !config.ThemeNames.Contains(theme))
            {
                config.Theme = "Dungeon";
            }
            rockColor  = string.IsNullOrWhiteSpace(rockColor) ? "" : "#" + rockColor;
            floorColor = string.IsNullOrWhiteSpace(floorColor) ? "" : "#" + floorColor;

            if (string.IsNullOrWhiteSpace(rockColor) || !colorPattern.IsMatch(rockColor))
            {
                config.RockColor = config.ThemeColors[config.Theme].RockColor;
            }

            if (string.IsNullOrWhiteSpace(floorColor) || !colorPattern.IsMatch(floorColor))
            {
                config.FloorColor = config.ThemeColors[config.Theme].FloorColor;
            }


            return(View(config));
        }
Esempio n. 4
0
 public AreaDrawer(DungeonParameters dp, Generator gen, Canvas mainArea, AssetsFabric assests)
 {
     _dp                 = dp;
     _gen                = gen;
     _mainArea           = mainArea;
     _assests            = assests;
     _mainArea.Focusable = true;
 }
Esempio n. 5
0
 internal void Initialize(Canvas mainArea)
 {
     _dp          = new DungeonParameters();
     _assests     = new AssetsFabric(_dp);
     Gen          = new Generator(_dp);
     Drawer       = new AreaDrawer(_dp, Gen, mainArea, _assests);
     _player      = new Player();
     InputManager = new KeysInputBehaviorFactory(Gen, Drawer);
 }
Esempio n. 6
0
        public DungeonGenerator(DungeonParameters parameters, Random random)
        {
            DungeonGenerator.Random = random;
            Area.ResetAreaIdCount();

            Dungeon = new Dungeon(parameters.Rows, parameters.Cols);
            GenerateRooms(parameters.TargetRoomToDungeonRatio,
                          parameters.MinRoomHeight, parameters.MinRoomWidth,
                          parameters.MaxRoomHeight, parameters.MaxRoomWidth);
            GenerateDoors(parameters.DoorsToWallRatio);
            GenerateCorridors(parameters.CorridorTurnChance);
            MakeDungeonACompleteGraph(parameters.CorridorTurnChance);
            GenerateItems(ref parameters.TotalKeys);
        }
Esempio n. 7
0
    public void LoadSlidersFromPreset(int index)
    {
        DungeonParameters preset = presets[index];

        rows.value               = preset.Rows;
        columns.value            = preset.Cols;
        keys.value               = preset.TotalKeys;
        minRoomHeight.value      = preset.MinRoomHeight;
        minRoomWidth.value       = preset.MinRoomWidth;
        maxRoomHeight.value      = preset.MaxRoomHeight;
        maxRoomWidth.value       = preset.MaxRoomWidth;
        roomToDungeonRatio.value = (float)preset.TargetRoomToDungeonRatio;
        doorToWallRatio.value    = (float)preset.DoorsToWallRatio;
        corridorTurnChance.value = (float)preset.CorridorTurnChance;
        // Leave the defined seed as-is
    }
Esempio n. 8
0
    private void LoadParameterValues()
    {
        DungeonParameters parameters = GM.Instance.DungeonParameters;

        dungeonParameterValues.text = string.Format(
            "{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}\n{7}\n{8}\n{9}\n{10}",
            parameters.Seed,
            parameters.Rows,
            parameters.Cols,
            parameters.TotalKeys,
            parameters.MinRoomHeight,
            parameters.MaxRoomHeight,
            parameters.MinRoomWidth,
            parameters.MaxRoomWidth,
            SliderText.FormatPercent(parameters.TargetRoomToDungeonRatio),
            SliderText.FormatPercent(parameters.DoorsToWallRatio),
            SliderText.FormatPercent(parameters.CorridorTurnChance)
            );
    }
 protected void SetDungeonParameters(DungeonParameters parameters)
 {
     this.parameters = parameters;
 }                                                                                                            //used by children to set
Esempio n. 10
0
        public ActionResult Index(DungeonParameters dungeon)
        {
            if (dungeon.Width > 200)
            {
                dungeon.Width = 200;
            }
            if (dungeon.Height > 300)
            {
                dungeon.Height = 300;
            }
            if (dungeon.RoomCount < 0)
            {
                dungeon.RoomCount = 0;
            }
            if (dungeon.RoomCount > 250)
            {
                dungeon.RoomCount = 250;
            }
            if (dungeon.Randomness > 1)
            {
                dungeon.Randomness = 1;
            }
            if (dungeon.Randomness < 0)
            {
                dungeon.Randomness = 0;
            }
            if (dungeon.Sparseness > 1)
            {
                dungeon.Sparseness = 1;
            }
            if (dungeon.Sparseness < 0)
            {
                dungeon.Sparseness = 0;
            }
            if (dungeon.ChanceToRemoveDeadends > 1)
            {
                dungeon.ChanceToRemoveDeadends = 1;
            }
            if (dungeon.ChanceToRemoveDeadends < 0)
            {
                dungeon.ChanceToRemoveDeadends = 0;
            }
            if (!dungeon.ThemeNames.Contains(dungeon.Theme))
            {
                dungeon.Theme = "Dungeon";
            }

            if (!colorPattern.IsMatch(dungeon.RockColor))
            {
                dungeon.RockColor = "#794a1c";
            }

            if (!colorPattern.IsMatch(dungeon.FloorColor))
            {
                dungeon.FloorColor = "#be9641";
            }

            //TODO: When Theme is changed -- set default colors for theme.

            var generator = new DungeonGenerator <Cell>();
            var config    = dungeon.GetConfig();
            var map       = generator.Generate(config);

            var result = new StringBuilder();

            result.AppendLine("<table class='map dungeon'>");

            for (int y = 0; y < map.Height; y++)
            {
                result.AppendLine("<tr>");

                for (int x = 0; x < map.Width; x++)
                {
                    var cell = map.GetCell(y, x);
                    var adj  = map.GetAllAdjacentCellsByDirection(cell);

                    switch (cell.Terrain)
                    {
                    case (TerrainType.Rock):
                        result.Append("<td  class='rock'></td>");
                        break;

                    case (TerrainType.Door):
                        if (adj[Direction.East] == null || adj[Direction.East].Terrain == TerrainType.Rock)
                        {
                            result.Append("<td class='door east west'></td>");
                        }
                        else
                        {
                            result.Append("<td class='door north south'></td>");
                        }
                        break;

                    case (TerrainType.Floor):
                        var walls = new List <string>();
                        if (adj[Direction.North] == null || adj[Direction.North].Terrain == TerrainType.Rock)
                        {
                            walls.Add("north");
                        }
                        if (adj[Direction.South] == null || adj[Direction.South].Terrain == TerrainType.Rock)
                        {
                            walls.Add("south");
                        }
                        if (adj[Direction.East] == null || adj[Direction.East].Terrain == TerrainType.Rock)
                        {
                            walls.Add("east");
                        }
                        if (adj[Direction.West] == null || adj[Direction.West].Terrain == TerrainType.Rock)
                        {
                            walls.Add("west");
                        }
                        result.Append("<td class='" + string.Join(" ", walls.ToArray()) + "'></td>");
                        break;
                    }

                    result.AppendLine();
                }
                result.AppendLine("</tr>");
            }

            result.AppendLine("</table>");
            dungeon.Result       = result.ToString();
            ViewBag.DungeonTable = result.ToString();
            return(View(dungeon));
        }
Esempio n. 11
0
    void Setup()
    {
        dungeonParameters = new DungeonParameters[amountOfLevels];
        for (int i = 0; i < amountOfLevels; i++)
        {
            DungeonParameters DP = new DungeonParameters();
            DP.width            = 30 + (i * 3);
            DP.height           = 30 + (i * 3);
            DP.minAmountOfRooms = 1 + (int)((i - 3) * minAmountOfRoomsScaler);
            DP.maxAmountOfRooms = 3 + (int)((i - 2) * maxAmountOfRoomsScaler);
            DP.chanceOfRoom     = chanceOfRoom;

            if (i == 1)
            {
                DP.minAmountOfRooms = 0;
                DP.maxAmountOfRooms = 0;
            }
            else if (i == 2)
            {
                DP.minAmountOfRooms = 1;
                DP.maxAmountOfRooms = 1;
            }

            DP.chanceChestDeadEnd  = chanceChestDeadEnd;
            DP.chanceChestCorridor = chanceChestCorridor;
            DP.chanceParticles     = chanceParticles;
            DP.chanceLavaStream    = chanceLavaStream;
            DP.chanceSkull         = chanceSkull;

            if (i >= minLevelForMinotaur)
            {
                DP.enemies.minoTaur = true;
            }
            if (i >= minLevelForSpider)
            {
                DP.enemies.Spider = true;
            }
            if (i >= minLevelForGhost)
            {
                DP.enemies.Ghost = true;
            }
            if (i >= minLevelForBomber)
            {
                DP.enemies.Bomber = true;
            }
            if (i >= minLevelForShield)
            {
                DP.powerUps.shield.enabled = true;
            }
            if (i >= minLevelForSticky)
            {
                DP.powerUps.sticky.enabled = true;
            }
            if (i >= minLevelForWall)
            {
                DP.powerUps.wall.enabled = true;
            }
            if (i >= minLevelForBomb)
            {
                DP.powerUps.bomb.enabled = true;
            }
            if (i >= minLevelForDecoy)
            {
                DP.powerUps.decoy.enabled = true;
            }
            if (i >= minLevelIceballWeapon)
            {
                DP.powerUps.iceballWeapon.enabled = true;
            }
            if (i >= minLevelPiercingWeapon)
            {
                DP.powerUps.piercingWeapon.enabled = true;
            }
            if (i >= minLevelLaserWeapon)
            {
                DP.powerUps.laserWeapon.enabled = true;
            }
            if (i >= minLevelBloodWeapon)
            {
                DP.powerUps.bloodWeapon.enabled = true;
            }
            if (i >= minLevelBoomerangWeapon)
            {
                DP.powerUps.boomerangWeapon.enabled = true;
            }
            if (i >= minLevelSpidernest)
            {
                DP.Traps.spidernest.enabled = true;
            }
            if (i >= minLevelWizardnest)
            {
                DP.Traps.wizardnest.enabled = true;
            }
            if (i >= minLevelSpikes)
            {
                DP.Traps.spikes.enabled = true;
            }
            if (i >= minLevelWallspikes)
            {
                DP.Traps.wallspikes.enabled = true;
            }
            if (i >= minLevelWallrush)
            {
                DP.Traps.wallrush.enabled = true;
            }
            if (i >= minLevelShuriken)
            {
                DP.Traps.shuriken.enabled = true;
            }
            if (i >= minLevelFliproom)
            {
                DP.puzzleRooms.Fliproom.enabled = true;
            }
            if (i >= minLevelBlockpuzzleroom)
            {
                DP.puzzleRooms.Blockpuzzleroom.enabled = true;
            }
            if (i >= minLevelFallblockpuzzle)
            {
                DP.puzzleRooms.Fallblockpuzzle.enabled = true;
            }
            if (i >= minLevelLaserroom)
            {
                DP.puzzleRooms.Laserroom.enabled = true;
            }
            if (i >= minLevelMovingplatformroom)
            {
                DP.puzzleRooms.Movingplatformroom.enabled = true;
            }
            if (i >= minLevelBossroom)
            {
                DP.puzzleRooms.Bossroom.enabled = true;
            }
            if (i >= minLevelTreasureroom)
            {
                DP.puzzleRooms.Treasureroom.enabled = true;
            }

            DP.powerUps.shield.spawnChance                = chanceShield;
            DP.powerUps.sticky.spawnChance                = chanceSticky;
            DP.powerUps.wall.spawnChance                  = chanceWall;
            DP.powerUps.bomb.spawnChance                  = chanceBomb;
            DP.powerUps.decoy.spawnChance                 = chanceDecoy;
            DP.powerUps.iceballWeapon.spawnChance         = chanceIceball;
            DP.powerUps.piercingWeapon.spawnChance        = chancePiercing;
            DP.powerUps.laserWeapon.spawnChance           = chanceLaser;
            DP.powerUps.bloodWeapon.spawnChance           = chanceBlood;
            DP.powerUps.boomerangWeapon.spawnChance       = chanceBoomerang;
            DP.Traps.spidernest.spawnChance               = chanceSpidernest;
            DP.Traps.wizardnest.spawnChance               = chanceWizardnest;
            DP.Traps.spikes.spawnChance                   = chanceSpikes;
            DP.Traps.wallspikes.spawnChance               = chanceWallspikes;
            DP.Traps.wallrush.spawnChance                 = chanceWallrush;
            DP.Traps.shuriken.spawnChance                 = chanceShuriken;
            DP.puzzleRooms.Blockpuzzleroom.spawnChance    = chanceBlockpuzzleroom;
            DP.puzzleRooms.Blockpuzzleroom.puzzleRoom     = Blockpuzzleroom;
            DP.puzzleRooms.Fallblockpuzzle.spawnChance    = chanceFallblockpuzzle;
            DP.puzzleRooms.Fallblockpuzzle.puzzleRoom     = Fallblockpuzzle;
            DP.puzzleRooms.Laserroom.spawnChance          = chanceLaserroom;
            DP.puzzleRooms.Laserroom.puzzleRoom           = Laserroom;
            DP.puzzleRooms.Bossroom.spawnChance           = chanceBossroom;
            DP.puzzleRooms.Bossroom.puzzleRoom            = Bossroom;
            DP.puzzleRooms.Movingplatformroom.spawnChance = chanceMovingplatformroom;
            DP.puzzleRooms.Movingplatformroom.puzzleRoom  = Movingplatformroom;
            DP.puzzleRooms.Fliproom.spawnChance           = chanceFliproom;
            DP.puzzleRooms.Fliproom.puzzleRoom            = Fliproom;
            DP.puzzleRooms.Treasureroom.spawnChance       = chanceTreasureroom;
            DP.puzzleRooms.Treasureroom.puzzleRoom        = Treasureroom;
            DP.puzzleRooms.platformSpeedScaler            = 1f + platformSpeedScaler * i;
            if (DP.puzzleRooms.platformSpeedScaler > 1.8f)
            {
                DP.puzzleRooms.platformSpeedScaler = 1.8f;
            }

            DP.timeBetweenSpawns = 15f - spawnRateScaler * i;
            if (DP.timeBetweenSpawns < 4f)
            {
                DP.timeBetweenSpawns = 4f;
            }
            DP.timeBeforeSpawning = 15f - spawnerWarmingUpScaler * i;
            if (DP.timeBeforeSpawning < 2f)
            {
                DP.timeBeforeSpawning = 2f;
            }

            DP.Traps.chanceForTrap = chanceForTrapBase + chanceForTrapScaler * i;

            dungeonParameters [i] = DP;
        }
    }
Esempio n. 12
0
 public AssetsFabric(DungeonParameters dp)
 {
     _dp = dp;
 }