|
@@ -157,7 +157,7 @@ void Inventar::removeItem( GegenstandTyp typ, int anzahl )
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-Spieler::Spieler( int id, Team *team, int spawnX, int spawnY, int farbe )
|
|
+Spieler::Spieler( ResourceRegistry *zResources, int id, Team *team, int spawnX, int spawnY, int farbe )
|
|
: GameObject( SPIELER, spawnX, spawnY, 40, 50 )
|
|
: GameObject( SPIELER, spawnX, spawnY, 40, 50 )
|
|
{
|
|
{
|
|
accountId = 0;
|
|
accountId = 0;
|
|
@@ -199,12 +199,30 @@ Spieler::Spieler( int id, Team *team, int spawnX, int spawnY, int farbe )
|
|
for( int i = 0; i < 256; i++ )
|
|
for( int i = 0; i < 256; i++ )
|
|
tastenStand[ i ] = 0;
|
|
tastenStand[ i ] = 0;
|
|
ausrichtung = MITTE;
|
|
ausrichtung = MITTE;
|
|
|
|
+ currentImage = 0;
|
|
|
|
+ currentNext = 0.075;
|
|
|
|
+ heilungImage = 0;
|
|
|
|
+ heilungNext = 0.075;
|
|
|
|
+ showHeilung = 0;
|
|
|
|
+ schadenImage = 0;
|
|
|
|
+ schadenNext = 0.075;
|
|
|
|
+ showSchaden = 0;
|
|
|
|
+ texturScale = 1;
|
|
|
|
+ resources = zResources->getThis();
|
|
|
|
+ current = zResources->getResource( R_SPIELER, farbe );
|
|
|
|
+ textur = current->getImages()->getThis();
|
|
|
|
+ heilungR = zResources->getResource( R_HEILUNG, 0 );
|
|
|
|
+ schadenR = zResources->getResource( R_SCHADEN, 0 );
|
|
}
|
|
}
|
|
|
|
|
|
Spieler::~Spieler()
|
|
Spieler::~Spieler()
|
|
{
|
|
{
|
|
if( team )
|
|
if( team )
|
|
team->release();
|
|
team->release();
|
|
|
|
+ resources->release();
|
|
|
|
+ current->release();
|
|
|
|
+ heilungR->release();
|
|
|
|
+ schadenR->release();
|
|
}
|
|
}
|
|
|
|
|
|
bool Spieler::setTastenStand( unsigned char taste, bool pressed )
|
|
bool Spieler::setTastenStand( unsigned char taste, bool pressed )
|
|
@@ -214,18 +232,44 @@ bool Spieler::setTastenStand( unsigned char taste, bool pressed )
|
|
if( pressed )
|
|
if( pressed )
|
|
{
|
|
{
|
|
if( taste == 'w' )
|
|
if( taste == 'w' )
|
|
|
|
+ {
|
|
|
|
+ if( ausrichtung == MITTE )
|
|
|
|
+ {
|
|
|
|
+ current->release();
|
|
|
|
+ current = resources->getResource( R_SPIELER_RECHTS, color );
|
|
|
|
+ }
|
|
ausrichtung = OBEN;
|
|
ausrichtung = OBEN;
|
|
|
|
+ }
|
|
if( taste == 'a' )
|
|
if( taste == 'a' )
|
|
|
|
+ {
|
|
|
|
+ current->release();
|
|
|
|
+ current = resources->getResource( R_SPIELER_LINKS, color );
|
|
ausrichtung = LINKS;
|
|
ausrichtung = LINKS;
|
|
|
|
+ }
|
|
if( taste == 's' )
|
|
if( taste == 's' )
|
|
|
|
+ {
|
|
|
|
+ if( ausrichtung == MITTE )
|
|
|
|
+ {
|
|
|
|
+ current->release();
|
|
|
|
+ current = resources->getResource( R_SPIELER_LINKS, color );
|
|
|
|
+ }
|
|
ausrichtung = UNTEN;
|
|
ausrichtung = UNTEN;
|
|
|
|
+ }
|
|
if( taste == 'd' )
|
|
if( taste == 'd' )
|
|
|
|
+ {
|
|
|
|
+ current->release();
|
|
|
|
+ current = resources->getResource( R_SPIELER_RECHTS, color );
|
|
ausrichtung = RECHTS;
|
|
ausrichtung = RECHTS;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
if( !tastenStand[ 'w' ] && !tastenStand[ 'a' ] && !tastenStand[ 's' ] && !tastenStand[ 'd' ] )
|
|
if( !tastenStand[ 'w' ] && !tastenStand[ 'a' ] && !tastenStand[ 's' ] && !tastenStand[ 'd' ] )
|
|
|
|
+ {
|
|
|
|
+ current->release();
|
|
|
|
+ current = resources->getResource( R_SPIELER, color );
|
|
ausrichtung = MITTE;
|
|
ausrichtung = MITTE;
|
|
|
|
+ }
|
|
else
|
|
else
|
|
{
|
|
{
|
|
if( ( ausrichtung == OBEN && taste == 'w' ) ||
|
|
if( ( ausrichtung == OBEN && taste == 'w' ) ||
|
|
@@ -236,11 +280,19 @@ bool Spieler::setTastenStand( unsigned char taste, bool pressed )
|
|
if( tastenStand[ 'w' ] )
|
|
if( tastenStand[ 'w' ] )
|
|
ausrichtung = OBEN;
|
|
ausrichtung = OBEN;
|
|
if( tastenStand[ 'a' ] )
|
|
if( tastenStand[ 'a' ] )
|
|
|
|
+ {
|
|
|
|
+ current->release();
|
|
|
|
+ current = resources->getResource( R_SPIELER_LINKS, color );
|
|
ausrichtung = LINKS;
|
|
ausrichtung = LINKS;
|
|
|
|
+ }
|
|
if( tastenStand[ 's' ] )
|
|
if( tastenStand[ 's' ] )
|
|
ausrichtung = UNTEN;
|
|
ausrichtung = UNTEN;
|
|
if( tastenStand[ 'd' ] )
|
|
if( tastenStand[ 'd' ] )
|
|
|
|
+ {
|
|
|
|
+ current->release();
|
|
|
|
+ current = resources->getResource( R_SPIELER_RECHTS, color );
|
|
ausrichtung = RECHTS;
|
|
ausrichtung = RECHTS;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -263,6 +315,12 @@ void Spieler::setAccount( int id )
|
|
|
|
|
|
void Spieler::addEffekt( Effect *e )
|
|
void Spieler::addEffekt( Effect *e )
|
|
{
|
|
{
|
|
|
|
+ Resource *r = e->getCurrentResource();
|
|
|
|
+ if( r )
|
|
|
|
+ {
|
|
|
|
+ currentImage = 0;
|
|
|
|
+ r->release();
|
|
|
|
+ }
|
|
effekte.add( e );
|
|
effekte.add( e );
|
|
}
|
|
}
|
|
|
|
|
|
@@ -415,7 +473,54 @@ void Spieler::tick( double zeit, Spiel *zSpiel )
|
|
useItem( zSpiel );
|
|
useItem( zSpiel );
|
|
if( tastenStand[ 'e' ] )
|
|
if( tastenStand[ 'e' ] )
|
|
zSpiel->spielerActivate( this );
|
|
zSpiel->spielerActivate( this );
|
|
- heilung( lebensRegeneration * (float)zeit, zSpiel );
|
|
+ heilung( lebensRegeneration * (float)zeit, zSpiel, 0 );
|
|
|
|
+ Resource *r = current->getThis();
|
|
|
|
+ for( auto e = effekte.getIterator(); e; e++ )
|
|
|
|
+ {
|
|
|
|
+ Resource *t = e->getCurrentResource();
|
|
|
|
+ if( t )
|
|
|
|
+ r->release();
|
|
|
|
+ r = t;
|
|
|
|
+ }
|
|
|
|
+ currentNext -= zeit;
|
|
|
|
+ if( currentNext <= 0 )
|
|
|
|
+ {
|
|
|
|
+ currentNext += 0.075;
|
|
|
|
+ currentImage++;
|
|
|
|
+ }
|
|
|
|
+ if( currentImage >= r->getImageCount() )
|
|
|
|
+ currentImage = 0;
|
|
|
|
+ textur->release();
|
|
|
|
+ textur = r->getImage( currentImage );
|
|
|
|
+ r->release();
|
|
|
|
+ if( showHeilung )
|
|
|
|
+ {
|
|
|
|
+ heilungNext -= zeit;
|
|
|
|
+ if( heilungNext <= 0 )
|
|
|
|
+ {
|
|
|
|
+ heilungNext += 0.075;
|
|
|
|
+ heilungImage++;
|
|
|
|
+ if( heilungR->getImageCount() <= heilungImage )
|
|
|
|
+ {
|
|
|
|
+ heilungImage = 0;
|
|
|
|
+ showHeilung = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if( showSchaden )
|
|
|
|
+ {
|
|
|
|
+ schadenNext -= zeit;
|
|
|
|
+ if( schadenNext <= 0 )
|
|
|
|
+ {
|
|
|
|
+ schadenNext += 0.075;
|
|
|
|
+ schadenImage++;
|
|
|
|
+ if( schadenR->getImageCount() <= schadenImage )
|
|
|
|
+ {
|
|
|
|
+ schadenImage = 0;
|
|
|
|
+ showSchaden = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -428,6 +533,21 @@ void Spieler::tick( double zeit, Spiel *zSpiel )
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void Spieler::render( Bild &rObj )
|
|
|
|
+{
|
|
|
|
+ GameObject::render( rObj );
|
|
|
|
+ if( rObj.setDrawOptions( (int)x, (int)y, (int)w, (int)h ) )
|
|
|
|
+ {
|
|
|
|
+ if( showHeilung )
|
|
|
|
+ rObj.alphaBildSkall( (int)x, (int)y, (int)w, (int)h, *heilungR->zImage( heilungImage ) );
|
|
|
|
+ if( showSchaden )
|
|
|
|
+ rObj.alphaBildSkall( (int)x, (int)y, (int)w, (int)h, *schadenR->zImage( schadenImage ) );
|
|
|
|
+ rObj.releaseDrawOptions();
|
|
|
|
+ }
|
|
|
|
+ for( auto e = effekte.getIterator(); e; e++ )
|
|
|
|
+ e->renderSpieler( rObj );
|
|
|
|
+}
|
|
|
|
+
|
|
void Spieler::useItem( Spiel *zSpiel )
|
|
void Spieler::useItem( Spiel *zSpiel )
|
|
{
|
|
{
|
|
if( istAmLeben() && inv.selectedItem() != KEIN_GEGENSTAND && istGegenstandErlaubt( inv.selectedItem() ) )
|
|
if( istAmLeben() && inv.selectedItem() != KEIN_GEGENSTAND && istGegenstandErlaubt( inv.selectedItem() ) )
|
|
@@ -447,13 +567,13 @@ void Spieler::useItem( Spiel *zSpiel )
|
|
addEffekt( new LebenEffect( this ) );
|
|
addEffekt( new LebenEffect( this ) );
|
|
break;
|
|
break;
|
|
case SCHILD:
|
|
case SCHILD:
|
|
- addEffekt( new SchildEffect( this ) );
|
|
+ addEffekt( new SchildEffect( zSpiel->zResources(), this ) );
|
|
break;
|
|
break;
|
|
case SCHUH:
|
|
case SCHUH:
|
|
- addEffekt( new SchuhEffect( this ) );
|
|
+ addEffekt( new SchuhEffect( zSpiel->zResources(), this ) );
|
|
break;
|
|
break;
|
|
case GEIST:
|
|
case GEIST:
|
|
- addEffekt( new GeistEffect( this ) );
|
|
+ addEffekt( new GeistEffect( zSpiel->zResources(), this ) );
|
|
break;
|
|
break;
|
|
case KUGEL:
|
|
case KUGEL:
|
|
geschosseGeschossen++;
|
|
geschosseGeschossen++;
|
|
@@ -461,10 +581,10 @@ void Spieler::useItem( Spiel *zSpiel )
|
|
zSpiel->addGeschoss( new Geschoss( zSpiel->zResources(), zSpiel->getNextId(), geschossTempo, GESCHOSS_KUGEL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
|
|
zSpiel->addGeschoss( new Geschoss( zSpiel->zResources(), zSpiel->getNextId(), geschossTempo, GESCHOSS_KUGEL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
|
|
break;
|
|
break;
|
|
case ROLLE:
|
|
case ROLLE:
|
|
- addEffekt( new RolleEffect( this, getAusrichtung() ) );
|
|
+ addEffekt( new RolleEffect( zSpiel->zResources(), this, getAusrichtung() ) );
|
|
break;
|
|
break;
|
|
case STURM:
|
|
case STURM:
|
|
- addEffekt( new SturmEffect( this, getAusrichtung() ) );
|
|
+ addEffekt( new SturmEffect( zSpiel->zResources(), this, getAusrichtung() ) );
|
|
break;
|
|
break;
|
|
case DRACHENAUGE:
|
|
case DRACHENAUGE:
|
|
geschosseGeschossen++;
|
|
geschosseGeschossen++;
|
|
@@ -477,7 +597,7 @@ void Spieler::useItem( Spiel *zSpiel )
|
|
zSpiel->addGeschoss( new Geschoss( zSpiel->zResources(), zSpiel->getNextId(), geschossTempo, GESCHOSS_FEUERBALL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
|
|
zSpiel->addGeschoss( new Geschoss( zSpiel->zResources(), zSpiel->getNextId(), geschossTempo, GESCHOSS_FEUERBALL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
|
|
break;
|
|
break;
|
|
case ENTERHAKEN:
|
|
case ENTERHAKEN:
|
|
- addEffekt( new EnterhakenEffect( this, getAusrichtung() ) );
|
|
+ addEffekt( new EnterhakenEffect( zSpiel->zResources(), this, getAusrichtung() ) );
|
|
break;
|
|
break;
|
|
case MINE:
|
|
case MINE:
|
|
geschosseGeschossen++;
|
|
geschosseGeschossen++;
|
|
@@ -535,16 +655,16 @@ bool Spieler::addItem( GegenstandTyp typ, int anz, Spiel *zSpiel )
|
|
addErfahrung( 2, zSpiel );
|
|
addErfahrung( 2, zSpiel );
|
|
break;
|
|
break;
|
|
case RSTRENGTH:
|
|
case RSTRENGTH:
|
|
- addEffekt( new StrengthRuneEffect( this ) );
|
|
+ addEffekt( new StrengthRuneEffect( zSpiel->zResources(), this ) );
|
|
break;
|
|
break;
|
|
case RBOSHEIT:
|
|
case RBOSHEIT:
|
|
- addEffekt( new BosheitRuneEffect( this ) );
|
|
+ addEffekt( new BosheitRuneEffect( zSpiel->zResources(), this ) );
|
|
break;
|
|
break;
|
|
case RLEBEN:
|
|
case RLEBEN:
|
|
- addEffekt( new LebenRuneEffect( this ) );
|
|
+ addEffekt( new LebenRuneEffect( zSpiel->zResources(), this ) );
|
|
break;
|
|
break;
|
|
case RTEMPO:
|
|
case RTEMPO:
|
|
- addEffekt( new TempoRuneEffect( this ) );
|
|
+ addEffekt( new TempoRuneEffect( zSpiel->zResources(), this ) );
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
@@ -584,8 +704,15 @@ void Spieler::nimmSchaden( float schaden, Spieler *zVerursacher, Richtung r, Spi
|
|
e->addParameter( "Betroffener Spieler", getThis() );
|
|
e->addParameter( "Betroffener Spieler", getThis() );
|
|
e->addParameter( "Wert", new Float( schaden ) );
|
|
e->addParameter( "Wert", new Float( schaden ) );
|
|
zSpiel->throwEvent( e );
|
|
zSpiel->throwEvent( e );
|
|
|
|
+ showSchaden = 1;
|
|
if( leben == 0 )
|
|
if( leben == 0 )
|
|
{
|
|
{
|
|
|
|
+ current->release();
|
|
|
|
+ current = resources->getResource( R_SPIELER, color );
|
|
|
|
+ heilungImage = 0;
|
|
|
|
+ schadenImage = 0;
|
|
|
|
+ showSchaden = 0;
|
|
|
|
+ showHeilung = 0;
|
|
wiederbelebungsZeit = (float)( (float)maxWiederbelebungsZeit + team->getMaxWiederbelebungsZeit() );
|
|
wiederbelebungsZeit = (float)( (float)maxWiederbelebungsZeit + team->getMaxWiederbelebungsZeit() );
|
|
wiederbelebungsZeit -= wiederbelebungsZeit / 100 * abklingZeitVerringerung;
|
|
wiederbelebungsZeit -= wiederbelebungsZeit / 100 * abklingZeitVerringerung;
|
|
team->addTod();
|
|
team->addTod();
|
|
@@ -600,7 +727,7 @@ void Spieler::nimmSchaden( float schaden, Spieler *zVerursacher, Richtung r, Spi
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void Spieler::heilung( float heal, Spiel *zSpiel )
|
|
+void Spieler::heilung( float heal, Spiel *zSpiel, bool show )
|
|
{
|
|
{
|
|
if( amLeben )
|
|
if( amLeben )
|
|
{
|
|
{
|
|
@@ -611,6 +738,8 @@ void Spieler::heilung( float heal, Spiel *zSpiel )
|
|
e->addParameter( "Betroffener Spieler", getThis() );
|
|
e->addParameter( "Betroffener Spieler", getThis() );
|
|
e->addParameter( "Wert", new Float( heal ) );
|
|
e->addParameter( "Wert", new Float( heal ) );
|
|
zSpiel->throwEvent( e );
|
|
zSpiel->throwEvent( e );
|
|
|
|
+ if( show )
|
|
|
|
+ showHeilung = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|