Kolja Strohm 5 роки тому
батько
коміт
af4e3611da

+ 1 - 1
Asteroids/Editor/Abstract/Model.h

@@ -6,7 +6,7 @@ class View;
 
 class Model
 {
-private:
+protected:
     Framework::RCArray< View > *views;
 
 public:

+ 19 - 22
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 );
+    m2v->setStyle( M2DVorschau::Style::Rahmen | M2DVorschau::Style::UsrRot | M2DVorschau::Style::UsrMove | M2DVorschau::Style::Erlaubt );
     m2v->setSize( 390, 390 );
     m2v->setPosition( 5, 30 );
 
@@ -53,28 +53,23 @@ ResourceDialog::ResourceDialog( TextRenderer *tr, ResourceDialogType typ, Editor
             unusedPaths->release();
         } );
     }
-    if( paths->getEintragAnzahl() )
+    Text path = paths->zEintragText( 0 )->getText();
+    if( path.hat( ".ltdb/" ) )
     {
-        Text path = paths->zEintragText( 0 )->getText();
-        if( path.hat( ".ltdb/" ) )
-        {
-            m2v->removeStyle( Zeichnung::Style::Sichtbar );
-            bv->setBild( this->daten->loadBildFromPath( path.getText() ) );
-            bv->addStyle( Zeichnung::Style::Sichtbar );
-        }
-        else if( path.hat( ".m2/" ) )
-        {
-            bv->removeStyle( Zeichnung::Style::Sichtbar );
-            m2v->setModel2D( this->daten->loadModelFromPath( path.getText() ) );
-            m2v->zModel()->addStyle( Model2D::Style::Sichtbar | Model2D::Style::Mesh | Model2D::Style::Erlaubt );
-            m2v->zModel()->setFarbe( 0xFFFFFFFF );
-            m2v->addStyle( Zeichnung::Style::Sichtbar );
-        }
-        else
-        {
-            m2v->removeStyle( Zeichnung::Style::Sichtbar );
-            bv->removeStyle( Zeichnung::Style::Sichtbar );
-        }
+        bv->setBild( this->daten->loadBildFromPath( path.getText() ) );
+        bv->addStyle( Zeichnung::Style::Sichtbar );
+    }
+    else if( path.hat( ".m2/" ) )
+    {
+        m2v->setModel2D( this->daten->loadModelFromPath( path.getText() ) );
+        m2v->zModel()->addStyle( Model2D::Style::Sichtbar | Model2D::Style::Mesh | Model2D::Style::Erlaubt );
+        m2v->zModel()->setFarbe( 0xFFFFFFFF );
+        m2v->addStyle( Zeichnung::Style::Sichtbar );
+    }
+    else
+    {
+        m2v->removeStyle( Zeichnung::Style::Sichtbar );
+        bv->removeStyle( Zeichnung::Style::Sichtbar );
     }
     paths->setEventAktion( [ this ]( void *p, AuswahlBox * a, int unused, int auswahl )
     {
@@ -89,6 +84,8 @@ ResourceDialog::ResourceDialog( TextRenderer *tr, ResourceDialogType typ, Editor
         {
             bv->removeStyle( Zeichnung::Style::Sichtbar );
             m2v->setModel2D( this->daten->loadModelFromPath( path.getText() ) );
+            m2v->zModel()->addStyle( Model2D::Style::Sichtbar | Model2D::Style::Mesh | Model2D::Style::Erlaubt );
+            m2v->zModel()->setFarbe( 0xFFFFFFFF );
             m2v->addStyle( Zeichnung::Style::Sichtbar );
         }
         else

+ 4 - 0
Asteroids/Editor/Interface/RightTools/ObjektOptionen/ObjektOptionen.cpp

@@ -33,12 +33,16 @@ ObjektTool::ObjektTool( Schrift *zSchrift, KarteDaten *daten )
                 dialog->release();
             dialog = new ResourceDialog( new TextRenderer( schrift->getThis() ), SELECT_MODEL2D, (KarteDaten *)this->daten->getThis(), [ this ]( const char *modelPath )
             {
+                if( !modelPath )
+                    return;
                 cs.lock();
                 if( dialog2 )
                     dialog2->release();
                 dialog2 = dialog;
                 dialog = new ResourceDialog( new TextRenderer( schrift->getThis() ), SELECT_TEXTUR, (KarteDaten *)this->daten->getThis(), [ this, modelPath ]( const char *texturPath )
                 {
+                    if( !texturPath )
+                        return;
                     ObjektDaten o;
                     this->daten->getResourceIdFromPath( modelPath, [ this, &o, texturPath ]( int id )
                     {

+ 44 - 6
Asteroids/Editor/Karte/EditorKarte.cpp

@@ -15,16 +15,34 @@ SpielerDaten::SpielerDaten()
     : Model()
 {}
 
+SpielerDaten::SpielerDaten( const SpielerDaten & daten )
+{
+    *this = daten;
+    views->getThis();
+}
+
 
 TeamDaten::TeamDaten()
     : Model()
 {}
 
+TeamDaten::TeamDaten( const TeamDaten & daten )
+{
+    *this = daten;
+    views->getThis();
+}
+
 
 ObjektDaten::ObjektDaten()
     : Model()
 {}
 
+ObjektDaten::ObjektDaten( const ObjektDaten &daten )
+{
+    *this = daten;
+    views->getThis();
+}
+
 
 EditorObject::EditorObject()
     : Model2DObject()
@@ -222,7 +240,21 @@ void KarteDaten::addObjekt( ObjektDaten & daten, std::function< void( int ) > ca
 {
     ObjektDaten *nd = new ObjektDaten( daten );
     cs.lock();
-    nd->id = objekte.getEintragAnzahl() + 1;
+    nd->id = 0;
+    bool found = 0;
+    do
+    {
+        nd->id++;
+        found = 0;
+        for( auto o = objekte.getIterator(); o; o++ )
+        {
+            if( o->id == nd->id )
+            {
+                found = 1;
+                break;
+            }
+        }
+    } while( found );
     objekte.add( nd );
     Model2DObject *model = new EdObjekt( nd );
     Bild *bild;
@@ -253,24 +285,30 @@ void KarteDaten::addObjekt( ObjektDaten & daten, std::function< void( int ) > ca
             for( auto r = resources.getIterator(); r; r++ )
             {
                 if( r->id == nd->m2d )
-                    model->setModel( this->client->loadModel( r->path ) );
+                {
+                    Model2DData *d = this->client->loadModel( r->path );
+                    cs.lock();
+                    model->setModel( d );
+                    cs.unlock();
+                }
                 if( r->id == nd->bild )
                     bild = this->client->loadBild( r->path );
             }
             if( bild )
             {
                 Textur2D *textur = new Textur2D();
+                cs.lock();
                 textur->setTexturZ( bild );
+                cs.unlock();
                 model->setTextur( textur );
             }
         } );
     } ) );
-    ObjektDaten td = *nd;
     EditorKlient *c = client;
-    aktionen.add( [ td, c, callBack ]()
+    aktionen.add( [ nd, c, callBack ]()
     {
-        if( c->saveObjekt( &td ) )
-            callBack( td.id );
+        if( c->saveObjekt( nd ) )
+            callBack( nd->id );
         else
             callBack( 0 );
     } );

+ 3 - 0
Asteroids/Editor/Karte/EditorKarte.h

@@ -40,6 +40,7 @@ namespace Editor
         int bild;
 
         SpielerDaten();
+        SpielerDaten( const SpielerDaten &daten );
     };
 
     struct TeamDaten : public Model
@@ -61,6 +62,7 @@ namespace Editor
         int punkte;
 
         TeamDaten();
+        TeamDaten( const TeamDaten &daten );
     };
 
     struct ObjektDaten : public Model
@@ -80,6 +82,7 @@ namespace Editor
         char team;
 
         ObjektDaten();
+        ObjektDaten( const ObjektDaten &daten );
     };
 
     class EditorObject : public Model2DObject

+ 2 - 0
Asteroids/Editor/Netzwerk/EditorKlient.cpp

@@ -675,6 +675,8 @@ void EditorKlient::loadMapResourcePathsFromFolder( const char *folderPath, RCArr
         {
             klient->deOrdnerÖffnen( f );
             loadMapResourcePathsFromFolder( path, zPaths );
+            Text back = "..";
+            klient->deOrdnerÖffnen( &back );
         }
         else if( f->hat( ".ltdb" ) )
         {