|
@@ -5,6 +5,42 @@
|
|
|
|
|
|
using namespace Editor;
|
|
|
|
|
|
+EditorObject::EditorObject()
|
|
|
+ : Model2DObject()
|
|
|
+{}
|
|
|
+
|
|
|
+EditorObject::~EditorObject()
|
|
|
+{}
|
|
|
+
|
|
|
+
|
|
|
+EdSpieler::EdSpieler( SpielerDaten *model )
|
|
|
+ : EditorObject()
|
|
|
+{
|
|
|
+ mdl = model;
|
|
|
+}
|
|
|
+
|
|
|
+EdSpieler::~EdSpieler()
|
|
|
+{}
|
|
|
+
|
|
|
+void EdSpieler::update()
|
|
|
+{
|
|
|
+ mdl->pos = position;
|
|
|
+ mdl->rot = (double)rotation;
|
|
|
+ mdl->update();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+UpdateObserver::UpdateObserver( std::function< void() > f )
|
|
|
+{
|
|
|
+ this->f = f;
|
|
|
+}
|
|
|
+
|
|
|
+void UpdateObserver::update( Model *m )
|
|
|
+{
|
|
|
+ f();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
KarteDaten::KarteDaten( EditorKlient *client, SpielerTeamStruktur *sts )
|
|
|
: Thread()
|
|
|
{
|
|
@@ -21,7 +57,7 @@ KarteDaten::KarteDaten( EditorKlient *client, SpielerTeamStruktur *sts )
|
|
|
welt->setSize( 1 );
|
|
|
for( auto s = spieler.getIterator(); s; s++ )
|
|
|
{
|
|
|
- Model2DObject *model = new Model2DObject();
|
|
|
+ Model2DObject *model = new EdSpieler( s._ );
|
|
|
Bild *bild;
|
|
|
int fc = sts->spielerFarbe->get( s->id - 1 );
|
|
|
for( auto r = resources.getIterator(); r; r++ )
|
|
@@ -53,6 +89,36 @@ KarteDaten::KarteDaten( EditorKlient *client, SpielerTeamStruktur *sts )
|
|
|
model->setPosition( s->pos );
|
|
|
model->setCollision( 0 );
|
|
|
welt->addObject( model );
|
|
|
+ SpielerDaten *d = s._;
|
|
|
+ d->addView( new UpdateObserver( [ this, d ]()
|
|
|
+ {
|
|
|
+ aktionen.add( [ this, d ]()
|
|
|
+ {
|
|
|
+ this->client->saveSpieler( d );
|
|
|
+ } );
|
|
|
+ } ) );
|
|
|
+ }
|
|
|
+ for( auto t = teams.getIterator(); t; t++ )
|
|
|
+ {
|
|
|
+ TeamDaten *d = t._;
|
|
|
+ d->addView( new UpdateObserver( [ this, d ]()
|
|
|
+ {
|
|
|
+ aktionen.add( [ this, d ]()
|
|
|
+ {
|
|
|
+ this->client->saveTeam( d );
|
|
|
+ } );
|
|
|
+ } ) );
|
|
|
+ }
|
|
|
+ for( auto o = objekte.getIterator(); o; o++ )
|
|
|
+ {
|
|
|
+ ObjektDaten *d = o._;
|
|
|
+ d->addView( new UpdateObserver( [ this, d ]()
|
|
|
+ {
|
|
|
+ aktionen.add( [ this, d ]()
|
|
|
+ {
|
|
|
+ this->client->saveObjekt( d );
|
|
|
+ } );
|
|
|
+ } ) );
|
|
|
}
|
|
|
exit = 0;
|
|
|
start();
|
|
@@ -103,51 +169,6 @@ void KarteDaten::removeObjekt( int index )
|
|
|
cs.unlock();
|
|
|
}
|
|
|
|
|
|
-void KarteDaten::getObjekt( int index, std::function< bool( ObjektDaten * ) > callBack )
|
|
|
-{
|
|
|
- cs.lock();
|
|
|
- if( callBack( objekte.get( index ) ) )
|
|
|
- {
|
|
|
- ObjektDaten td = *objekte.get( index );
|
|
|
- EditorKlient *c = client;
|
|
|
- aktionen.add( [ td, c ]()
|
|
|
- {
|
|
|
- c->saveObjekt( &td );
|
|
|
- } );
|
|
|
- }
|
|
|
- cs.unlock();
|
|
|
-}
|
|
|
-
|
|
|
-void KarteDaten::getSpieler( int index, std::function< bool( SpielerDaten * ) > callBack )
|
|
|
-{
|
|
|
- cs.lock();
|
|
|
- if( callBack( spieler.get( index ) ) )
|
|
|
- {
|
|
|
- SpielerDaten td = *spieler.get( index );
|
|
|
- EditorKlient *c = client;
|
|
|
- aktionen.add( [ td, c ]()
|
|
|
- {
|
|
|
- c->saveSpieler( &td );
|
|
|
- } );
|
|
|
- }
|
|
|
- cs.unlock();
|
|
|
-}
|
|
|
-
|
|
|
-void KarteDaten::getTeam( int index, std::function< bool( TeamDaten * ) > callBack )
|
|
|
-{
|
|
|
- cs.lock();
|
|
|
- if( callBack( teams.get( index ) ) )
|
|
|
- {
|
|
|
- TeamDaten td = *teams.get( index );
|
|
|
- EditorKlient *c = client;
|
|
|
- aktionen.add( [ td, c ]()
|
|
|
- {
|
|
|
- c->saveTeam( &td );
|
|
|
- } );
|
|
|
- }
|
|
|
- cs.unlock();
|
|
|
-}
|
|
|
-
|
|
|
void KarteDaten::thread()
|
|
|
{
|
|
|
while( !exit )
|