#include "player.h" #include "bullet.h" #include "ennemy.h" #include #include #include extern bopti_image_t img_mainship1; extern bopti_image_t img_Satellite_Lvl1; static int16_t cosTable[360], sinTable[360]; #define PI 3.141592 Player::Player( int16_t _x, int16_t _y, uint8_t _id ) { x = _x; y = _y; ID = _id; width = img_mainship1.width/2; height = img_mainship1.height/2; speed = 2; xmin = (int) x - width; xmax = (int) x + width; ymin = (int) y - height; ymax = (int) y + height; if (ID==0) life = 1000; lastshoot1 = rtc_ticks(); lastshoot2 = rtc_ticks(); satellites = true; satLevel = 1; satNumber = 6; satAngle = 0; satRadius = 50; satSpeed = 2; for(int u=0; u<360; u++) { cosTable[u] = (int16_t) (satRadius*cos( u * PI / 180 )); sinTable[u] = (int16_t) (satRadius*sin( u * PI / 180 )); } } Player::~Player() { } void Player::Update( float dt ) { xmin = (int) x - width; xmax = (int) x + width; ymin = (int) y - height; ymax = (int) y + height; if(satellites) { satAngle += satSpeed * dt / 25000.0f; if (satAngle>360.0f) satAngle-=360.0f; } } void Player::Render( void ) { if (ID==0) azrp_image_p8_effect(xmin, ymin, &img_mainship1, DIMAGE_NONE); int w = img_Satellite_Lvl1.width/2; int h = img_Satellite_Lvl1.height/2; if(satellites) { int incangle = 360/satNumber; for(int u=0; ux >= xmin && projectile->x <= xmax && projectile->y >= ymin && projectile->y <= ymax ) { life -= projectile->strength; projectile->toberemoved = true; return true; } else return false; } bool Player::Test_Impact( Ennemy *adverseship ) { if (adverseship->xmax >= xmin && adverseship->xmin <= xmax && adverseship->ymax >= ymin && adverseship->ymin <= ymax ) { life -= 50; adverseship->life -= 25; return true; } else return false; } void Player::Set_Speed( uint8_t _sp ) { speed = _sp; } void Player::Go_Left( void ) { if( x > width/2+speed ) { x -= speed; this->Update( 0.0f ); } } void Player::Go_Right( void ) { if(x < azrp_width-width/2-speed) { x += speed; this->Update( 0.0f ); } } void Player::Go_Up( void ) { if(y > height/2+speed) { y -= speed; this->Update( 0.0f ); } } void Player::Go_Down( void ) { if(y < azrp_height -height/2 -speed) { y += speed; this->Update( 0.0f ); } }