#include "Gun.h" Gun::Gun() :Shot( GUN_DEGAT ), m_velocity( -GUN_SPEED ) { //ctor } Gun::Gun( Sint16 x, Sint16 y, bool ally ) :Shot( GUN_DEGAT, x, y, ally ), m_velocity( GUN_SPEED ) { if ( ally ) m_velocity = -m_velocity; } Gun::~Gun() { //dtor } void Gun::update() { m_x += m_velocity; } void Gun::draw( SDL_Surface* screen ) { if ( m_exist ) stringRGBA(screen, m_x - 4, m_y - 4, "+", 255, 255, 255, 255); } bool Gun::damageSolid( Uint8** solid, const Uint16 dimH, const Uint16 dimW, const SDL_Rect& hitbox ) { // Déterminer l'ordonnée d'impact Uint16 yImpct( ( m_y - hitbox.y ) / 8 ); // Détermination de l'abscisse d'impact Sint16 xImpct(0); if ( m_ally ) xImpct = dimW - 1; while ( solid[yImpct][xImpct] == 0 ) { if ( m_ally ) xImpct --; else xImpct ++; if ( xImpct == -1 || xImpct == dimW ) return false; } // Déstruction du centre #define GUN_CENTER_BAM 200 damageBloc( solid, dimH, dimW, yImpct, xImpct, GUN_CENTER_BAM ); // Forts dégats sur l'immédiat #define GUN_NEAREST_BAM 130 damageBloc( solid, dimH, dimW, yImpct - 1, xImpct, GUN_NEAREST_BAM ); damageBloc( solid, dimH, dimW, yImpct + 1, xImpct, GUN_NEAREST_BAM ); damageBloc( solid, dimH, dimW, yImpct, xImpct - 1, GUN_NEAREST_BAM ); damageBloc( solid, dimH, dimW, yImpct, xImpct + 1, GUN_NEAREST_BAM ); // Faibles dégats sur l'adjacent #define GUN_FAR_BAM 60 damageBloc( solid, dimH, dimW, yImpct - 1, xImpct - 1, GUN_FAR_BAM ); damageBloc( solid, dimH, dimW, yImpct + 1, xImpct - 1, GUN_FAR_BAM ); damageBloc( solid, dimH, dimW, yImpct - 1, xImpct + 1, GUN_FAR_BAM ); damageBloc( solid, dimH, dimW, yImpct + 1, xImpct + 1, GUN_FAR_BAM ); damageBloc( solid, dimH, dimW, yImpct - 2, xImpct, GUN_FAR_BAM ); damageBloc( solid, dimH, dimW, yImpct + 2, xImpct, GUN_FAR_BAM ); damageBloc( solid, dimH, dimW, yImpct, xImpct - 2, GUN_FAR_BAM ); damageBloc( solid, dimH, dimW, yImpct, xImpct + 2, GUN_FAR_BAM ); // Déstruction du projectile m_exist = false; return true; }