123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 |
- #include "ObjektOptionen.h"
- #include "../../../../Initialisierung/Initialisierung.h"
- #include <Textur2D.h>
- using namespace Editor;
- ObjektTool::ObjektTool( UIInit &uiFactory, KarteDaten *daten )
- : RightTool()
- {
- dialog = 0;
- dialog2 = 0;
- this->uiFactory = uiFactory;
- this->daten = daten;
- objekte = uiFactory.createAuswahlListe( uiFactory.initParam );
- objekte->setStyle( ( AuswahlListe::Style::Normal & ~AuswahlListe::Style::FeldHAlpha ) | AuswahlBox::Style::VScroll );
- objekte->setSize( 290, 200 );
- objekte->setVertikalKlickScroll( 1 );
- int anz = daten->getObjektAnzahl();
- for( int i = 0; i < anz; i++ )
- {
- const ObjektDaten *o = daten->getObjekt( i );
- objekte->addEintrag( Text( o->id ) );
- }
- neuesObjekt = initKnopf( 0, 205, 290, 20, uiFactory, Knopf::Style::Normal, "Neues Objekt erstellen" );
- neuesObjekt->setMausEreignis( [this, &uiFactory]( void *p, void *o, MausEreignis me )
- {
- if( me.id == ME_RLinks )
- {
- cs.lock();
- if( dialog )
- dialog->release();
- dialog = new ResourceDialog( new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) ), uiFactory, SELECT_MODEL2D, dynamic_cast<KarteDaten *>( this->daten->getThis() ), [this, &uiFactory]( const char *modelPath )
- {
- if( !modelPath )
- return;
- cs.lock();
- if( dialog2 )
- dialog2->release();
- dialog2 = dialog;
- dialog = new ResourceDialog( new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) ), uiFactory, SELECT_TEXTUR, dynamic_cast<KarteDaten *>( this->daten->getThis() ), [this, modelPath]( const char *texturPath )
- {
- if( !texturPath )
- return;
- this->daten->getResourceIdFromPath( modelPath, [this, texturPath]( int modelId )
- {
- this->daten->getResourceIdFromPath( texturPath, [this, modelId]( int texturId )
- {
- ObjektDaten o = ObjektDaten();
- o.m2d = modelId;
- o.bild = texturId;
- o.scale = 1;
- o.maxStabilität = 100;
- o.maxEnergie = 100;
- o.energieRadius = 0;
- o.reparatur = 0;
- o.akkuLeistung = 0;
- o.team = this->daten->getTeam( 0 )->id;
- o.pos.x = 0;
- o.pos.y = 0;
- o.rot = 0;
- o.style = 0;
- this->daten->addObjekt( o, [this]( int id )
- {
- objekte->addEintrag( Text( id ) );
- selectObject( id );
- } );
- } );
- } );
- }, screenSize );
- cs.unlock();
- }, screenSize );
- cs.unlock();
- }
- return 1;
- } );
- model = new M2DVorschau();
- model->setStyle( M2DVorschau::Style::Rahmen | M2DVorschau::Style::UsrRot | M2DVorschau::Style::UsrScale | M2DVorschau::Style::Erlaubt );
- model->setSize( 290, 290 );
- model->setPosition( 0, 230 );
- changeModel = initKnopf( 0, 520, 142, 20, uiFactory, Knopf::Style::Normal, "Model ändern" );
- changeModel->setMausEreignis( [this, &uiFactory]( void *p, void *o, MausEreignis me )
- {
- if( me.id == ME_RLinks )
- {
- cs.lock();
- if( dialog )
- dialog->release();
- dialog = new ResourceDialog( new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) ), uiFactory, SELECT_MODEL2D, dynamic_cast<KarteDaten *>( this->daten->getThis() ), [this]( const char *path )
- {
- if( !path )
- return;
- modelPath = path;
- Model2DData *data = this->daten->loadModelFromPath( modelPath );
- Textur2D *textur = new Textur2D();
- textur->setTexturZ( this->daten->loadBildFromPath( texturPath ) );
- model->postAction( [this, data, textur]()
- {
- model->setModel2D( data );
- model->zModel()->setTextur( textur );
- } );
- }, screenSize );
- cs.unlock();
- }
- return 1;
- } );
- changeTextur = initKnopf( 147, 520, 143, 20, uiFactory, Knopf::Style::Normal, "Textur ändern" );
- changeTextur->setMausEreignis( [this, &uiFactory]( void *p, void *o, MausEreignis me )
- {
- if( me.id == ME_RLinks )
- {
- cs.lock();
- if( dialog )
- dialog->release();
- dialog = new ResourceDialog( new TextRenderer( dynamic_cast<Schrift *>( uiFactory.initParam.schrift->getThis() ) ), uiFactory, SELECT_TEXTUR, dynamic_cast<KarteDaten *>( this->daten->getThis() ), [this]( const char *path )
- {
- if( !path )
- return;
- texturPath = path;
- Textur2D *textur = new Textur2D();
- textur->setTexturZ( this->daten->loadBildFromPath( texturPath ) );
- model->postAction( [this, textur]()
- {
- model->zModel()->setTextur( textur );
- } );
- }, screenSize );
- cs.unlock();
- }
- return 1;
- } );
- stabilitätT = initTextFeld( 0, 545, 100, 20, uiFactory, TextFeld::Style::Text, "Stabilität: " );
- stabilität = initTextFeld( 100, 545, 50, 20, uiFactory, TextFeld::Style::TextFeld, "" );
- energieT = initTextFeld( 0, 570, 100, 20, uiFactory, TextFeld::Style::Text, "Energie: " );
- energie = initTextFeld( 100, 570, 50, 20, uiFactory, TextFeld::Style::TextFeld, "" );
- energieRadiusT = initTextFeld( 0, 595, 100, 20, uiFactory, TextFeld::Style::Text, "Radius: " );
- energieRadius = initTextFeld( 100, 595, 50, 20, uiFactory, TextFeld::Style::TextFeld, "" );
- reparaturT = initTextFeld( 0, 620, 100, 20, uiFactory, TextFeld::Style::Text, "Reparatur: " );
- reparatur = initTextFeld( 100, 620, 50, 20, uiFactory, TextFeld::Style::TextFeld, "" );
- akkuLeistungT = initTextFeld( 0, 645, 100, 20, uiFactory, TextFeld::Style::Text, "Akku: " );
- akkuLeistung = initTextFeld( 100, 645, 50, 20, uiFactory, TextFeld::Style::TextFeld, "" );
- team = initAuswahlBox( 0, 670, 150, 20, uiFactory, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, {} );
- anz = daten->getTeamAnzahl();
- for( int i = 0; i < anz; i++ )
- team->addEintrag( daten->getTeamName( i ) );
- verwundbar = initKontrollKnopf( 0, 695, 145, 20, uiFactory, KontrollKnopf::Style::Normal, "Verwundbar" );
- beweglich = initKontrollKnopf( 150, 695, 145, 20, uiFactory, KontrollKnopf::Style::Normal, "Beweglich" );
- collision = initKontrollKnopf( 0, 720, 145, 20, uiFactory, KontrollKnopf::Style::Normal, "Kollision" );
- laserCollision = initKontrollKnopf( 150, 720, 145, 20, uiFactory, KontrollKnopf::Style::Normal, "Laser Kollision" );
- neutral = initKontrollKnopf( 0, 745, 145, 20, uiFactory, KontrollKnopf::Style::Normal, "Neutral" );
- erfahrung = initKontrollKnopf( 150, 745, 145, 20, uiFactory, KontrollKnopf::Style::Normal, "Treffer Erfahrung" );
- lebensAnzeige = initKontrollKnopf( 0, 770, 145, 20, uiFactory, KontrollKnopf::Style::Normal, "Lebensanzeige" );
- speichern = initKnopf( 0, 795, 100, 20, uiFactory, Knopf::Style::Normal, "Speichern" );
- speichern->setMausEreignis( [this]( void *p, void *o, MausEreignis me )
- {
- if( me.id == ME_RLinks )
- {
- ObjektDaten *o = this->daten->getObjekt( this->daten->getObjektIndexById( *objekte->zEintrag( objekte->getAuswahl() )->zText() ) );
- this->daten->getResourceIdFromPath( modelPath, [this, o]( int id )
- {
- o->m2d = id;
- this->daten->getResourceIdFromPath( texturPath, [this, o]( int id )
- {
- o->bild = id;
- o->maxStabilität = *stabilität->zText();
- o->maxEnergie = *energie->zText();
- o->energieRadius = *energieRadius->zText();
- o->reparatur = *reparatur->zText();
- o->akkuLeistung = *akkuLeistung->zText();
- o->team = team->getAuswahl();
- o->style = 0;
- if( verwundbar->hatStyle( KontrollKnopf::Style::Selected ) )
- o->style |= 0x1;
- if( beweglich->hatStyle( KontrollKnopf::Style::Selected ) )
- o->style |= 0x2;
- if( collision->hatStyle( KontrollKnopf::Style::Selected ) )
- o->style |= 0x4;
- if( laserCollision->hatStyle( KontrollKnopf::Style::Selected ) )
- o->style |= 0x8;
- if( neutral->hatStyle( KontrollKnopf::Style::Selected ) )
- o->style |= 0x10;
- if( erfahrung->hatStyle( KontrollKnopf::Style::Selected ) )
- o->style |= 0x20;
- if( lebensAnzeige->hatStyle( KontrollKnopf::Style::Selected ) )
- o->style |= 0x40;
- o->update();
- } );
- } );
- }
- return 1;
- } );
- löschen = initKnopf( 105, 795, 100, 20, uiFactory, Knopf::Style::Normal, "Löschen" );
- löschen->setMausEreignis( [this]( void *p, void *o, MausEreignis me )
- {
- if( me.id == ME_RLinks )
- {
- int ausw = objekte->getAuswahl();
- this->daten->removeObjekt( this->daten->getObjektIndexById( *objekte->zEintrag( objekte->getAuswahl() )->zText() ) );
- selectObject( 0 );
- objekte->removeEintrag( ausw );
- }
- return 1;
- } );
- selectObject( 0 );
- }
- ObjektTool::~ObjektTool()
- {
- cs.lock();
- if( dialog )
- dialog->release();
- if( dialog2 )
- dialog2->release();
- cs.unlock();
- objekte->release();
- neuesObjekt->release();
- model->release();
- changeModel->release();
- changeTextur->release();
- stabilitätT->release();
- stabilität->release();
- energieT->release();
- energie->release();
- energieRadiusT->release();
- energieRadius->release();
- reparaturT->release();
- reparatur->release();
- akkuLeistungT->release();
- akkuLeistung->release();
- team->release();
- verwundbar->release();
- beweglich->release();
- collision->release();
- laserCollision->release();
- neutral->release();
- erfahrung->release();
- lebensAnzeige->release();
- speichern->release();
- löschen->release();
- daten->release();
- }
- void ObjektTool::doPublicMausEreignis( MausEreignis &me )
- {
- bool vera = me.verarbeitet;
- if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
- me.verarbeitet = 1;
- Punkt tmpM( me.mx, me.my );
- me.mx = me.mx + screenSize.x - 300;
- me.my = me.my;
- cs.lock();
- if( dialog )
- dialog->doPublicMausEreignis( me );
- cs.unlock();
- me.mx = tmpM.x;
- me.my = tmpM.y;
- me.mx -= pos.x;
- me.my -= pos.y;
- team->doPublicMausEreignis( me );
- int ausw = objekte->getAuswahl();
- objekte->doPublicMausEreignis( me );
- if( objekte->getAuswahl() != ausw && objekte->getAuswahl() >= 0 )
- selectObject( *objekte->zEintrag( objekte->getAuswahl() )->zText() );
- if( objekte->getAuswahl() != ausw && objekte->getAuswahl() < 0 )
- selectObject( 0 );
- neuesObjekt->doPublicMausEreignis( me );
- model->doPublicMausEreignis( me );
- changeModel->doPublicMausEreignis( me );
- changeTextur->doPublicMausEreignis( me );
- stabilität->doPublicMausEreignis( me );
- energie->doPublicMausEreignis( me );
- energieRadius->doPublicMausEreignis( me );
- reparatur->doPublicMausEreignis( me );
- akkuLeistung->doPublicMausEreignis( me );
- verwundbar->doPublicMausEreignis( me );
- beweglich->doPublicMausEreignis( me );
- collision->doPublicMausEreignis( me );
- laserCollision->doPublicMausEreignis( me );
- neutral->doPublicMausEreignis( me );
- erfahrung->doPublicMausEreignis( me );
- lebensAnzeige->doPublicMausEreignis( me );
- speichern->doPublicMausEreignis( me );
- löschen->doPublicMausEreignis( me );
- me.mx += pos.x;
- me.my += pos.y;
- if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
- me.verarbeitet = vera;
- }
- void ObjektTool::doTastaturEreignis( TastaturEreignis &te )
- {
- if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
- return;
- cs.lock();
- if( dialog )
- dialog->doTastaturEreignis( te );
- cs.unlock();
- model->doTastaturEreignis( te );
- stabilität->doTastaturEreignis( te );
- energie->doTastaturEreignis( te );
- energieRadius->doTastaturEreignis( te );
- reparatur->doTastaturEreignis( te );
- akkuLeistung->doTastaturEreignis( te );
- }
- bool ObjektTool::tick( double tickVal )
- {
- if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
- return RightTool::tick( tickVal );
- cs.lock();
- if( dialog )
- rend |= dialog->tick( tickVal );
- cs.unlock();
- rend |= objekte->tick( tickVal );
- rend |= neuesObjekt->tick( tickVal );
- rend |= model->tick( tickVal );
- rend |= changeModel->tick( tickVal );
- rend |= changeTextur->tick( tickVal );
- rend |= stabilität->tick( tickVal );
- rend |= energie->tick( tickVal );
- rend |= energieRadius->tick( tickVal );
- rend |= reparatur->tick( tickVal );
- rend |= akkuLeistung->tick( tickVal );
- rend |= team->tick( tickVal );
- rend |= verwundbar->tick( tickVal );
- rend |= beweglich->tick( tickVal );
- rend |= collision->tick( tickVal );
- rend |= laserCollision->tick( tickVal );
- rend |= neutral->tick( tickVal );
- rend |= erfahrung->tick( tickVal );
- rend |= lebensAnzeige->tick( tickVal );
- rend |= speichern->tick( tickVal );
- rend |= löschen->tick( tickVal );
- return RightTool::tick( tickVal );
- }
- void ObjektTool::render( Bild &rObj )
- {
- screenSize = rObj.getSize();
- if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
- return;
- if( rObj.setDrawOptions( pos, gr ) )
- {
- objekte->render( rObj );
- neuesObjekt->render( rObj );
- model->render( rObj );
- changeModel->render( rObj );
- changeTextur->render( rObj );
- stabilitätT->render( rObj );
- stabilität->render( rObj );
- energieT->render( rObj );
- energie->render( rObj );
- energieRadiusT->render( rObj );
- energieRadius->render( rObj );
- reparaturT->render( rObj );
- reparatur->render( rObj );
- akkuLeistungT->render( rObj );
- akkuLeistung->render( rObj );
- verwundbar->render( rObj );
- beweglich->render( rObj );
- collision->render( rObj );
- laserCollision->render( rObj );
- neutral->render( rObj );
- erfahrung->render( rObj );
- lebensAnzeige->render( rObj );
- speichern->render( rObj );
- löschen->render( rObj );
- team->render( rObj );
- rObj.releaseDrawOptions();
- }
- }
- void ObjektTool::renderDialogs( Bild &rObj )
- {
- cs.lock();
- if( dialog )
- dialog->render( rObj );
- cs.unlock();
- }
- void ObjektTool::selectObject( int id )
- {
- if( id == 0 )
- {
- model->removeStyle( M2DVorschau::Style::Sichtbar );
- changeModel->removeStyle( M2DVorschau::Style::Sichtbar );
- changeTextur->removeStyle( M2DVorschau::Style::Sichtbar );
- stabilitätT->removeStyle( M2DVorschau::Style::Sichtbar );
- stabilität->removeStyle( M2DVorschau::Style::Sichtbar );
- energieT->removeStyle( M2DVorschau::Style::Sichtbar );
- energie->removeStyle( M2DVorschau::Style::Sichtbar );
- energieRadiusT->removeStyle( M2DVorschau::Style::Sichtbar );
- energieRadius->removeStyle( M2DVorschau::Style::Sichtbar );
- reparaturT->removeStyle( M2DVorschau::Style::Sichtbar );
- reparatur->removeStyle( M2DVorschau::Style::Sichtbar );
- akkuLeistungT->removeStyle( M2DVorschau::Style::Sichtbar );
- akkuLeistung->removeStyle( M2DVorschau::Style::Sichtbar );
- team->removeStyle( M2DVorschau::Style::Sichtbar );
- verwundbar->removeStyle( KontrollKnopf::Style::Sichtbar );
- beweglich->removeStyle( KontrollKnopf::Style::Sichtbar );
- collision->removeStyle( KontrollKnopf::Style::Sichtbar );
- laserCollision->removeStyle( KontrollKnopf::Style::Sichtbar );
- neutral->removeStyle( KontrollKnopf::Style::Sichtbar );
- erfahrung->removeStyle( KontrollKnopf::Style::Sichtbar );
- lebensAnzeige->removeStyle( KontrollKnopf::Style::Sichtbar );
- speichern->removeStyle( M2DVorschau::Style::Sichtbar );
- löschen->removeStyle( KontrollKnopf::Style::Sichtbar );
- }
- else
- {
- int index = 0;
- int anz = objekte->getEintragAnzahl();
- for( int i = 0; i < anz; i++ )
- {
- if( objekte->zEintrag( i )->zText()->istGleich( Text( id ) ) )
- break;
- index++;
- }
- objekte->setAuswahl( index );
- ObjektDaten *o = daten->getObjekt( daten->getObjektIndexById( id ) );
- model->setModel2D( daten->loadModelFromRessource( o->m2d ) );
- model->zModel()->addStyle( Model2D::Style::Sichtbar | Model2D::Style::Textur | Model2D::Style::Erlaubt );
- modelPath = daten->getResource( daten->getResourceIndexById( o->m2d ) )->path;
- Textur2D *textur = new Textur2D();
- textur->setTexturZ( daten->loadBildFromRessource( o->bild ) );
- texturPath = daten->getResource( daten->getResourceIndexById( o->bild ) )->path;
- model->zModel()->setTextur( textur );
- stabilität->setText( Text( o->maxStabilität ) );
- energie->setText( Text( o->maxEnergie ) );
- energieRadius->setText( Text( o->energieRadius ) );
- reparatur->setText( Text( o->reparatur ) );
- akkuLeistung->setText( Text( o->akkuLeistung ) );
- team->setAuswahl( Text( o->team ) );
- model->addStyle( M2DVorschau::Style::Sichtbar );
- verwundbar->setStyle( KontrollKnopf::Style::Selected, ( o->style | 0x1 ) == o->style );
- beweglich->setStyle( KontrollKnopf::Style::Selected, ( o->style | 0x2 ) == o->style );
- collision->setStyle( KontrollKnopf::Style::Selected, ( o->style | 0x4 ) == o->style );
- laserCollision->setStyle( KontrollKnopf::Style::Selected, ( o->style | 0x8 ) == o->style );
- neutral->setStyle( KontrollKnopf::Style::Selected, ( o->style | 0x10 ) == o->style );
- erfahrung->setStyle( KontrollKnopf::Style::Selected, ( o->style | 0x20 ) == o->style );
- lebensAnzeige->setStyle( KontrollKnopf::Style::Selected, ( o->style | 0x40 ) == o->style );
- changeModel->addStyle( M2DVorschau::Style::Sichtbar );
- changeTextur->addStyle( M2DVorschau::Style::Sichtbar );
- stabilitätT->addStyle( M2DVorschau::Style::Sichtbar );
- stabilität->addStyle( M2DVorschau::Style::Sichtbar );
- energieT->addStyle( M2DVorschau::Style::Sichtbar );
- energie->addStyle( M2DVorschau::Style::Sichtbar );
- energieRadiusT->addStyle( M2DVorschau::Style::Sichtbar );
- energieRadius->addStyle( M2DVorschau::Style::Sichtbar );
- reparaturT->addStyle( M2DVorschau::Style::Sichtbar );
- reparatur->addStyle( M2DVorschau::Style::Sichtbar );
- akkuLeistungT->addStyle( M2DVorschau::Style::Sichtbar );
- akkuLeistung->addStyle( M2DVorschau::Style::Sichtbar );
- team->addStyle( M2DVorschau::Style::Sichtbar );
- verwundbar->addStyle( KontrollKnopf::Style::Sichtbar );
- beweglich->addStyle( KontrollKnopf::Style::Sichtbar );
- collision->addStyle( KontrollKnopf::Style::Sichtbar );
- laserCollision->addStyle( KontrollKnopf::Style::Sichtbar );
- neutral->addStyle( KontrollKnopf::Style::Sichtbar );
- erfahrung->addStyle( KontrollKnopf::Style::Sichtbar );
- lebensAnzeige->addStyle( KontrollKnopf::Style::Sichtbar );
- speichern->addStyle( M2DVorschau::Style::Sichtbar );
- löschen->addStyle( KontrollKnopf::Style::Sichtbar );
- }
- }
|