|
@@ -17,6 +17,11 @@
|
|
|
Map::Map( KSGClient::MinigameServerClient *klient )
|
|
|
: GameData( "data/Minigames/Asteroids/models/ship.m2", "data/Minigames/Asteroids/models/asteroids.m2" )
|
|
|
{
|
|
|
+ kamera = new Kamera2D();
|
|
|
+ kamera->setWelt( world->getThis(), 1 );
|
|
|
+ kamera->setSize( 800, 500 );
|
|
|
+ mapKamera = new Kamera2D();
|
|
|
+ mapKamera->setWelt( world->getThis(), 0 );
|
|
|
this->klient = klient;
|
|
|
aTextur = new Bild*[ 7 ]();
|
|
|
sTextur = new Bild*[ 2 ]();
|
|
@@ -60,12 +65,12 @@ Map::Map( KSGClient::MinigameServerClient *klient )
|
|
|
name.append( (char)( 'a' + i ) );
|
|
|
sTextur[ i ] = td.laden( 0, new Text( (char*)( Text( name ) += ".png" ) ) );
|
|
|
}
|
|
|
- kam = new LRahmen();
|
|
|
- kam->setFarbe( 0xFF777777 );
|
|
|
map = new LRahmen();
|
|
|
map->setFarbe( 0xFFFFFFFF );
|
|
|
map->setPosition( 10, 10 );
|
|
|
map->setSize( 200, 200 );
|
|
|
+ mapKamera->setPosition( 10, 10 );
|
|
|
+ mapKamera->setSize( 200, 200 );
|
|
|
}
|
|
|
|
|
|
|
|
@@ -77,19 +82,27 @@ Map::~Map()
|
|
|
sTextur[ i ]->release();
|
|
|
delete[] aTextur;
|
|
|
delete[] sTextur;
|
|
|
- kam->release();
|
|
|
map->release();
|
|
|
if( klient )
|
|
|
klient->release();
|
|
|
flammenM->release();
|
|
|
flammenL->release();
|
|
|
flammenR->release();
|
|
|
+ if( kamera )
|
|
|
+ kamera->release();
|
|
|
+ if( mapKamera )
|
|
|
+ mapKamera->release();
|
|
|
}
|
|
|
|
|
|
Asteroid *Map::createNewAsteroid()
|
|
|
{
|
|
|
Asteroid *a = __super::createNewAsteroid();
|
|
|
- a->setTextur( aTextur[ a->getId() ] );
|
|
|
+ if( a )
|
|
|
+ {
|
|
|
+ Textur2D *text = new Textur2D();
|
|
|
+ text->setTexturZ( aTextur[ a->getId() ]->getThis() );
|
|
|
+ a->setTextur( text );
|
|
|
+ }
|
|
|
return a;
|
|
|
}
|
|
|
|
|
@@ -100,6 +113,9 @@ void Map::reset( Text *zOptionen )
|
|
|
flammenR->setAnimation( -1 );
|
|
|
flammenM->setAnimation( -1 );
|
|
|
__super::reset( zOptionen );
|
|
|
+ world->setSize( breite, höhe );
|
|
|
+ world->setSize( 1 );
|
|
|
+ world->setCircular( 1 );
|
|
|
Text *tmp = zOptionen->getTeilText( zOptionen->positionVon( '=', 5 ) + 1, zOptionen->positionVon( ',', 5 ) );
|
|
|
bool fortsetzen = (int)*tmp != 0;
|
|
|
tmp->release();
|
|
@@ -209,7 +225,9 @@ void Map::reset( Text *zOptionen )
|
|
|
save->lese( (char*)&y, 4 );
|
|
|
save->lese( (char*)&xs, 4 );
|
|
|
save->lese( (char*)&ys, 4 );
|
|
|
- schuss->add( new Schuss( Vec2< float >( x, y ), Vec2< float >( xs, ys ) ) );
|
|
|
+ Schuss *newS = new Schuss( Vec2< float >( x, y ), Vec2< float >( xs, ys ) );
|
|
|
+ schuss->add( newS );
|
|
|
+ world->addObject( newS->getThis() );
|
|
|
}
|
|
|
}
|
|
|
save->close();
|
|
@@ -233,9 +251,7 @@ void Map::reset( Text *zOptionen )
|
|
|
}
|
|
|
|
|
|
void Map::doMausEreignis( MausEreignis &me )
|
|
|
-{
|
|
|
-
|
|
|
-}
|
|
|
+{}
|
|
|
|
|
|
void Map::doTastaturEreignis( TastaturEreignis &te )
|
|
|
{
|
|
@@ -313,7 +329,9 @@ void Map::doTastaturEreignis( TastaturEreignis &te )
|
|
|
capture.schreibe( (char*)&gameTime, 8 );
|
|
|
capture.schreibe( "\x10", 1 );
|
|
|
}
|
|
|
- schuss->add( ship->getSchuss() );
|
|
|
+ Schuss *newS = ship->getSchuss();
|
|
|
+ schuss->add( newS );
|
|
|
+ world->addObject( newS->getThis() );
|
|
|
}
|
|
|
cs.unlock();
|
|
|
}
|
|
@@ -323,6 +341,7 @@ bool Map::tick( double t )
|
|
|
if( beendet )
|
|
|
return 0;
|
|
|
bool ret = __super::tick( t );
|
|
|
+ ret |= kamera->tick( t );
|
|
|
if( beendet && klient )
|
|
|
{
|
|
|
capture.close();
|
|
@@ -391,32 +410,21 @@ bool Map::tick( double t )
|
|
|
void Map::render( Bild &zRObj )
|
|
|
{
|
|
|
cs.lock();
|
|
|
- Punkt kamP = ship->getKamPos( breite, höhe );
|
|
|
- zRObj.addScrollOffset( kamP.x, kamP.y );
|
|
|
- int aAnz = asteroid->getEintragAnzahl();
|
|
|
- for( int i = 0; i < aAnz; i++ )
|
|
|
- asteroid->z( i )->render( zRObj );
|
|
|
- int sAnz = schuss->getEintragAnzahl();
|
|
|
- for( int i = 0; i < sAnz; i++ )
|
|
|
- schuss->z( i )->render( zRObj );
|
|
|
- ship->render( zRObj );
|
|
|
- zRObj.addScrollOffset( -kamP.x, -kamP.y );
|
|
|
+ kamera->lookAtWorldPos( (int)ship->getPosition().x, (int)ship->getPosition().y );
|
|
|
+ kamera->render( zRObj );
|
|
|
if( breite >= 800 || höhe >= 500 )
|
|
|
{
|
|
|
- const Punkt &dOff = zRObj.getDrawOff();
|
|
|
+ zRObj.setAlpha( 50 );
|
|
|
+ if( breite > höhe )
|
|
|
+ mapKamera->setSize( 200, (int)( ( 200.0 / world->getWorldInfo().size.x ) * world->getWorldInfo().size.y ) );
|
|
|
+ else
|
|
|
+ mapKamera->setSize( (int)( ( 200.0 / world->getWorldInfo().size.y ) * world->getWorldInfo().size.x ), 200 );
|
|
|
+ mapKamera->lookAtWorldPos( world->getWorldInfo().size.x / 2, world->getWorldInfo().size.y / 2 );
|
|
|
+ mapKamera->lookAtWorldArea( world->getWorldInfo().size.x, world->getWorldInfo().size.y );
|
|
|
+ mapKamera->render( zRObj );
|
|
|
+ map->setSize( mapKamera->getBreite(), mapKamera->getHeight() );
|
|
|
map->render( zRObj );
|
|
|
- zRObj.setPixelDP( 10 + ( ship->getPos().x * 200 ) / breite + dOff.x, 10 + ( ship->getPos().y * 200 ) / höhe + dOff.y, 0xFF00FF00 );
|
|
|
- for( int i = 0; i < aAnz; i++ )
|
|
|
- zRObj.setPixelDP( 10 + ( asteroid->z( i )->getPos().x * 200 ) / breite + dOff.x, 10 + ( asteroid->z( i )->getPos().y * 200 ) / höhe + dOff.y, 0xFFFF0000 );
|
|
|
- for( int i = 0; i < sAnz; i++ )
|
|
|
- zRObj.setPixelDP( 10 + ( (int)schuss->z( i )->getPos().x * 200 ) / breite + dOff.x, 10 + ( (int)schuss->z( i )->getPos().y * 200 ) / höhe + dOff.y, 0xFF00FFFF );
|
|
|
- kam->setPosition( 10 + ( 200 * kamP.x ) / breite, 10 + ( 200 * kamP.y ) / höhe );
|
|
|
- kam->setSize( ( 200 * 800 ) / breite, ( 200 * 500 ) / höhe );
|
|
|
- if( kam->getBreite() > 200 )
|
|
|
- kam->setSize( 200, kam->getHeight() );
|
|
|
- if( kam->getHeight() > 200 )
|
|
|
- kam->setSize( kam->getBreite(), 200 );
|
|
|
- kam->render( zRObj );
|
|
|
+ zRObj.releaseAlpha();
|
|
|
}
|
|
|
cs.unlock();
|
|
|
}
|
|
@@ -445,7 +453,7 @@ void Map::speichern()
|
|
|
{
|
|
|
name[ 0 ] = n;
|
|
|
if( asteroid->z( index++ )->getId() < 0 )
|
|
|
- sad.saveModel( asteroid->z( index - 1 )->zModel()->zModel(), name );
|
|
|
+ sad.saveModel( asteroid->z( index - 1 )->zModel(), name );
|
|
|
else
|
|
|
n--;
|
|
|
}
|