Jelajahi Sumber

Anzeigefehler behoben

Kolja Strohm 5 tahun lalu
induk
melakukan
2ab75fadcb

+ 1 - 1
Asteroids/Editor/Interface/Dialogs/ResourceDialog.cpp

@@ -18,7 +18,7 @@ ResourceDialog::ResourceDialog( TextRenderer *tr, ResourceDialogType typ, Editor
     setPosition( screenSize / 2 - getSize() / 2 );
 
     m2v = new M2DVorschau();
-    m2v->setStyle( M2DVorschau::Style::Rahmen | M2DVorschau::Style::UsrRot | M2DVorschau::Style::UsrMove | M2DVorschau::Style::Erlaubt );
+    m2v->setStyle( M2DVorschau::Style::Rahmen | M2DVorschau::Style::UsrRot | M2DVorschau::Style::UsrScale | M2DVorschau::Style::Erlaubt );
     m2v->setSize( 390, 390 );
     m2v->setPosition( 5, 30 );
 

+ 12 - 6
Asteroids/Editor/Interface/RightTools/ObjektOptionen/ObjektOptionen.cpp

@@ -80,7 +80,7 @@ ObjektTool::ObjektTool( Schrift *zSchrift, KarteDaten *daten )
         return 1;
     } );
     model = new M2DVorschau();
-    model->setStyle( M2DVorschau::Style::Rahmen | M2DVorschau::Style::UsrRot | M2DVorschau::Style::UsrMove | M2DVorschau::Style::Erlaubt );
+    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, zSchrift, Knopf::Style::Normal, "Model ändern" );
@@ -96,10 +96,14 @@ ObjektTool::ObjektTool( Schrift *zSchrift, KarteDaten *daten )
                 if( !path )
                     return;
                 modelPath = path;
-                model->setModel2D( this->daten->loadModelFromPath( modelPath ) );
+                Model2DData *data = this->daten->loadModelFromPath( modelPath );
                 Textur2D *textur = new Textur2D();
                 textur->setTexturZ( this->daten->loadBildFromPath( texturPath ) );
-                model->zModel()->setTextur( textur );
+                model->postAction( [ this, data, textur ]()
+                {
+                    model->setModel2D( data );
+                    model->zModel()->setTextur( textur );
+                } );
             }, screenSize );
             cs.unlock();
         }
@@ -120,7 +124,10 @@ ObjektTool::ObjektTool( Schrift *zSchrift, KarteDaten *daten )
                 texturPath = path;
                 Textur2D *textur = new Textur2D();
                 textur->setTexturZ( this->daten->loadBildFromPath( texturPath ) );
-                model->zModel()->setTextur( textur );
+                model->postAction( [ this, textur ]()
+                {
+                    model->zModel()->setTextur( textur );
+                } );
             }, screenSize );
             cs.unlock();
         }
@@ -344,8 +351,7 @@ void ObjektTool::selectObject( int id )
         objekte->setAuswahl( index );
         ObjektDaten *o = daten->getObjekt( daten->getObjektIndexById( id ) );
         model->setModel2D( daten->loadModelFromRessource( o->m2d ) );
-        model->zModel()->addStyle( Model2D::Style::Sichtbar | Model2D::Style::Mesh | Model2D::Style::Erlaubt );
-        model->zModel()->setFarbe( 0xFFFFFFFF );
+        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 ) );

+ 32 - 15
Asteroids/Editor/Karte/EditorKarte.cpp

@@ -197,19 +197,31 @@ KarteDaten::KarteDaten( EditorKlient *client, SpielerTeamStruktur *sts )
             aktionen.add( [ this, d, model ]()
             {
                 this->client->saveObjekt( d );
-                Bild *bild;
+                Bild *bild = 0;
+                Model2DData *da = 0;
                 for( auto r = resources.getIterator(); r; r++ )
                 {
                     if( r->id == d->m2d )
-                        model->setModel( this->client->loadModel( r->path ) );
+                        da = this->client->loadModel( r->path );
                     if( r->id == d->bild )
                         bild = this->client->loadBild( r->path );
                 }
-                if( bild )
+                if( bild && da )
                 {
                     Textur2D *textur = new Textur2D();
                     textur->setTexturZ( bild );
-                    model->setTextur( textur );
+                    model->postAction( [ model, da, textur ]()
+                    {
+                        model->setModel( da );
+                        model->setTextur( textur );
+                    } );
+                }
+                else
+                {
+                    if( bild )
+                        bild->release();
+                    if( da )
+                        da->release();
                 }
             } );
         } ) );
@@ -281,26 +293,31 @@ void KarteDaten::addObjekt( ObjektDaten & daten, std::function< void( int ) > ca
         aktionen.add( [ this, nd, model ]()
         {
             this->client->saveObjekt( nd );
-            Bild *bild;
+            Bild *bild = 0;
+            Model2DData *d = 0;
             for( auto r = resources.getIterator(); r; r++ )
             {
                 if( r->id == nd->m2d )
-                {
-                    Model2DData *d = this->client->loadModel( r->path );
-                    cs.lock();
-                    model->setModel( d );
-                    cs.unlock();
-                }
+                    d = this->client->loadModel( r->path );
                 if( r->id == nd->bild )
                     bild = this->client->loadBild( r->path );
             }
-            if( bild )
+            if( bild && d )
             {
                 Textur2D *textur = new Textur2D();
-                cs.lock();
                 textur->setTexturZ( bild );
-                cs.unlock();
-                model->setTextur( textur );
+                model->postAction( [ model, d, textur ]()
+                {
+                    model->setModel( d );
+                    model->setTextur( textur );
+                } );
+            }
+            else
+            {
+                if( bild )
+                    bild->release();
+                if( d )
+                    d->release();
             }
         } );
     } ) );