|
@@ -5,189 +5,209 @@
|
|
// Konstruktor
|
|
// Konstruktor
|
|
Karte::Karte()
|
|
Karte::Karte()
|
|
{
|
|
{
|
|
- größe = Vec2< int >( 0, 0 );
|
|
|
|
- spielerAnzahl = 0;
|
|
|
|
- teamAnzahl = 0;
|
|
|
|
- spielerFarbe = new Array< int >();
|
|
|
|
- teamFarbe = new Array< int >();
|
|
|
|
- teamName = new RCArray< Text >();
|
|
|
|
- teamGröße = new Array< int >();
|
|
|
|
- ressources = new RCArray< RessourceStr >();
|
|
|
|
- objekte = new RCArray< ObjektStr >();
|
|
|
|
- spieler = new RCArray< SpielerStr >();
|
|
|
|
- teams = new RCArray< TeamStr >();
|
|
|
|
- ref = 1;
|
|
|
|
|
|
+ größe = Vec2< int >( 0, 0 );
|
|
|
|
+ spielerAnzahl = 0;
|
|
|
|
+ teamAnzahl = 0;
|
|
|
|
+ spielerFarbe = new Array< int >();
|
|
|
|
+ teamFarbe = new Array< int >();
|
|
|
|
+ teamName = new RCArray< Text >();
|
|
|
|
+ teamGröße = new Array< int >();
|
|
|
|
+ ressources = new RCArray< RessourceStr >();
|
|
|
|
+ objekte = new RCArray< ObjektStr >();
|
|
|
|
+ spieler = new RCArray< SpielerStr >();
|
|
|
|
+ teams = new RCArray< TeamStr >();
|
|
|
|
+ ref = 1;
|
|
}
|
|
}
|
|
|
|
|
|
// Destruktor
|
|
// Destruktor
|
|
Karte::~Karte()
|
|
Karte::~Karte()
|
|
{
|
|
{
|
|
- spielerFarbe->release();
|
|
|
|
- teamFarbe->release();
|
|
|
|
- teamName->release();
|
|
|
|
- teamGröße->release();
|
|
|
|
- ressources->release();
|
|
|
|
- objekte->release();
|
|
|
|
- spieler->release();
|
|
|
|
- teams->release();
|
|
|
|
|
|
+ spielerFarbe->release();
|
|
|
|
+ teamFarbe->release();
|
|
|
|
+ teamName->release();
|
|
|
|
+ teamGröße->release();
|
|
|
|
+ ressources->release();
|
|
|
|
+ objekte->release();
|
|
|
|
+ spieler->release();
|
|
|
|
+ teams->release();
|
|
}
|
|
}
|
|
|
|
|
|
// nicht constant
|
|
// nicht constant
|
|
void Karte::ladeSts( Datei *zDatei )
|
|
void Karte::ladeSts( Datei *zDatei )
|
|
{
|
|
{
|
|
- zDatei->lese( (char*)&spielerAnzahl, 4 );
|
|
|
|
- zDatei->lese( (char*)&teamAnzahl, 4 );
|
|
|
|
- spielerFarbe->leeren();
|
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
|
- {
|
|
|
|
- int farbe = 0;
|
|
|
|
- zDatei->lese( (char*)&farbe, 4 );
|
|
|
|
- spielerFarbe->set( farbe, i );
|
|
|
|
- }
|
|
|
|
- teamFarbe->leeren();
|
|
|
|
- for( int i = 0; i < teamAnzahl; i++ )
|
|
|
|
- {
|
|
|
|
- int farbe = 0;
|
|
|
|
- zDatei->lese( (char*)&farbe, 4 );
|
|
|
|
- teamFarbe->set( farbe, i );
|
|
|
|
- }
|
|
|
|
- teamName->leeren();
|
|
|
|
- for( int i = 0; i < teamAnzahl; i++ )
|
|
|
|
- {
|
|
|
|
- char län = 0;
|
|
|
|
- zDatei->lese( &län, 1 );
|
|
|
|
- char *txt = new char[ län + 1 ];
|
|
|
|
- txt[ (int)län ] = 0;
|
|
|
|
- zDatei->lese( txt, län );
|
|
|
|
- Text *name = new Text( txt );
|
|
|
|
- delete[] txt;
|
|
|
|
- teamName->set( name, i );
|
|
|
|
- }
|
|
|
|
- teamGröße->leeren();
|
|
|
|
- for( int i = 0; i < teamAnzahl; i++ )
|
|
|
|
- {
|
|
|
|
- int größe = 0;
|
|
|
|
- zDatei->lese( (char*)&größe, 4 );
|
|
|
|
- teamGröße->set( größe, i );
|
|
|
|
- }
|
|
|
|
|
|
+ zDatei->lese( (char*)&spielerAnzahl, 4 );
|
|
|
|
+ zDatei->lese( (char*)&teamAnzahl, 4 );
|
|
|
|
+ spielerFarbe->leeren();
|
|
|
|
+ for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
|
+ {
|
|
|
|
+ int farbe = 0;
|
|
|
|
+ zDatei->lese( (char*)&farbe, 4 );
|
|
|
|
+ spielerFarbe->set( farbe, i );
|
|
|
|
+ }
|
|
|
|
+ teamFarbe->leeren();
|
|
|
|
+ for( int i = 0; i < teamAnzahl; i++ )
|
|
|
|
+ {
|
|
|
|
+ int farbe = 0;
|
|
|
|
+ zDatei->lese( (char*)&farbe, 4 );
|
|
|
|
+ teamFarbe->set( farbe, i );
|
|
|
|
+ }
|
|
|
|
+ teamName->leeren();
|
|
|
|
+ for( int i = 0; i < teamAnzahl; i++ )
|
|
|
|
+ {
|
|
|
|
+ char län = 0;
|
|
|
|
+ zDatei->lese( &län, 1 );
|
|
|
|
+ char *txt = new char[ län + 1 ];
|
|
|
|
+ txt[ (int)län ] = 0;
|
|
|
|
+ zDatei->lese( txt, län );
|
|
|
|
+ Text *name = new Text( txt );
|
|
|
|
+ delete[] txt;
|
|
|
|
+ teamName->set( name, i );
|
|
|
|
+ }
|
|
|
|
+ teamGröße->leeren();
|
|
|
|
+ for( int i = 0; i < teamAnzahl; i++ )
|
|
|
|
+ {
|
|
|
|
+ int größe = 0;
|
|
|
|
+ zDatei->lese( (char*)&größe, 4 );
|
|
|
|
+ teamGröße->set( größe, i );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void Karte::ladeMap( Datei *zDatei, int mapId, KSGClient::SpielServerClient *zSpielKlient, Text *zGamePath )
|
|
void Karte::ladeMap( Datei *zDatei, int mapId, KSGClient::SpielServerClient *zSpielKlient, Text *zGamePath )
|
|
{
|
|
{
|
|
- int ressourceAnz = 0;
|
|
|
|
- zDatei->lese( (char*)&ressourceAnz, 4 );
|
|
|
|
- for( int i = 0; i < ressourceAnz; i++ )
|
|
|
|
- {
|
|
|
|
- ressources->add( new RessourceStr( zDatei, mapId, zGamePath ) );
|
|
|
|
- zSpielKlient->setLadenProzent( 15 + (int)( 65 * ( (double)( i + 1 ) / ressourceAnz ) + 0.5 ) );
|
|
|
|
- }
|
|
|
|
- zDatei->lese( (char*)&größe.x, 4 );
|
|
|
|
- zDatei->lese( (char*)&größe.y, 4 );
|
|
|
|
- int objektAnzahl = 0;
|
|
|
|
- zDatei->lese( (char*)&objektAnzahl, 4 );
|
|
|
|
- for( int i = 0; i < objektAnzahl; i++ )
|
|
|
|
- {
|
|
|
|
- objekte->add( new ObjektStr( zDatei ) );
|
|
|
|
- zSpielKlient->setLadenProzent( 70 + (int)( 10 * ( (double)( i + 1 ) / objektAnzahl ) + 0.5 ) );
|
|
|
|
- }
|
|
|
|
- for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
|
- {
|
|
|
|
- spieler->add( new SpielerStr( zDatei ) );
|
|
|
|
- zSpielKlient->setLadenProzent( 80 + (int)( 5 * ( (double)( i + 1 ) / spielerAnzahl ) + 0.5 ) );
|
|
|
|
- }
|
|
|
|
- for( int i = 0; i < teamAnzahl; i++ )
|
|
|
|
- {
|
|
|
|
- teams->add( new TeamStr( zDatei ) );
|
|
|
|
- zSpielKlient->setLadenProzent( 85 + (int)( 5 * ( (double)( i + 1 ) / teamAnzahl ) + 0.5 ) );
|
|
|
|
- }
|
|
|
|
|
|
+ int ressourceAnz = 0;
|
|
|
|
+ zDatei->lese( (char*)&ressourceAnz, 4 );
|
|
|
|
+ for( int i = 0; i < ressourceAnz; i++ )
|
|
|
|
+ {
|
|
|
|
+ ressources->add( new RessourceStr( zDatei, mapId, zGamePath ) );
|
|
|
|
+ zSpielKlient->setLadenProzent( 15 + (int)( 65 * ( (double)( i + 1 ) / ressourceAnz ) + 0.5 ) );
|
|
|
|
+ }
|
|
|
|
+ zDatei->lese( (char*)&größe.x, 4 );
|
|
|
|
+ zDatei->lese( (char*)&größe.y, 4 );
|
|
|
|
+ int objektAnzahl = 0;
|
|
|
|
+ zDatei->lese( (char*)&objektAnzahl, 4 );
|
|
|
|
+ for( int i = 0; i < objektAnzahl; i++ )
|
|
|
|
+ {
|
|
|
|
+ objekte->add( new ObjektStr( zDatei ) );
|
|
|
|
+ zSpielKlient->setLadenProzent( 70 + (int)( 10 * ( (double)( i + 1 ) / objektAnzahl ) + 0.5 ) );
|
|
|
|
+ }
|
|
|
|
+ for( int i = 0; i < spielerAnzahl; i++ )
|
|
|
|
+ {
|
|
|
|
+ spieler->add( new SpielerStr( zDatei ) );
|
|
|
|
+ zSpielKlient->setLadenProzent( 80 + (int)( 5 * ( (double)( i + 1 ) / spielerAnzahl ) + 0.5 ) );
|
|
|
|
+ }
|
|
|
|
+ for( int i = 0; i < teamAnzahl; i++ )
|
|
|
|
+ {
|
|
|
|
+ teams->add( new TeamStr( zDatei ) );
|
|
|
|
+ zSpielKlient->setLadenProzent( 85 + (int)( 5 * ( (double)( i + 1 ) / teamAnzahl ) + 0.5 ) );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
// constant
|
|
// constant
|
|
Vec2< int > Karte::getSize() const
|
|
Vec2< int > Karte::getSize() const
|
|
{
|
|
{
|
|
- return größe;
|
|
|
|
|
|
+ return größe;
|
|
}
|
|
}
|
|
|
|
|
|
Spieler *Karte::createSpieler( int sNum, Schrift *zSchrift, KSGClient::InformationServerClient *zInfoK, Animation2DData *zFStart, Animation2DData *zFBurn ) const
|
|
Spieler *Karte::createSpieler( int sNum, Schrift *zSchrift, KSGClient::InformationServerClient *zInfoK, Animation2DData *zFStart, Animation2DData *zFBurn ) const
|
|
{
|
|
{
|
|
- if( sNum < 0 || sNum >= spielerAnzahl )
|
|
|
|
- return 0;
|
|
|
|
- Spieler *ret = new Spieler( zInfoK, zSchrift, spieler->z( sNum ) );
|
|
|
|
- int m2d = spieler->z( sNum )->m2d;
|
|
|
|
- int bild = spieler->z( sNum )->bild;
|
|
|
|
- for( auto i = &ressources->getArray(); i && i->set && i->var; i = i->next )
|
|
|
|
- {
|
|
|
|
- if( i->var->getId() == m2d )
|
|
|
|
- ret->setModelData( i->var->zReccourceM2()->getThis(), zFStart, zFBurn );
|
|
|
|
- if( i->var->getId() == bild )
|
|
|
|
- ret->setSpielerFarbe( spielerFarbe->hat( sNum ) ? spielerFarbe->get( sNum ) : 0, i->var->zReccourceTxt() );
|
|
|
|
- }
|
|
|
|
- return ret;
|
|
|
|
|
|
+ if( sNum < 0 || sNum >= spielerAnzahl )
|
|
|
|
+ return 0;
|
|
|
|
+ SpielerStr *player = 0;
|
|
|
|
+ for( auto s = spieler->getArray(); s.set; s++ )
|
|
|
|
+ {
|
|
|
|
+ if( s.var->id == sNum + 1 )
|
|
|
|
+ player = s.var;
|
|
|
|
+ }
|
|
|
|
+ if( !player )
|
|
|
|
+ return 0;
|
|
|
|
+ Spieler *ret = new Spieler( zInfoK, zSchrift, player );
|
|
|
|
+ for( auto i = &ressources->getArray(); i && i->set && i->var; i = i->next )
|
|
|
|
+ {
|
|
|
|
+ if( i->var->getId() == player->m2d )
|
|
|
|
+ ret->setModelData( i->var->zReccourceM2()->getThis(), zFStart, zFBurn );
|
|
|
|
+ if( i->var->getId() == player->bild )
|
|
|
|
+ ret->setSpielerFarbe( spielerFarbe->hat( sNum ) ? spielerFarbe->get( sNum ) : 0, i->var->zReccourceTxt() );
|
|
|
|
+ }
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
Team *Karte::createTeam( int tNum ) const
|
|
Team *Karte::createTeam( int tNum ) const
|
|
{
|
|
{
|
|
- if( tNum < 0 || tNum >= teamAnzahl )
|
|
|
|
- return 0;
|
|
|
|
- Team *ret = new Team( teamFarbe->get( tNum ), teamName->z( tNum )->getText(), teams->z( tNum ) );
|
|
|
|
- return ret;
|
|
|
|
|
|
+ if( tNum < 0 || tNum >= teamAnzahl )
|
|
|
|
+ return 0;
|
|
|
|
+ TeamStr *team = 0;
|
|
|
|
+ for( auto t = teams->getArray(); t.set; t++ )
|
|
|
|
+ {
|
|
|
|
+ if( t.var->id == tNum + 1 )
|
|
|
|
+ team = t.var;
|
|
|
|
+ }
|
|
|
|
+ if( !team )
|
|
|
|
+ return 0;
|
|
|
|
+ Team *ret = new Team( teamFarbe->get( tNum ), teamName->z( tNum )->getText(), team );
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-SpielObjekt *Karte::createZeichnung( int oNum, Schrift *zSchrift ) const
|
|
|
|
|
|
+SpielObjekt *Karte::createObjekt( int oNum, Schrift *zSchrift ) const
|
|
{
|
|
{
|
|
- if( oNum < 0 || oNum > objekte->getEintragAnzahl() )
|
|
|
|
- return 0;
|
|
|
|
- SpielObjekt *ret = new SpielObjekt( objekte->z( oNum ), zSchrift );
|
|
|
|
- int m2d = objekte->z( oNum )->m2d;
|
|
|
|
- int bild = objekte->z( oNum )->bild;
|
|
|
|
- for( auto i = &ressources->getArray(); i && i->set && i->var; i = i->next )
|
|
|
|
- {
|
|
|
|
- if( i->var->getId() == m2d )
|
|
|
|
- ret->setModelData( i->var->zReccourceM2()->getThis() );
|
|
|
|
- if( i->var->getId() == bild )
|
|
|
|
- ret->setTextur( i->var->zReccourceTxt()->getThis() );
|
|
|
|
- }
|
|
|
|
- return ret;
|
|
|
|
|
|
+ if( oNum < 0 || oNum > objekte->getEintragAnzahl() )
|
|
|
|
+ return 0;
|
|
|
|
+ ObjektStr *obj = 0;
|
|
|
|
+ for( auto o = objekte->getArray(); o.set; o++ )
|
|
|
|
+ {
|
|
|
|
+ if( o.var->id == oNum + 1 )
|
|
|
|
+ obj = o.var;
|
|
|
|
+ }
|
|
|
|
+ if( !obj )
|
|
|
|
+ return 0;
|
|
|
|
+ SpielObjekt *ret = new SpielObjekt( obj, zSchrift );
|
|
|
|
+ for( auto i = &ressources->getArray(); i && i->set && i->var; i = i->next )
|
|
|
|
+ {
|
|
|
|
+ if( i->var->getId() == obj->m2d )
|
|
|
|
+ ret->setModelData( i->var->zReccourceM2()->getThis() );
|
|
|
|
+ if( i->var->getId() == obj->bild )
|
|
|
|
+ ret->setTextur( i->var->zReccourceTxt()->getThis() );
|
|
|
|
+ }
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
int Karte::getMaxTeamAnzahl() const
|
|
int Karte::getMaxTeamAnzahl() const
|
|
{
|
|
{
|
|
- return teamAnzahl;
|
|
|
|
|
|
+ return teamAnzahl;
|
|
}
|
|
}
|
|
|
|
|
|
int Karte::getMaxSpielerAnzahl() const
|
|
int Karte::getMaxSpielerAnzahl() const
|
|
{
|
|
{
|
|
- return spielerAnzahl;
|
|
|
|
|
|
+ return spielerAnzahl;
|
|
}
|
|
}
|
|
|
|
|
|
int Karte::getZeichnungAnzahl() const
|
|
int Karte::getZeichnungAnzahl() const
|
|
{
|
|
{
|
|
- return objekte->getEintragAnzahl();
|
|
|
|
|
|
+ return objekte->getEintragAnzahl();
|
|
}
|
|
}
|
|
|
|
|
|
int Karte::getTeamNummer( int sNum ) const
|
|
int Karte::getTeamNummer( int sNum ) const
|
|
{
|
|
{
|
|
- int min = teamGröße->get( 0 );
|
|
|
|
- for( int i = 1; i <= teamAnzahl; i++ )
|
|
|
|
- {
|
|
|
|
- if( sNum < min )
|
|
|
|
- return i - 1;
|
|
|
|
- min += teamGröße->hat( i ) ? teamGröße->get( i ) : 0;
|
|
|
|
- }
|
|
|
|
- return -1;
|
|
|
|
|
|
+ int min = teamGröße->get( 0 );
|
|
|
|
+ for( int i = 1; i <= teamAnzahl; i++ )
|
|
|
|
+ {
|
|
|
|
+ if( sNum < min )
|
|
|
|
+ return i - 1;
|
|
|
|
+ min += teamGröße->hat( i ) ? teamGröße->get( i ) : 0;
|
|
|
|
+ }
|
|
|
|
+ return -1;
|
|
}
|
|
}
|
|
|
|
|
|
// Reference Counting
|
|
// Reference Counting
|
|
Karte *Karte::getThis()
|
|
Karte *Karte::getThis()
|
|
{
|
|
{
|
|
- ref++;
|
|
|
|
- return this;
|
|
|
|
|
|
+ ref++;
|
|
|
|
+ return this;
|
|
}
|
|
}
|
|
|
|
|
|
Karte *Karte::release()
|
|
Karte *Karte::release()
|
|
{
|
|
{
|
|
- ref--;
|
|
|
|
- if( !ref )
|
|
|
|
- delete this;
|
|
|
|
- return 0;
|
|
|
|
|
|
+ ref--;
|
|
|
|
+ if( !ref )
|
|
|
|
+ delete this;
|
|
|
|
+ return 0;
|
|
}
|
|
}
|