Open Source Tomb Raider Engine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

World.cpp 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /*!
  2. * \file src/World.cpp
  3. * \brief World Model
  4. *
  5. * \author Mongoose
  6. */
  7. #include "global.h"
  8. #include "World.h"
  9. #include "imgui/imgui.h"
  10. std::vector<std::unique_ptr<Room>> World::rooms;
  11. std::vector<std::unique_ptr<Sprite>> World::sprites;
  12. std::vector<std::unique_ptr<SpriteSequence>> World::spriteSequences;
  13. std::vector<std::unique_ptr<Entity>> World::entities;
  14. std::vector<std::unique_ptr<SkeletalModel>> World::models;
  15. std::vector<std::unique_ptr<StaticMesh>> World::staticMeshes;
  16. std::vector<std::unique_ptr<Mesh>> World::meshes;
  17. void World::destroy() {
  18. rooms.clear();
  19. sprites.clear();
  20. spriteSequences.clear();
  21. entities.clear();
  22. models.clear();
  23. staticMeshes.clear();
  24. meshes.clear();
  25. }
  26. void World::addRoom(Room* room) {
  27. rooms.emplace_back(std::unique_ptr<Room>(room));
  28. }
  29. unsigned long World::sizeRoom() {
  30. return rooms.size();
  31. }
  32. Room& World::getRoom(unsigned long index) {
  33. orAssertLessThan(index, rooms.size());
  34. return *rooms.at(index);
  35. }
  36. void World::addSprite(Sprite* sprite) {
  37. sprites.emplace_back(std::unique_ptr<Sprite>(sprite));
  38. }
  39. unsigned long World::sizeSprite() {
  40. return sprites.size();
  41. }
  42. Sprite& World::getSprite(unsigned long index) {
  43. orAssertLessThan(index, sprites.size());
  44. return *sprites.at(index);
  45. }
  46. void World::addSpriteSequence(SpriteSequence* sprite) {
  47. spriteSequences.emplace_back(std::unique_ptr<SpriteSequence>(sprite));
  48. }
  49. unsigned long World::sizeSpriteSequence() {
  50. return spriteSequences.size();
  51. }
  52. SpriteSequence& World::getSpriteSequence(unsigned long index) {
  53. orAssertLessThan(index, spriteSequences.size());
  54. return *spriteSequences.at(index);
  55. }
  56. void World::addEntity(Entity* entity) {
  57. entities.emplace_back(std::unique_ptr<Entity>(entity));
  58. }
  59. unsigned long World::sizeEntity() {
  60. return entities.size();
  61. }
  62. Entity& World::getEntity(unsigned long index) {
  63. orAssertLessThan(index, entities.size());
  64. return *entities.at(index);
  65. }
  66. void World::addSkeletalModel(SkeletalModel* model) {
  67. models.emplace_back(std::unique_ptr<SkeletalModel>(model));
  68. }
  69. unsigned long World::sizeSkeletalModel() {
  70. return models.size();
  71. }
  72. SkeletalModel& World::getSkeletalModel(unsigned long index) {
  73. orAssertLessThan(index, models.size());
  74. return *models.at(index);
  75. }
  76. void World::addStaticMesh(StaticMesh* model) {
  77. staticMeshes.emplace_back(std::unique_ptr<StaticMesh>(model));
  78. }
  79. unsigned long World::sizeStaticMesh() {
  80. return staticMeshes.size();
  81. }
  82. StaticMesh& World::getStaticMesh(unsigned long index) {
  83. orAssertLessThan(index, staticMeshes.size());
  84. return *staticMeshes.at(index);
  85. }
  86. void World::addMesh(Mesh* mesh) {
  87. meshes.emplace_back(mesh);
  88. }
  89. unsigned long World::sizeMesh() {
  90. return meshes.size();
  91. }
  92. Mesh& World::getMesh(unsigned long index) {
  93. orAssertLessThan(index, meshes.size());
  94. return *meshes.at(index);
  95. }
  96. void World::displayUI() {
  97. // Rooms
  98. if (ImGui::CollapsingHeader("Room Listing")) {
  99. ImGui::Columns(8, "rooms");
  100. ImGui::Text("No");
  101. ImGui::NextColumn();
  102. ImGui::Text("Ind.");
  103. ImGui::NextColumn();
  104. ImGui::Text("Alt.");
  105. ImGui::NextColumn();
  106. ImGui::Text("Flags");
  107. ImGui::NextColumn();
  108. ImGui::Text("Models");
  109. ImGui::NextColumn();
  110. ImGui::Text("Portals");
  111. ImGui::NextColumn();
  112. ImGui::Text("Sprites");
  113. ImGui::NextColumn();
  114. ImGui::Text("Tools");
  115. ImGui::NextColumn();
  116. ImGui::Separator();
  117. static bool offsets = false;
  118. if (!offsets) {
  119. ImGui::SetColumnOffset(1, 40.0f);
  120. ImGui::SetColumnOffset(2, 80.0f);
  121. ImGui::SetColumnOffset(3, 120.0f);
  122. ImGui::SetColumnOffset(4, 180.0f);
  123. ImGui::SetColumnOffset(5, 250.0f);
  124. ImGui::SetColumnOffset(6, 350.0f);
  125. ImGui::SetColumnOffset(7, 400.0f);
  126. offsets = true;
  127. }
  128. for (int i = 0; i < rooms.size(); i++) {
  129. ImGui::Text("%03d", i);
  130. ImGui::NextColumn();
  131. rooms.at(i)->displayUI();
  132. }
  133. ImGui::Columns(1);
  134. }
  135. // Entities
  136. if (ImGui::CollapsingHeader("Entity Listing")) {
  137. ImGui::Columns(4, "entities");
  138. ImGui::Text("No");
  139. ImGui::NextColumn();
  140. ImGui::Text("ID");
  141. ImGui::NextColumn();
  142. ImGui::Text("Type");
  143. ImGui::NextColumn();
  144. ImGui::Text("Index");
  145. ImGui::NextColumn();
  146. ImGui::Separator();
  147. static bool offsets2 = false;
  148. if (!offsets2) {
  149. ImGui::SetColumnOffset(1, 40.0f);
  150. ImGui::SetColumnOffset(2, 80.0f);
  151. ImGui::SetColumnOffset(3, 200.0f);
  152. offsets2 = true;
  153. }
  154. for (int i = 0; i < entities.size(); i++) {
  155. ImGui::Text("%03d", i);
  156. ImGui::NextColumn();
  157. entities.at(i)->displayUI();
  158. }
  159. ImGui::Columns(1);
  160. }
  161. // Static Meshes
  162. if (ImGui::CollapsingHeader("StaticMesh Listing")) {
  163. ImGui::Columns(3, "staticmeshes");
  164. ImGui::Text("No");
  165. ImGui::NextColumn();
  166. ImGui::Text("ID");
  167. ImGui::NextColumn();
  168. ImGui::Text("Mesh");
  169. ImGui::NextColumn();
  170. ImGui::Separator();
  171. static bool offsets3 = false;
  172. if (!offsets3) {
  173. ImGui::SetColumnOffset(1, 40.0f);
  174. ImGui::SetColumnOffset(2, 80.0f);
  175. offsets3 = true;
  176. }
  177. for (int i = 0; i < staticMeshes.size(); i++) {
  178. ImGui::Text("%03d", i);
  179. ImGui::NextColumn();
  180. staticMeshes.at(i)->displayUI();
  181. }
  182. ImGui::Columns(1);
  183. }
  184. }