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; }
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)); }
public AreaDrawer(DungeonParameters dp, Generator gen, Canvas mainArea, AssetsFabric assests) { _dp = dp; _gen = gen; _mainArea = mainArea; _assests = assests; _mainArea.Focusable = true; }
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); }
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); }
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 }
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
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)); }
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; } }
public AssetsFabric(DungeonParameters dp) { _dp = dp; }