ObjektOptionen.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. #include "ObjektOptionen.h"
  2. #include "../../../../Initialisierung/Initialisierung.h"
  3. #include <Textur2D.h>
  4. using namespace Editor;
  5. ObjektTool::ObjektTool( Schrift *zSchrift, KarteDaten *daten )
  6. : RightTool()
  7. {
  8. dialog = 0;
  9. dialog2 = 0;
  10. this->daten = daten;
  11. schrift = zSchrift->getThis();
  12. objekte = new AuswahlListe();
  13. objekte->setStyle( AuswahlListe::Style::Normal | AuswahlBox::Style::VScroll );
  14. objekte->setRahmenFarbe( 0xFFFFFFFF );
  15. objekte->setRahmenBreite( 1 );
  16. objekte->setSchriftZ( zSchrift->getThis() );
  17. objekte->setSize( 290, 200 );
  18. int anz = daten->getObjektAnzahl();
  19. for( int i = 0; i < anz; i++ )
  20. {
  21. const ObjektDaten *o = daten->getObjekt( i );
  22. objekte->addEintrag( Text( o->id ) );
  23. }
  24. neuesObjekt = initKnopf( 0, 205, 290, 20, zSchrift, Knopf::Style::Normal, "Neues Objekt erstellen" );
  25. neuesObjekt->setMausEreignis( [ this ]( void *p, void *o, MausEreignis me )
  26. {
  27. if( me.id == ME_RLinks )
  28. {
  29. cs.lock();
  30. if( dialog )
  31. dialog->release();
  32. dialog = new ResourceDialog( new TextRenderer( schrift->getThis() ), SELECT_MODEL2D, (KarteDaten *)this->daten->getThis(), [ this ]( const char *modelPath )
  33. {
  34. if( !modelPath )
  35. return;
  36. cs.lock();
  37. if( dialog2 )
  38. dialog2->release();
  39. dialog2 = dialog;
  40. dialog = new ResourceDialog( new TextRenderer( schrift->getThis() ), SELECT_TEXTUR, (KarteDaten *)this->daten->getThis(), [ this, modelPath ]( const char *texturPath )
  41. {
  42. if( !texturPath )
  43. return;
  44. ObjektDaten o;
  45. this->daten->getResourceIdFromPath( modelPath, [ this, &o, texturPath ]( int id )
  46. {
  47. o.m2d = id;
  48. this->daten->getResourceIdFromPath( texturPath, [ this, &o ]( int id )
  49. {
  50. o.bild = id;
  51. o.scale = 1;
  52. o.maxStabilität = 100;
  53. o.maxEnergie = 100;
  54. o.energieRadius = 0;
  55. o.reparatur = 0;
  56. o.akkuLeistung = 0;
  57. o.team = this->daten->getTeam( 0 )->id;
  58. o.pos.x = 0;
  59. o.pos.y = 0;
  60. o.rot = 0;
  61. this->daten->addObjekt( o, [ this ]( int id )
  62. {
  63. objekte->addEintrag( Text( id ) );
  64. selectObject( id );
  65. } );
  66. } );
  67. } );
  68. }, screenSize );
  69. cs.unlock();
  70. }, screenSize );
  71. cs.unlock();
  72. }
  73. return 1;
  74. } );
  75. model = new M2DVorschau();
  76. model->setStyle( M2DVorschau::Style::Rahmen | M2DVorschau::Style::UsrRot | M2DVorschau::Style::UsrMove );
  77. model->setSize( 290, 290 );
  78. model->setPosition( 0, 230 );
  79. changeModel = initKnopf( 0, 520, 142, 20, zSchrift, Knopf::Style::Normal, "Model ändern" );
  80. changeModel->setMausEreignis( [ this ]( void *p, void *o, MausEreignis me )
  81. {
  82. if( me.id == ME_RLinks )
  83. {
  84. cs.lock();
  85. if( dialog )
  86. dialog->release();
  87. dialog = new ResourceDialog( new TextRenderer( schrift->getThis() ), SELECT_MODEL2D, (KarteDaten*)this->daten->getThis(), [ this ]( const char *path )
  88. {
  89. modelPath = path;
  90. model->setModel2D( this->daten->loadModelFromPath( modelPath ) );
  91. Textur2D *textur = new Textur2D();
  92. textur->setTexturZ( this->daten->loadBildFromPath( texturPath ) );
  93. model->zModel()->setTextur( textur );
  94. }, screenSize );
  95. cs.unlock();
  96. }
  97. return 1;
  98. } );
  99. changeTextur = initKnopf( 147, 520, 143, 20, zSchrift, Knopf::Style::Normal, "Textur ändern" );
  100. changeTextur->setMausEreignis( [ this ]( void *p, void *o, MausEreignis me )
  101. {
  102. if( me.id == ME_RLinks )
  103. {
  104. cs.lock();
  105. if( dialog )
  106. dialog->release();
  107. dialog = new ResourceDialog( new TextRenderer( schrift->getThis() ), SELECT_TEXTUR, (KarteDaten *)this->daten->getThis(), [ this ]( const char *path )
  108. {
  109. texturPath = path;
  110. Textur2D *textur = new Textur2D();
  111. textur->setTexturZ( this->daten->loadBildFromPath( texturPath ) );
  112. model->zModel()->setTextur( textur );
  113. }, screenSize );
  114. cs.unlock();
  115. }
  116. return 1;
  117. } );
  118. stabilitätT = initTextFeld( 0, 545, 100, 20, zSchrift, TextFeld::Style::Text, "Stabilität: " );
  119. stabilität = initTextFeld( 100, 545, 50, 20, zSchrift, TextFeld::Style::TextFeld, "" );
  120. energieT = initTextFeld( 0, 570, 100, 20, zSchrift, TextFeld::Style::Text, "Energie: " );
  121. energie = initTextFeld( 100, 570, 50, 20, zSchrift, TextFeld::Style::TextFeld, "" );
  122. energieRadiusT = initTextFeld( 0, 595, 100, 20, zSchrift, TextFeld::Style::Text, "Radius: " );
  123. energieRadius = initTextFeld( 100, 595, 50, 20, zSchrift, TextFeld::Style::TextFeld, "" );
  124. reparaturT = initTextFeld( 0, 620, 100, 20, zSchrift, TextFeld::Style::Text, "Reparatur: " );
  125. reparatur = initTextFeld( 100, 620, 50, 20, zSchrift, TextFeld::Style::TextFeld, "" );
  126. akkuLeistungT = initTextFeld( 0, 645, 100, 20, zSchrift, TextFeld::Style::Text, "Akku: " );
  127. akkuLeistung = initTextFeld( 100, 645, 50, 20, zSchrift, TextFeld::Style::TextFeld, "" );
  128. team = initAuswahlBox( 0, 670, 150, 20, zSchrift, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, {} );
  129. anz = daten->getTeamAnzahl();
  130. for( int i = 0; i < anz; i++ )
  131. team->addEintrag( daten->getTeamName( i ) );
  132. speichern = initKnopf( 0, 695, 100, 20, zSchrift, Knopf::Style::Normal, "Speichern" );
  133. speichern->setMausEreignis( [ this ]( void *p, void *o, MausEreignis me )
  134. {
  135. if( me.id == ME_RLinks )
  136. {
  137. ObjektDaten *o = this->daten->getObjekt( this->daten->getObjektIndexById( *objekte->zEintrag( objekte->getAuswahl() )->zText() ) );
  138. this->daten->getResourceIdFromPath( modelPath, [ this, o ]( int id )
  139. {
  140. o->m2d = id;
  141. this->daten->getResourceIdFromPath( texturPath, [ this, o ]( int id )
  142. {
  143. o->bild = id;
  144. o->maxStabilität = *stabilität->zText();
  145. o->maxEnergie = *energie->zText();
  146. o->energieRadius = *energieRadius->zText();
  147. o->reparatur = *reparatur->zText();
  148. o->akkuLeistung = *akkuLeistung->zText();
  149. o->team = team->getAuswahl();
  150. o->update();
  151. } );
  152. } );
  153. }
  154. return 1;
  155. } );
  156. selectObject( 0 );
  157. }
  158. ObjektTool::~ObjektTool()
  159. {
  160. cs.lock();
  161. if( dialog )
  162. dialog->release();
  163. if( dialog2 )
  164. dialog2->release();
  165. cs.unlock();
  166. objekte->release();
  167. neuesObjekt->release();
  168. model->release();
  169. changeModel->release();
  170. changeTextur->release();
  171. stabilitätT->release();
  172. stabilität->release();
  173. energieT->release();
  174. energie->release();
  175. energieRadiusT->release();
  176. energieRadius->release();
  177. reparaturT->release();
  178. reparatur->release();
  179. akkuLeistungT->release();
  180. akkuLeistung->release();
  181. team->release();
  182. speichern->release();
  183. daten->release();
  184. schrift->release();
  185. }
  186. void ObjektTool::doMausEreignis( MausEreignis & me )
  187. {
  188. bool vera = me.verarbeitet;
  189. if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
  190. me.verarbeitet = 1;
  191. Punkt tmpM( me.mx, me.my );
  192. me.mx = me.rmx;
  193. me.my = me.rmy;
  194. cs.lock();
  195. if( dialog )
  196. dialog->doMausEreignis( me );
  197. cs.unlock();
  198. me.mx = tmpM.x;
  199. me.my = tmpM.y;
  200. me.mx -= pos.x;
  201. me.my -= pos.y;
  202. int ausw = objekte->getAuswahl();
  203. akkuLeistung->doMausEreignis( me );
  204. objekte->doMausEreignis( me );
  205. if( objekte->getAuswahl() != ausw && objekte->getAuswahl() >= 0 )
  206. selectObject( *objekte->zEintrag( objekte->getAuswahl() )->zText() );
  207. if( objekte->getAuswahl() != ausw && objekte->getAuswahl() < 0 )
  208. selectObject( 0 );
  209. neuesObjekt->doMausEreignis( me );
  210. model->doMausEreignis( me );
  211. changeModel->doMausEreignis( me );
  212. changeTextur->doMausEreignis( me );
  213. stabilität->doMausEreignis( me );
  214. energie->doMausEreignis( me );
  215. energieRadius->doMausEreignis( me );
  216. reparatur->doMausEreignis( me );
  217. akkuLeistung->doMausEreignis( me );
  218. speichern->doMausEreignis( me );
  219. me.mx += pos.x;
  220. me.my += pos.y;
  221. if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
  222. me.verarbeitet = vera;
  223. RightTool::doMausEreignis( me );
  224. }
  225. void ObjektTool::doTastaturEreignis( TastaturEreignis & te )
  226. {
  227. if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
  228. return;
  229. cs.lock();
  230. if( dialog )
  231. dialog->doTastaturEreignis( te );
  232. cs.unlock();
  233. model->doTastaturEreignis( te );
  234. stabilität->doTastaturEreignis( te );
  235. energie->doTastaturEreignis( te );
  236. energieRadius->doTastaturEreignis( te );
  237. reparatur->doTastaturEreignis( te );
  238. akkuLeistung->doTastaturEreignis( te );
  239. }
  240. bool ObjektTool::tick( double tickVal )
  241. {
  242. if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
  243. return RightTool::tick( tickVal );
  244. cs.lock();
  245. if( dialog )
  246. rend |= dialog->tick( tickVal );
  247. cs.unlock();
  248. rend |= objekte->tick( tickVal );
  249. rend |= neuesObjekt->tick( tickVal );
  250. rend |= model->tick( tickVal );
  251. rend |= changeModel->tick( tickVal );
  252. rend |= changeTextur->tick( tickVal );
  253. rend |= stabilität->tick( tickVal );
  254. rend |= energie->tick( tickVal );
  255. rend |= energieRadius->tick( tickVal );
  256. rend |= reparatur->tick( tickVal );
  257. rend |= akkuLeistung->tick( tickVal );
  258. rend |= team->tick( tickVal );
  259. rend |= speichern->tick( tickVal );
  260. return RightTool::tick( tickVal );
  261. }
  262. void ObjektTool::render( Bild & rObj )
  263. {
  264. screenSize = rObj.getSize();
  265. if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
  266. return;
  267. if( rObj.setDrawOptions( pos, gr ) )
  268. {
  269. objekte->render( rObj );
  270. neuesObjekt->render( rObj );
  271. model->render( rObj );
  272. changeModel->render( rObj );
  273. changeTextur->render( rObj );
  274. stabilitätT->render( rObj );
  275. stabilität->render( rObj );
  276. energieT->render( rObj );
  277. energie->render( rObj );
  278. energieRadiusT->render( rObj );
  279. energieRadius->render( rObj );
  280. reparaturT->render( rObj );
  281. reparatur->render( rObj );
  282. akkuLeistungT->render( rObj );
  283. akkuLeistung->render( rObj );
  284. speichern->render( rObj );
  285. team->render( rObj );
  286. rObj.releaseDrawOptions();
  287. }
  288. }
  289. void ObjektTool::renderDialogs( Bild &rObj )
  290. {
  291. cs.lock();
  292. if( dialog )
  293. dialog->render( rObj );
  294. cs.unlock();
  295. }
  296. void ObjektTool::selectObject( int id )
  297. {
  298. if( id == 0 )
  299. {
  300. model->removeStyle( M2DVorschau::Style::Sichtbar );
  301. changeModel->removeStyle( M2DVorschau::Style::Sichtbar );
  302. changeTextur->removeStyle( M2DVorschau::Style::Sichtbar );
  303. stabilitätT->removeStyle( M2DVorschau::Style::Sichtbar );
  304. stabilität->removeStyle( M2DVorschau::Style::Sichtbar );
  305. energieT->removeStyle( M2DVorschau::Style::Sichtbar );
  306. energie->removeStyle( M2DVorschau::Style::Sichtbar );
  307. energieRadiusT->removeStyle( M2DVorschau::Style::Sichtbar );
  308. energieRadius->removeStyle( M2DVorschau::Style::Sichtbar );
  309. reparaturT->removeStyle( M2DVorschau::Style::Sichtbar );
  310. reparatur->removeStyle( M2DVorschau::Style::Sichtbar );
  311. akkuLeistungT->removeStyle( M2DVorschau::Style::Sichtbar );
  312. akkuLeistung->removeStyle( M2DVorschau::Style::Sichtbar );
  313. team->removeStyle( M2DVorschau::Style::Sichtbar );
  314. speichern->removeStyle( M2DVorschau::Style::Sichtbar );
  315. }
  316. else
  317. {
  318. int index = 0;
  319. int anz = objekte->getEintragAnzahl();
  320. for( int i = 0; i < anz; i++ )
  321. {
  322. if( objekte->zEintrag( i )->zText()->istGleich( Text( id ) ) )
  323. break;
  324. index++;
  325. }
  326. objekte->setAuswahl( index );
  327. ObjektDaten *o = daten->getObjekt( daten->getObjektIndexById( id ) );
  328. model->setModel2D( daten->loadModelFromRessource( o->m2d ) );
  329. modelPath = daten->getResource( daten->getResourceIndexById( o->m2d ) )->path;
  330. Textur2D *textur = new Textur2D();
  331. textur->setTexturZ( daten->loadBildFromRessource( o->bild ) );
  332. texturPath = daten->getResource( daten->getResourceIndexById( o->bild ) )->path;
  333. model->zModel()->setTextur( textur );
  334. stabilität->setText( Text( o->maxStabilität ) );
  335. energie->setText( Text( o->maxEnergie ) );
  336. energieRadius->setText( Text( o->energieRadius ) );
  337. reparatur->setText( Text( o->reparatur ) );
  338. akkuLeistung->setText( Text( o->akkuLeistung ) );
  339. team->setAuswahl( Text( o->team ) );
  340. model->addStyle( M2DVorschau::Style::Sichtbar );
  341. changeModel->addStyle( M2DVorschau::Style::Sichtbar );
  342. changeTextur->addStyle( M2DVorschau::Style::Sichtbar );
  343. stabilitätT->addStyle( M2DVorschau::Style::Sichtbar );
  344. stabilität->addStyle( M2DVorschau::Style::Sichtbar );
  345. energieT->addStyle( M2DVorschau::Style::Sichtbar );
  346. energie->addStyle( M2DVorschau::Style::Sichtbar );
  347. energieRadiusT->addStyle( M2DVorschau::Style::Sichtbar );
  348. energieRadius->addStyle( M2DVorschau::Style::Sichtbar );
  349. reparaturT->addStyle( M2DVorschau::Style::Sichtbar );
  350. reparatur->addStyle( M2DVorschau::Style::Sichtbar );
  351. akkuLeistungT->addStyle( M2DVorschau::Style::Sichtbar );
  352. akkuLeistung->addStyle( M2DVorschau::Style::Sichtbar );
  353. team->addStyle( M2DVorschau::Style::Sichtbar );
  354. speichern->addStyle( M2DVorschau::Style::Sichtbar );
  355. }
  356. }