Open Source Tomb Raider Engine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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. }