Эх сурвалжийг харах

fehlerhafte reihenfolge des Ladens von Resourcen behoben

Kolja Strohm 4 жил өмнө
parent
commit
6ac3ba4158

+ 61 - 0
StickmanWorldOnline/Reader.cpp

@@ -27,6 +27,67 @@ MapReader::~MapReader()
         pfad->release();
 }
 
+Array<int> *MapReader::getSpielerFarben()
+{
+    Text *pf = new Text( pfad->getText() );
+    pf->append( "data.sts" );
+    Datei *datei = new Datei();
+    datei->setDatei( pf );
+    if( !datei->existiert() || datei->istOrdner() )
+    {
+        datei->release();
+        return 0;
+    }
+    int spielerAnzahl;
+    int teamAnzahl;
+    datei->open( Datei::Style::lesen );
+    datei->lese( (char *)& spielerAnzahl, 4 );
+    datei->lese( (char *)& teamAnzahl, 4 );
+    Array< int > *result = new Array< int >();
+    for( int i = 0; i < spielerAnzahl; i++ )
+    {
+        int f = 0;
+        datei->lese( (char *)& f, 4 );
+        result->add( f );
+    }
+    datei->close();
+    datei->release();
+    return result;
+}
+
+Array<int> *MapReader::getTeamFarben()
+{
+    Text *pf = new Text( pfad->getText() );
+    pf->append( "data.sts" );
+    Datei *datei = new Datei();
+    datei->setDatei( pf );
+    if( !datei->existiert() || datei->istOrdner() )
+    {
+        datei->release();
+        return 0;
+    }
+    int spielerAnzahl;
+    int teamAnzahl;
+    datei->open( Datei::Style::lesen );
+    datei->lese( (char *)& spielerAnzahl, 4 );
+    datei->lese( (char *)& teamAnzahl, 4 );
+    for( int i = 0; i < spielerAnzahl; i++ )
+    {
+        int f = 0;
+        datei->lese( (char *)& f, 4 );
+    }
+    Array< int > *result = new Array< int >();
+    for( int i = 0; i < teamAnzahl; i++ )
+    {
+        int f = 0;
+        datei->lese( (char *)& f, 4 );
+        result->add( f );
+    }
+    datei->close();
+    datei->release();
+    return result;
+}
+
 Aktion *MapReader::readAktion( Datei &dat )
 {
     int id;

+ 2 - 0
StickmanWorldOnline/Reader.h

@@ -22,6 +22,8 @@ public:
     MapReader( int karteId, char *tmpPfad );
     // Destruktor
     ~MapReader();
+    Array< int > *getSpielerFarben();
+    Array< int > *getTeamFarben();
     // nicht constant
     void ladeKarte( Spiel *zSpiel );
     // Reference Counting

+ 30 - 23
StickmanWorldOnline/Spiel.cpp

@@ -462,11 +462,6 @@ void Spiel::ladeDaten()
     Sleep( 1000 );
     Text *gamePath = infoKlient->getDateiGruppePfad( infoKlient->getDateiGruppeIdVonSpiel( infoKlient->getSpielId( karteId ) ) );
     Text mapPf = Text( "data/tmp/Karten/" ) + karteId + "/spiel/files";
-    MapReader *reader = new MapReader( karteId, Text( "data/tmp/Karten/" ) + karteId + "/spiel/data/" );
-    // loading map
-    reader->ladeKarte( this );
-    spielKlient->setLadenProzent( 50 );
-    reader->release();
     // loading resources
     if( resources )
         resources->release();
@@ -531,33 +526,45 @@ void Spiel::ladeDaten()
     resources->zResource( R_GUI_LEBEN_RAND, 0, new ColorMode(), "spiel:/bilder/gui.ltdb/lebenrand.png" );
     resources->zResource( R_GUI_LEVEL_RAND, 0, new ColorMode(), "spiel:/bilder/gui.ltdb/levelrand.png" );
     resources->zResource( R_GUI_SPIELER, 0, new ColorMode(), "spiel:/bilder/gui.ltdb/spieler.png" );
-    spielKlient->setLadenProzent( 70 );
+    spielKlient->setLadenProzent( 20 );
+
+    MapReader *reader = new MapReader( karteId, Text( "data/tmp/Karten/" ) + karteId + "/spiel/data/" );
     // apply team color filters
+    Array<int> *colors = reader->getTeamFarben();
     AlphaColorMode *alphaMode = new AlphaColorMode( 0x77 );
-    for( auto t = teams.getIterator(); t; t++ )
+    for( auto c = colors->getIterator(); c; c++ )
     {
-        resources->zResource( R_BARIERE, t->getFarbe(), alphaMode->getThis() );
-        resources->zResource( R_BASE, t->getFarbe(), alphaMode->getThis() );
+        resources->zResource( R_BARIERE, c._, alphaMode->getThis() );
+        resources->zResource( R_BASE, c._, alphaMode->getThis() );
     }
+    colors->release();
     alphaMode->release();
-    spielKlient->setLadenProzent( 80 );
+    spielKlient->setLadenProzent( 35 );
     // apply player color filters
+    colors = reader->getSpielerFarben();
     MaskColorMode *maskMode = new MaskColorMode( 0xFFFFFF );
-    for( auto s = spieler.getIterator(); s; s++ )
+    for( auto c = colors->getIterator(); c; c++ )
     {
-        resources->zResource( R_ROLLE_OBEN, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_ROLLE_LINKS, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_ROLLE_RECHTS, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_ROLLE_UNTEN, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_STURM_OBEN, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_STURM_LINKS, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_STURM_RECHTS, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_STURM_UNTEN, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_SPIELER_STIRBT, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_SPIELER, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_SPIELER_RECHTS, s->getFarbe(), maskMode->getThis() );
-        resources->zResource( R_SPIELER_LINKS, s->getFarbe(), maskMode->getThis() );
+        resources->zResource( R_ROLLE_OBEN, c._, maskMode->getThis() );
+        resources->zResource( R_ROLLE_LINKS, c._, maskMode->getThis() );
+        resources->zResource( R_ROLLE_RECHTS, c._, maskMode->getThis() );
+        resources->zResource( R_ROLLE_UNTEN, c._, maskMode->getThis() );
+        resources->zResource( R_STURM_OBEN, c._, maskMode->getThis() );
+        resources->zResource( R_STURM_LINKS, c._, maskMode->getThis() );
+        resources->zResource( R_STURM_RECHTS, c._, maskMode->getThis() );
+        resources->zResource( R_STURM_UNTEN, c._, maskMode->getThis() );
+        resources->zResource( R_SPIELER_STIRBT, c._, maskMode->getThis() );
+        resources->zResource( R_SPIELER, c._, maskMode->getThis() );
+        resources->zResource( R_SPIELER_RECHTS, c._, maskMode->getThis() );
+        resources->zResource( R_SPIELER_LINKS, c._, maskMode->getThis() );
     }
+    colors->release();
+    spielKlient->setLadenProzent( 50 );
+    // loading map
+    reader->ladeKarte( this );
+    spielKlient->setLadenProzent( 99 );
+    reader->release();
+
     resources->setSchrift( schrift->getThis() );
     spielerGUI = new SpielerGUI( resources );
     maskMode->release();