123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #include "HitManager.h"
- #include "Shot/Gun.h"
- #include "Shot/Part.h"
- #include "Shot/Cutter.h"
- #include "Shot/Disper.h"
- #include "Shot/Photo.h"
- #include "Shot/Missile.h"
- #include "Shot/Brexit.h"
- #include "Shot/Hecto.h"
- #include "Shot/Sniper.h"
- HitManager::HitManager()
- :m_window( {0, 0, 1280, 720} )
- {
- //ctor
- }
- HitManager::~HitManager()
- {
- //dtor
- }
- void HitManager::draw( SDL_Surface* screen )
- {
- for ( unsigned int i(0); i < m_shots.size(); i++) {
- m_shots[i]->draw( screen );
- }
- }
- void HitManager::addShot( Shot* tir )
- {
- m_shots.push_back( tir );
- }
- void HitManager::triggerWeapon( int weapId, Sint16 x, Sint16 y, bool ally )
- {
- switch ( weapId )
- {
- case GUN_ID :
- addShot( new Gun( x, y, ally ) );
- break;
- case CUTTER_ID :
- addShot( new Cutter( x, y, ally ) );
- break;
- case DISPER_ID :
- for ( int vy(-4); vy <= 4; vy++ )
- addShot( new Disper( x, y, vy, ally ) );
- break;
- case PHOTO_ID :
- if ( ally )
- addShot( new Photo( x, y, m_nearPt.x, m_nearPt.y, ally ) );
- else
- addShot( new Photo( x, y, m_nearAlly.x, m_nearAlly.y, ally ) );
- break;
- case MISSILE_ID :
- if ( ally )
- addShot( new Missile( x, y, m_nearAxe.x, m_nearAxe.y, ally ) );
- else
- addShot( new Missile( x, y, m_nearAlly.x, m_nearAlly.y, ally ) );
- break;
- case BREXIT_ID :
- addShot( new Brexit(x, y, true, ally ) );
- addShot( new Brexit(x, y, false, ally ) );
- break;
- case HECTO_ID :
- addShot( new Hecto( x, y, ally ) );
- break;
- case SNIPER_ID :
- addShot( new Sniper( x, y, ally ) );
- break;
- default :
- break;
- }
- }
- Sint32 HitManager::absorb( bool isAlly, const Uint16 dimH, const Uint16 dimW, const SDL_Rect& hitbox )
- {
- Sint32 deg( 0 );
- for ( unsigned int i(0); i < m_shots.size(); i++) {
- if ( isAlly != m_shots[i]->getIsAlly() && m_shots[i]->isIn( hitbox ) )
- deg += m_shots[i]->takeDegat();
- }
- return deg;
- }
- bool HitManager::colide( bool isAlly, Uint8** solid, const Uint16 dimH, const Uint16 dimW, const SDL_Rect& hitbox )
- {
- bool rep( false );
- for ( unsigned int i(0); i < m_shots.size(); i++) {
- if ( isAlly != m_shots[i]->getIsAlly() && m_shots[i]->isIn( hitbox ) )
- rep = rep || m_shots[i]->damageSolid( solid, dimH, dimW, hitbox );
- }
- return rep;
- }
- void HitManager::update()
- {
- // Raccourcissement de la file
- while ( !m_shots.empty() && ( !m_shots.front()->isIn(m_window) || !m_shots.front()->getExist() ) ) {
- delete m_shots.front();
- m_shots.front() = 0x0;
- m_shots.pop_front();
- }
- // Déplacement des tirs
- for ( unsigned int i(0); i < m_shots.size(); i++) {
- m_shots[i]->update() ;
- // Destruction des tirs hors champs
- if ( !m_shots[i]->isIn( m_window ) )
- m_shots[i]->setExist( false );
- }
- }
- void HitManager::clean()
- {
- while ( !m_shots.empty() ) {
- delete m_shots.front();
- m_shots.front() = 0x0;
- m_shots.pop_front();
- }
- }
- unsigned int HitManager::getDecay( unsigned int weapId )
- {
- if ( weapId >= SHOT_NB )
- {
- std::cout << "getDecay : Bug cher ami !" << std::endl;
- return 16;
- }
- unsigned int decTab[ SHOT_NB ] = ACTOR_DECAY;
- return decTab[ weapId ];
- }
- void HitManager::setNearPt( SDL_Rect nearPt )
- {
- m_nearPt = nearPt;
- }
- void HitManager::setNearAxe( SDL_Rect nearAxe )
- {
- m_nearAxe = nearAxe;
- }
- void HitManager::setNearAlly( SDL_Rect nearAlly )
- {
- m_nearAlly = nearAlly;
- }
|