EditorKarte.h 4.5 KB

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