EditorKarte.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  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. EditorObject();
  83. virtual ~EditorObject();
  84. virtual void update() = 0;
  85. };
  86. class EdSpieler : public EditorObject
  87. {
  88. private:
  89. SpielerDaten *mdl;
  90. public:
  91. EdSpieler( SpielerDaten *model );
  92. ~EdSpieler();
  93. void update();
  94. };
  95. class EdObjekt : public EditorObject
  96. {
  97. private:
  98. ObjektDaten *mdl;
  99. public:
  100. EdObjekt( ObjektDaten *model );
  101. ~EdObjekt();
  102. void update();
  103. };
  104. class UpdateObserver : public View
  105. {
  106. private:
  107. std::function< void() > f;
  108. public:
  109. UpdateObserver( std::function< void() > f );
  110. void update( Model *m ) override;
  111. };
  112. typedef GSL::GSLDateiV *( *GetGSLDatei )( );
  113. class KarteDaten : public Thread
  114. {
  115. private:
  116. EditorKlient *client;
  117. SpielerTeamStruktur *sts;
  118. Array< SpielerDaten * > spieler;
  119. Array< TeamDaten * > teams;
  120. Array< ObjektDaten * > objekte;
  121. Array< ResourceDaten * > resources;
  122. Text error;
  123. Array< std::function< void() > > aktionen;
  124. Critical cs;
  125. Welt2D *welt;
  126. RCArray< View > views;
  127. Punkt size;
  128. GetGSLDatei getGSLDatei;
  129. bool exit;
  130. void loadSpielResourcePathsFromFolder( const char *folderPath, RCArray< Text > *zPaths );
  131. public:
  132. KarteDaten( EditorKlient *client, SpielerTeamStruktur *sts );
  133. ~KarteDaten();
  134. void addObjekt( ObjektDaten &daten, std::function< void( int ) > callBack );
  135. void removeObjekt( int index );
  136. void thread() override;
  137. ResourceDaten *getResource( int index );
  138. ObjektDaten *getObjekt( int index );
  139. SpielerDaten *getSpieler( int index );
  140. TeamDaten *getTeam( int index );
  141. const char *getTeamName( int index );
  142. int getSpielerIndexById( int id );
  143. int getSpielerAnzahl() const;
  144. int getTeamIndexById( int id );
  145. int getTeamAnzahl() const;
  146. int getObjektIndexById( int id );
  147. int getObjektAnzahl() const;
  148. int getResourceIndexById( int id );
  149. int getResourceAnzahl();
  150. bool hasError() const;
  151. char *getError() const;
  152. bool hasAktions() const;
  153. Welt2D *getWelt() const;
  154. Welt2D *zWelt() const;
  155. void getResourceIdFromPath( const char *path, std::function< void( int ) > callBack );
  156. bool doesResourceExist( const char *path );
  157. Model2DData *loadModelFromRessource( int id );
  158. Bild *loadBildFromRessource( int id );
  159. Model2DData *loadModelFromPath( const char *path );
  160. Bild *loadBildFromPath( const char *path );
  161. void loadUnusedResourcePaths( std::function< void( RCArray< Text > * ) > callBack );
  162. // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
  163. Thread *release() override;
  164. };
  165. }