EditorKarte.h 4.8 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. 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. }