EditorKarte.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #pragma once
  2. #include "../Netzwerk/EditorKlient.h"
  3. #include "../Abstract/Model.h"
  4. #include <Punkt.h>
  5. #include <Critical.h>
  6. #include <functional>
  7. #include <Welt2D.h>
  8. #include <Model2D.h>
  9. #include <GSLDateiV.h>
  10. namespace Editor
  11. {
  12. struct ResourceDaten
  13. {
  14. int id;
  15. Text path;
  16. };
  17. struct SpielerDaten : public Model
  18. {
  19. int id;
  20. Punkt pos;
  21. double rot;
  22. double beschleunigung;
  23. int maxStabilität;
  24. int maxEnergie;
  25. double reparatur;
  26. double akkuLeistung;
  27. int laserIntensität;
  28. int laserEffizienz;
  29. int laserTempo;
  30. double wendigkeit;
  31. double antriebEffizienz;
  32. double energieSchild;
  33. double energieSchildEffizienz;
  34. int netzwerk;
  35. int skillPunkte;
  36. int m2d;
  37. int bild;
  38. SpielerDaten();
  39. SpielerDaten(const SpielerDaten& daten);
  40. };
  41. struct TeamDaten : public Model
  42. {
  43. int id;
  44. int maxPunkte;
  45. double beschleunigung;
  46. int maxStabilität;
  47. int maxEnergie;
  48. double reparatur;
  49. double akkuLeistung;
  50. int laserIntensität;
  51. int laserEffizienz;
  52. int laserTempo;
  53. double wendigkeit;
  54. double antriebEffizienz;
  55. double energieSchild;
  56. double energieSchildEffizienz;
  57. int punkte;
  58. TeamDaten();
  59. TeamDaten(const TeamDaten& daten);
  60. };
  61. struct ObjektDaten : public Model
  62. {
  63. Punkt pos;
  64. float rot;
  65. float scale;
  66. int id;
  67. int m2d;
  68. int bild;
  69. int style;
  70. int maxStabilität;
  71. int maxEnergie;
  72. int energieRadius;
  73. double reparatur;
  74. double akkuLeistung;
  75. char team;
  76. ObjektDaten();
  77. ObjektDaten(const ObjektDaten& daten);
  78. };
  79. class EditorObject : public Model2DObject
  80. {
  81. public:
  82. enum ObjektTyp
  83. {
  84. SPIELER,
  85. OBJEKT
  86. };
  87. private:
  88. ObjektTyp typ;
  89. int id;
  90. public:
  91. EditorObject(ObjektTyp typ, int id);
  92. virtual ~EditorObject();
  93. virtual void update() = 0;
  94. bool isObjekt(ObjektTyp typ, int id);
  95. };
  96. class EdSpieler : public EditorObject
  97. {
  98. private:
  99. SpielerDaten* mdl;
  100. public:
  101. EdSpieler(SpielerDaten* model);
  102. ~EdSpieler();
  103. void update();
  104. };
  105. class EdObjekt : public EditorObject
  106. {
  107. private:
  108. ObjektDaten* mdl;
  109. public:
  110. EdObjekt(ObjektDaten* model);
  111. ~EdObjekt();
  112. void update();
  113. };
  114. class UpdateObserver : public View
  115. {
  116. private:
  117. std::function< void() > f;
  118. public:
  119. UpdateObserver(std::function< void() > f);
  120. void update(Model* m) override;
  121. };
  122. typedef GSL::GSLDateiV* (*GetGSLDatei)();
  123. class KarteDaten : public Thread
  124. {
  125. private:
  126. EditorKlient* client;
  127. SpielerTeamStruktur* sts;
  128. Array< SpielerDaten* > spieler;
  129. Array< TeamDaten* > teams;
  130. Array< ObjektDaten* > objekte;
  131. Array< ResourceDaten* > resources;
  132. Text error;
  133. Array< std::function< void() > > aktionen;
  134. Critical cs;
  135. Welt2D* welt;
  136. Punkt size;
  137. GetGSLDatei getGSLDatei;
  138. bool exit;
  139. void loadSpielResourcePathsFromFolder(const char* folderPath, RCArray< Text >* zPaths);
  140. public:
  141. KarteDaten(EditorKlient* client, SpielerTeamStruktur* sts);
  142. ~KarteDaten();
  143. void addObjekt(ObjektDaten& daten, std::function< void(int) > callBack);
  144. void removeObjekt(int index);
  145. void thread() override;
  146. ResourceDaten* getResource(int index);
  147. ObjektDaten* getObjekt(int index);
  148. SpielerDaten* getSpieler(int index);
  149. TeamDaten* getTeam(int index);
  150. const char* getTeamName(int index);
  151. int getSpielerIndexById(int id);
  152. int getSpielerAnzahl() const;
  153. int getTeamIndexById(int id);
  154. int getTeamAnzahl() const;
  155. int getObjektIndexById(int id);
  156. int getObjektAnzahl() const;
  157. int getResourceIndexById(int id);
  158. int getResourceAnzahl();
  159. bool hasError() const;
  160. const char* getError() const;
  161. bool hasAktions() const;
  162. Welt2D* getWelt() const;
  163. Welt2D* zWelt() const;
  164. void getResourceIdFromPath(const char* path, std::function< void(int) > callBack);
  165. bool doesResourceExist(const char* path);
  166. Model2DData* loadModelFromRessource(int id);
  167. Bild* loadBildFromRessource(int id);
  168. Model2DData* loadModelFromPath(const char* path);
  169. Bild* loadBildFromPath(const char* path);
  170. void loadUnusedResourcePaths(std::function< void(RCArray< Text >*) > callBack);
  171. void stopWork();
  172. };
  173. }