@ -5,11 +5,11 @@
INCLUDE_ANIMATION_DATA
INCLUDE_game
Bullet : : Bullet ( vf2d pos , vf2d vel , float radius , int damage , Pixel col )
: pos ( pos ) , vel ( vel ) , radius ( radius ) , damage ( damage ) , col ( col ) { } ;
Bullet : : Bullet ( vf2d pos , vf2d vel , float radius , int damage , bool friendly , Pixel col )
: pos ( pos ) , vel ( vel ) , radius ( radius ) , damage ( damage ) , col ( col ) , friendly ( friendly ) { } ;
Bullet : : Bullet ( vf2d pos , vf2d vel , float radius , int damage , AnimationState animation , bool hitsMultiple , float lifetime , bool rotatesWithAngle , Pixel col )
: pos ( pos ) , vel ( vel ) , radius ( radius ) , damage ( damage ) , col ( col ) , animated ( true ) , rotates ( rotatesWithAngle ) , lifetime ( lifetime ) , hitsMultiple ( hitsMultiple ) {
Bullet : : Bullet ( vf2d pos , vf2d vel , float radius , int damage , AnimationState animation , bool hitsMultiple , float lifetime , bool rotatesWithAngle , bool friendly , Pixel col )
: pos ( pos ) , vel ( vel ) , radius ( radius ) , damage ( damage ) , col ( col ) , animated ( true ) , rotates ( rotatesWithAngle ) , lifetime ( lifetime ) , hitsMultiple ( hitsMultiple ) , friendly ( friendly ) {
this - > animation . AddState ( animation , ANIMATION_DATA [ animation ] ) ;
this - > animation . ChangeState ( internal_animState , animation ) ;
} ;
@ -18,14 +18,28 @@ Animate2D::Frame Bullet::GetFrame(){
return animation . GetFrame ( internal_animState ) ;
}
void Bullet : : Update ( float fElapsedTime ) {
void Bullet : : UpdateFadeTime ( float fElapsedTime )
{
if ( fadeOutTime > 0 ) {
if ( fadeOutTimer = = 0 ) {
lifetime = fadeOutTime ;
}
fadeOutTimer + = fElapsedTime ;
}
}
void Bullet : : Update ( float fElapsedTime ) { }
void Bullet : : Draw ( ) {
auto lerp = [ ] ( uint8_t f1 , uint8_t f2 , float t ) { return uint8_t ( ( float ( f2 ) * t ) + f1 * ( 1 - t ) ) ; } ;
if ( animated ) {
game - > view . DrawPartialRotatedDecal ( pos , GetFrame ( ) . GetSourceImage ( ) - > Decal ( ) , rotates ? atan2 ( vel . y , vel . x ) - PI / 2 : 0 , GetFrame ( ) . GetSourceRect ( ) . size / 2 , GetFrame ( ) . GetSourceRect ( ) . pos , GetFrame ( ) . GetSourceRect ( ) . size , { 1 , 1 } , col ) ;
game - > view . DrawPartialRotatedDecal ( pos , GetFrame ( ) . GetSourceImage ( ) - > Decal ( ) , rotates ? atan2 ( vel . y , vel . x ) - PI / 2 : 0 , GetFrame ( ) . GetSourceRect ( ) . size / 2 , GetFrame ( ) . GetSourceRect ( ) . pos , GetFrame ( ) . GetSourceRect ( ) . size , { 1 , 1 } , fadeOutTime = = 0 ? col : Pixel { col . r , col . g , col . b , lerp ( col . a , 0 , 1 - ( ( fadeOutTime - fadeOutTimer ) / fadeOutTime ) ) } ) ;
} else {
game - > view . DrawDecal ( pos , game - > GFX_BulletCircle . Decal ( ) , { radius , radius } , col ) ;
game - > view . DrawDecal ( pos , game - > GFX_BulletCircleOutline . Decal ( ) , { radius , radius } , WHITE ) ;
game - > view . DrawDecal ( pos , game - > GFX_BulletCircle . Decal ( ) , { radius , radius } , fadeOutTime = = 0 ? col : Pixel { col . r , col . g , col . b , lerp ( col . a , 0 , 1 - ( ( fadeOutTime - fadeOutTimer ) / fadeOutTime ) ) } ) ;
game - > view . DrawDecal ( pos , game - > GFX_BulletCircleOutline . Decal ( ) , { radius , radius } , fadeOutTime = = 0 ? WHITE : Pixel { WHITE . r , WHITE . g , WHITE . b , lerp ( WHITE . a , 0 , 1 - ( ( fadeOutTime - fadeOutTimer ) / fadeOutTime ) ) } ) ;
}
}
}
bool Bullet : : PlayerHit ( Player & player ) { return true ; }
bool Bullet : : MonsterHit ( Monster & monster ) { return true ; }