123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #include "Brexit.h"
- Brexit::Brexit()
- :Shot( BREXIT_DEGAT ), m_vx( -BREXIT_SPEED_X), m_vy( BREXIT_SPEED_Y )
- {
- //ctor
- }
- Brexit::Brexit( Sint16 x, Sint16 y, bool up, bool ally )
- :Shot( BREXIT_DEGAT, x, y, ally ), m_vx( BREXIT_SPEED_X ), m_vy( BREXIT_SPEED_Y )
- {
- if ( ally )
- m_vx = -m_vx;
- if ( up )
- m_vy = -m_vy;
- }
- Brexit::~Brexit()
- {
- //dtor
- }
- void Brexit::update()
- {
- m_x += m_vx;
- m_y += m_vy;
- }
- void Brexit::draw( SDL_Surface* screen )
- {
- if ( !m_exist )
- return;
- stringRGBA(screen, m_x - 4, m_y - 4, "X", 0, 255, 0, 255);
- }
- bool Brexit::damageSolid( Uint8** solid, const Uint16 dimH, const Uint16 dimW, const SDL_Rect& hitbox )
- {
- // Déterminer l'ordonnée d'impact discret
- Uint16 yImpct( ( m_y - hitbox.y ) / 8 );
- Uint16 xImpct( ( m_x - hitbox.x ) / 8 );
- Sint16 yAdd(1);
- if ( m_vy < 0 ) yAdd = -1;
- Sint16 xAdd(1);
- if ( m_ally ) xAdd = -1;
- // Détermination du bord de pénétration
- while ( yImpct != 0 && xImpct != 0 && yImpct != dimH - 1 && xImpct != dimW - 1 )
- {
- xImpct -= xAdd;
- yImpct -= yAdd;
- }
- // Détermination de l'abscisse d'impact
- while ( solid[yImpct][xImpct] == 0 )
- {
- xImpct += xAdd;
- yImpct += yAdd;
- if ( xImpct >= dimW || yImpct >= dimH )
- return false;
- }
- // Déstruction du centre
- damageBloc( solid, dimH, dimW, yImpct, xImpct, 150 );
- damageBloc( solid, dimH, dimW, yImpct, xImpct + xAdd, 150 );
- damageBloc( solid, dimH, dimW, yImpct + yAdd, xImpct, 150 );
- // Déstruction du projectile
- m_exist = false;
- return true;
- }
|