void Start() { if (this.dungeonRoomTemplate is RewardRoom) { RewardRoom roomRemplate = this.dungeonRoomTemplate as RewardRoom; // @TODO instantiate all the stuff that's needed } else if (this.dungeonRoomTemplate is MonsterRoom) { MonsterRoom roomRemplate = this.dungeonRoomTemplate as MonsterRoom; // @TODO instantiate all the stuff that's needed } }
void LoadRoomAtCoordinate(Vector2Int roomCoordinate) { IDungeonRoomTemplate roomTemplate = GetOrGenerateRoomTemplateForCoordinate(roomCoordinate); var position = ConvertRoomCoordinateToWorldCoordinate(roomCoordinate); GameObject loadedRoom; DungeonRoom dungeonRoom; if (roomTemplate is RewardRoomTemplate) { var template = roomTemplate as RewardRoomTemplate; loadedRoom = Container.InstantiatePrefab(RewardRoomPrefab); RewardRoom room = loadedRoom.GetComponent <RewardRoom>(); dungeonRoom = room; } else if (roomTemplate is MonsterRoomTemplate) { var template = roomTemplate as MonsterRoomTemplate; loadedRoom = Container.InstantiatePrefab(MonsterRoomPrefab); MonsterRoom room = loadedRoom.GetComponent <MonsterRoom>(); dungeonRoom = room; room.player = this.player; } else { throw new System.NotImplementedException($"Unimplemented room template of type {roomTemplate.GetType()}"); } dungeonRoom.transform.transform.position = position; dungeonRoom.dungeonRoomTemplate = roomTemplate; dungeonRoom.roomCoordinate = roomCoordinate; this.loadedRooms.Add(dungeonRoom); }
private void MakeTopMonsterRoom() { Vector2 door1Camera = Room.TileToWorldPos(new Vector2(top.width * 0.5f, top.height - 4.5f)); Vector2 door2Camera = Room.TileToWorldPos(new Vector2(top.width * 0.5f, 4.5f)); MonsterRoom.CreateStartEvent createStart = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(door1Camera, (Room r, Player p, int time) => { ((Door)room.tiles[top.width / 2, top.height - 5].puzzle).Close(); })); events.Add(new CameraEvent(door2Camera, (Room r, Player p, int time) => { ((Door)room.tiles[top.width / 2, 4].puzzle).Close(); })); return events; }; Vector2 spawnEnemyCamera = (door1Camera + door2Camera) / 2f; MonsterRoom.CreateEnemiesEvent createEnemies = (Room room, Player player, List<Enemy> enemies) => { enemies.Add(new FireWizard(spawnEnemyCamera)); FireCaster caster = new FireCaster(spawnEnemyCamera + Room.TileToWorldPos(-5, 0)); caster.maxShootTimer = 90; enemies.Add(caster); caster = new FireCaster(spawnEnemyCamera + Room.TileToWorldPos(0, -5)); caster.maxShootTimer = 90; enemies.Add(caster); caster = new FireCaster(spawnEnemyCamera + Room.TileToWorldPos(5, 0)); caster.maxShootTimer = 90; enemies.Add(caster); }; MonsterRoom.CreateEndEvent createEnd = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(door1Camera, (Room r, Player p, int time) => { ((Door)room.tiles[top.width / 2, top.height - 5].puzzle).Open(); })); events.Add(new CameraEvent(door2Camera, (Room r, Player p, int time) => { ((Door)room.tiles[top.width / 2, 4].puzzle).Open(); })); return events; }; topMonsterRoom = new MonsterRoom(top, createStart, spawnEnemyCamera, createEnemies, createEnd); }
private void MakeMonsterRoom3() { Vector2 door1Camera = Room.TileToWorldPos(new Vector2(8.5f, 20.5f)); Vector2 door2Camera = Room.TileToWorldPos(new Vector2(8.5f, 4.5f)); MonsterRoom.CreateStartEvent createStart = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(door1Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 20].puzzle).Close(); })); events.Add(new CameraEvent(door2Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 4].puzzle).Close(); })); return events; }; Vector2 spawnEnemyCamera = (door1Camera + door2Camera) / 2f; MonsterRoom.CreateEnemiesEvent createEnemies = (Room room, Player player, List<Enemy> enemies) => { Turret turret = new Turret(spawnEnemyCamera); turret.maxShootTimer = 120; enemies.Add(turret); enemies.Add(new Spider(spawnEnemyCamera + Room.TileToWorldPos(-5, 1))); enemies.Add(new Spider(spawnEnemyCamera + Room.TileToWorldPos(5, 1))); FireCaster caster = new FireCaster(spawnEnemyCamera + Room.TileToWorldPos(-2, -4)); caster.maxShootTimer = 120; enemies.Add(caster); caster = new FireCaster(spawnEnemyCamera + Room.TileToWorldPos(2, -4)); caster.maxShootTimer = 120; enemies.Add(caster); }; MonsterRoom.CreateEndEvent createEnd = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(door1Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 20].puzzle).Open(); })); events.Add(new CameraEvent(door2Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 4].puzzle).Open(); })); return events; }; monsterRoom3 = new MonsterRoom(topRight, createStart, spawnEnemyCamera, createEnemies, createEnd); }
private void MakeMonsterRoom2() { Vector2 door1Camera = Room.TileToWorldPos(new Vector2(8.5f, 36.5f)); Vector2 door2Camera = Room.TileToWorldPos(new Vector2(8.5f, 20.5f)); MonsterRoom.CreateStartEvent createStart = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(door1Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 36].puzzle).Close(); })); events.Add(new CameraEvent(door2Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 20].puzzle).Close(); })); return events; }; Vector2 spawnEnemyCamera = (door1Camera + door2Camera) / 2f; MonsterRoom.CreateEnemiesEvent createEnemies = (Room room, Player player, List<Enemy> enemies) => { FireCaster enemy = new FireCaster(spawnEnemyCamera + Room.TileToWorldPos(-5, -3)); enemy.maxShootTimer = 90; enemies.Add(enemy); enemy = new FireCaster(spawnEnemyCamera + Room.TileToWorldPos(5, -3)); enemy.maxShootTimer = 90; enemies.Add(enemy); }; MonsterRoom.CreateEndEvent createEnd = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(door1Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 36].puzzle).Open(); })); events.Add(new CameraEvent(door2Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 20].puzzle).Open(); })); return events; }; monsterRoom2 = new MonsterRoom(topRight, createStart, spawnEnemyCamera, createEnemies, createEnd); }
private void MakeMonsterRoom1() { Vector2 door1Camera = Room.TileToWorldPos(new Vector2(8.5f, 52.5f)); Vector2 door2Camera = Room.TileToWorldPos(new Vector2(8.5f, 36.5f)); MonsterRoom.CreateStartEvent createStart = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(door1Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 52].puzzle).Close(); })); events.Add(new CameraEvent(door2Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 36].puzzle).Close(); })); return events; }; Vector2 spawnEnemyCamera = (door1Camera + door2Camera) / 2f; MonsterRoom.CreateEnemiesEvent createEnemies = (Room room, Player player, List<Enemy> enemies) => { Turret turret = new Turret(spawnEnemyCamera); turret.maxShootTimer = 75; enemies.Add(turret); enemies.Add(new Spider(spawnEnemyCamera - Room.TileToWorldPos(-4, -4))); enemies.Add(new Spider(spawnEnemyCamera - Room.TileToWorldPos(-5, 0))); enemies.Add(new Spider(spawnEnemyCamera - Room.TileToWorldPos(-4, 4))); enemies.Add(new Spider(spawnEnemyCamera - Room.TileToWorldPos(4, -4))); enemies.Add(new Spider(spawnEnemyCamera - Room.TileToWorldPos(5, 0))); enemies.Add(new Spider(spawnEnemyCamera - Room.TileToWorldPos(4, 4))); }; MonsterRoom.CreateEndEvent createEnd = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(door1Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 52].puzzle).Open(); })); events.Add(new CameraEvent(door2Camera, (Room r, Player p, int time) => { ((Door)room.tiles[8, 36].puzzle).Open(); })); return events; }; monsterRoom1 = new MonsterRoom(topRight, createStart, spawnEnemyCamera, createEnemies, createEnd); }
private void CreateRoom4MonsterRoom() { Vector2 cameraTarget1 = Room.TileToWorldPos(new Vector2(10.5f, 20.5f)); MonsterRoom.CreateStartEvent createStart = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(cameraTarget1, (Room r, Player p, int time) => { Door door = (Door)r.tiles[10, 20].puzzle; door.Close(); })); return events; }; Vector2 spawnEnemyCamera = Room.TileToWorldPos(new Vector2(10.5f, 10.5f)); MonsterRoom.CreateEnemiesEvent createEnemies = (Room r, Player p, List<Enemy> enemies) => { Turret turret = new Turret(Room.TileToWorldPos(new Vector2(5.5f, 7.5f))); turret.maxShootTimer = 90; enemies.Add(turret); turret = new Turret(Room.TileToWorldPos(new Vector2(15.5f, 7.5f))); turret.maxShootTimer = 90; enemies.Add(turret); enemies.Add(new Spider(Room.TileToWorldPos(new Vector2(5.5f, 13.5f)))); enemies.Add(new Spider(Room.TileToWorldPos(new Vector2(15.5f, 13.5f)))); }; MonsterRoom.CreateEndEvent createEnd = (Room room, Player player) => { List<CameraEvent> events = new List<CameraEvent>(); events.Add(new CameraEvent(cameraTarget1, (Room r, Player p, int time) => { Door door = (Door)r.tiles[10, 20].puzzle; door.Open(); })); Vector2 camTarget = Room.TileToWorldPos(new Vector2(20.5f, 3.5f)); events.Add(new CameraEvent(camTarget, (Room r, Player p, int time) => { Door door = (Door)r.tiles[20, 3].puzzle; door.Open(); })); return events; }; room4MonsterRoom = new MonsterRoom(room4, createStart, spawnEnemyCamera, createEnemies, createEnd); }