public ISprite MakeSprite(DungeonEnum spriteType, Vector2 location, bool canBeBombed = false) { return(spriteType switch { DungeonEnum.RoomFloor => new RoomFloor(texture, location), DungeonEnum.RoomBorder => new RoomBorder(texture, location), DungeonEnum.Darkness => new Darkness(texture, location), DungeonEnum.DownWall => new Wall(texture, location, Direction.North, game.Rooms[roomIndex], canBeBombed), DungeonEnum.RightWall => new Wall(texture, location, Direction.West, game.Rooms[roomIndex], canBeBombed), DungeonEnum.LeftWall => new Wall(texture, location, Direction.East, game.Rooms[roomIndex], canBeBombed), DungeonEnum.UpWall => new Wall(texture, location, Direction.South, game.Rooms[roomIndex], canBeBombed), DungeonEnum.DownOpenDoor => new OpenDoor(texture, location, Direction.North, game.Rooms[roomIndex]), DungeonEnum.RightOpenDoor => new OpenDoor(texture, location, Direction.West, game.Rooms[roomIndex]), DungeonEnum.LeftOpenDoor => new OpenDoor(texture, location, Direction.East, game.Rooms[roomIndex]), DungeonEnum.UpOpenDoor => new OpenDoor(texture, location, Direction.South, game.Rooms[roomIndex]), DungeonEnum.DownLockedDoor => new LockedDoor(texture, location, Direction.North, game.Rooms[roomIndex]), DungeonEnum.RightLockedDoor => new LockedDoor(texture, location, Direction.West, game.Rooms[roomIndex]), DungeonEnum.LeftLockedDoor => new LockedDoor(texture, location, Direction.East, game.Rooms[roomIndex]), DungeonEnum.UpLockedDoor => new LockedDoor(texture, location, Direction.South, game.Rooms[roomIndex]), DungeonEnum.DownShutDoor => new ShutDoor(texture, location, Direction.North, game.Rooms[roomIndex]), DungeonEnum.RightShutDoor => new ShutDoor(texture, location, Direction.West, game.Rooms[roomIndex]), DungeonEnum.LeftShutDoor => new ShutDoor(texture, location, Direction.East, game.Rooms[roomIndex]), DungeonEnum.UpShutDoor => new ShutDoor(texture, location, Direction.South, game.Rooms[roomIndex]), DungeonEnum.DownBombedOpening => new BombedOpening(texture, location, Direction.North, game.Rooms[roomIndex]), DungeonEnum.RightBombedOpening => new BombedOpening(texture, location, Direction.West, game.Rooms[roomIndex]), DungeonEnum.LeftBombedOpening => new BombedOpening(texture, location, Direction.East, game.Rooms[roomIndex]), DungeonEnum.UpBombedOpening => new BombedOpening(texture, location, Direction.South, game.Rooms[roomIndex]), DungeonEnum.DarkRoom => new DarkRoom(texture, location, game), _ => throw new ArgumentException("Invalid sprite! " + spriteType.ToString() + " Sprite factory failed."), });
void Load() { if (File.Exists(Application.persistentDataPath + "/" + SaveFileScript.CurrentSaveFile.ToString() + "/" + DungeonName.ToString() + "/BaseDungeon.dat")) { BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/" + SaveFileScript.CurrentSaveFile.ToString() + "/" + DungeonName.ToString() + "/BaseDungeon.dat", FileMode.Open); DungeonInfo dungeon = (DungeonInfo)bf.Deserialize(file); file.Close(); GeneratedLevelIndexes = dungeon.GeneratedLevels; MaxLevelIndex = dungeon.MaxLevels; BossDeceased = dungeon.bossDeceased; CurrentLevelIndex = dungeon.CurrentLevel; if (dungeon.isCurrentDungeon) { CurrentDungeon = this; } List <GameObject> children = new List <GameObject>(); // make sure we clear out all the old levels if any foreach (Transform child in gameObject.transform) { children.Add(child.gameObject); } foreach (GameObject child in children) { Destroy(child); } //recreate all the levels that we had for (int i = 0; i < GeneratedLevelIndexes; i++) { GameObject level = Instantiate(Resources.Load("Level") as GameObject); level.transform.SetParent(gameObject.transform); level.transform.SetSiblingIndex(i); level.GetComponent <LevelScript>().Load(); Levels.Add(level.GetComponent <LevelScript>()); } } }