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 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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. static bool offsets = false;
  99. if (ImGui::CollapsingHeader("Rooms")) {
  100. ImGui::Columns(6, "rooms");
  101. ImGui::Text("No");
  102. ImGui::NextColumn();
  103. ImGui::Text("Ind.");
  104. ImGui::NextColumn();
  105. ImGui::Text("Alt.");
  106. ImGui::NextColumn();
  107. ImGui::Text("Flags");
  108. ImGui::NextColumn();
  109. ImGui::Text("Models");
  110. ImGui::NextColumn();
  111. ImGui::Text("Portals");
  112. ImGui::NextColumn();
  113. ImGui::Separator();
  114. if (!offsets) {
  115. ImGui::SetColumnOffset(1, 40.0f);
  116. ImGui::SetColumnOffset(2, 80.0f);
  117. ImGui::SetColumnOffset(3, 120.0f);
  118. ImGui::SetColumnOffset(4, 180.0f);
  119. ImGui::SetColumnOffset(5, 300.0f);
  120. offsets = true;
  121. }
  122. for (int i = 0; i < rooms.size(); i++) {
  123. ImGui::Text("%03d", i);
  124. ImGui::NextColumn();
  125. rooms.at(i)->displayUI();
  126. }
  127. ImGui::Columns(1);
  128. }
  129. // Static Meshes
  130. static bool offsets2 = false;
  131. if (ImGui::CollapsingHeader("StaticMeshes")) {
  132. ImGui::Columns(3, "staticmeshes");
  133. ImGui::Text("No");
  134. ImGui::NextColumn();
  135. ImGui::Text("ID");
  136. ImGui::NextColumn();
  137. ImGui::Text("Mesh");
  138. ImGui::NextColumn();
  139. ImGui::Separator();
  140. if (!offsets2) {
  141. ImGui::SetColumnOffset(1, 40.0f);
  142. ImGui::SetColumnOffset(2, 80.0f);
  143. offsets2 = true;
  144. }
  145. for (int i = 0; i < staticMeshes.size(); i++) {
  146. ImGui::Text("%03d", i);
  147. ImGui::NextColumn();
  148. staticMeshes.at(i)->displayUI();
  149. }
  150. ImGui::Columns(1);
  151. }
  152. }