EditorKarte.h 4.5 KB

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