EditorKarte.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. #pragma once
  2. #include "EditorKlient.h"
  3. #include <Punkt.h>
  4. #include <Critical.h>
  5. #include <functional>
  6. #include <Welt2D.h>
  7. #include <Model2D.h>
  8. #include <GSLDateiV.h>
  9. namespace Editor
  10. {
  11. struct ResourceDaten
  12. {
  13. int id;
  14. Text path;
  15. };
  16. struct SpielerDaten //: public Model
  17. {
  18. int id;
  19. Punkt pos;
  20. double rot;
  21. double beschleunigung;
  22. int maxStabilität;
  23. int maxEnergie;
  24. double reparatur;
  25. double akkuLeistung;
  26. int laserIntensität;
  27. int laserEffizienz;
  28. int laserTempo;
  29. double wendigkeit;
  30. double antriebEffizienz;
  31. double energieSchild;
  32. double energieSchildEffizienz;
  33. int netzwerk;
  34. int skillPunkte;
  35. int m2d;
  36. int bild;
  37. SpielerDaten();
  38. SpielerDaten( const SpielerDaten &daten );
  39. };
  40. struct TeamDaten// : public Model
  41. {
  42. int id;
  43. int maxPunkte;
  44. double beschleunigung;
  45. int maxStabilität;
  46. int maxEnergie;
  47. double reparatur;
  48. double akkuLeistung;
  49. int laserIntensität;
  50. int laserEffizienz;
  51. int laserTempo;
  52. double wendigkeit;
  53. double antriebEffizienz;
  54. double energieSchild;
  55. double energieSchildEffizienz;
  56. int punkte;
  57. TeamDaten();
  58. TeamDaten( const TeamDaten &daten );
  59. };
  60. struct ObjektDaten //: public Model
  61. {
  62. Punkt pos;
  63. float rot;
  64. float scale;
  65. int id;
  66. int m2d;
  67. int bild;
  68. int style;
  69. int maxStabilität;
  70. int maxEnergie;
  71. int energieRadius;
  72. double reparatur;
  73. double akkuLeistung;
  74. char team;
  75. ObjektDaten();
  76. ObjektDaten( const ObjektDaten &daten );
  77. };
  78. class EditorObject : public Model2DObject
  79. {
  80. public:
  81. enum ObjektTyp
  82. {
  83. SPIELER,
  84. OBJEKT
  85. };
  86. private:
  87. ObjektTyp typ;
  88. int id;
  89. public:
  90. EditorObject( ObjektTyp typ, int id );
  91. virtual ~EditorObject();
  92. virtual void update() = 0;
  93. bool isObjekt( ObjektTyp typ, int id );
  94. };
  95. class EdSpieler : public EditorObject
  96. {
  97. private:
  98. SpielerDaten *mdl;
  99. public:
  100. EdSpieler( SpielerDaten *model );
  101. ~EdSpieler();
  102. void update();
  103. };
  104. class EdObjekt : public EditorObject
  105. {
  106. private:
  107. ObjektDaten *mdl;
  108. public:
  109. EdObjekt( ObjektDaten *model );
  110. ~EdObjekt();
  111. void update();
  112. };
  113. class UpdateObserver //: public View
  114. {
  115. private:
  116. std::function< void() > f;
  117. public:
  118. UpdateObserver( std::function< void() > f );
  119. //void update( Model *m ) override;
  120. };
  121. typedef GSL::GSLDateiV *( *GetGSLDatei )( );
  122. class KarteDaten : public Thread
  123. {
  124. private:
  125. EditorKlient *client;
  126. SpielerTeamStruktur *sts;
  127. Array< SpielerDaten * > spieler;
  128. Array< TeamDaten * > teams;
  129. Array< ObjektDaten * > objekte;
  130. Array< ResourceDaten * > resources;
  131. Text error;
  132. Array< std::function< void() > > aktionen;
  133. Critical cs;
  134. Welt2D *welt;
  135. // RCArray< View > views;
  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. // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
  172. Thread *release() override;
  173. };
  174. }