1 #pragma once 2 3 #include "util.h" 4 #include "villain_type.h" 5 6 struct EnemyInfo; 7 8 RICH_ENUM(EnemyId, 9 KNIGHTS, 10 WARRIORS, 11 DWARVES, 12 ELVES, 13 ELEMENTALIST, 14 ELEMENTALIST_ENTRY, 15 LIZARDMEN, 16 RED_DRAGON, 17 GREEN_DRAGON, 18 MINOTAUR, 19 20 VILLAGE, 21 BANDITS, 22 NO_AGGRO_BANDITS, 23 ENTS, 24 DRIADS, 25 CYCLOPS, 26 SHELOB, 27 HYDRA, 28 KRAKEN, 29 ANTS_OPEN, 30 ANTS_CLOSED, 31 CEMETERY, 32 CEMETERY_ENTRY, 33 34 DARK_ELVES, 35 DARK_ELVES_ENTRY, 36 GNOMES, 37 GNOMES_ENTRY, 38 OGRE_CAVE, 39 HARPY_CAVE, 40 DEMON_DEN_ABOVE, 41 DEMON_DEN, 42 ORC_VILLAGE, 43 SOKOBAN, 44 SOKOBAN_ENTRY, 45 WITCH, 46 DWARF_CAVE, 47 KOBOLD_CAVE, 48 HUMAN_COTTAGE, 49 UNICORN_HERD, 50 ELVEN_COTTAGE, 51 52 TUTORIAL_VILLAGE 53 ); 54 55 56 struct ExternalEnemy; 57 58 class EnemyFactory { 59 public: 60 EnemyFactory(RandomGen&); 61 EnemyInfo get(EnemyId); 62 vector<ExternalEnemy> getExternalEnemies(); 63 vector<EnemyInfo> getVaults(); 64 65 private: 66 EnemyInfo getById(EnemyId); 67 RandomGen& random; 68 }; 69