#include "bullet.h" //Constructor Bullet::Bullet() { init(0, 0, NO_KIND); } //Iniciador void Bullet::init(int x, int y, int kind) { //Posición inicial del objeto mPosX = x; mPosY = y; //Alto y ancho del objeto mWidth = 8; mHeight = mWidth; //Velocidad inicial en el eje Y mVelY = -3; //Tipo de bala mKind = kind; //Textura con los gráficos del objeto mSprite.setTexture(gBulletTexture); //Alto y ancho del sprite mSprite.setWidth(mWidth); mSprite.setHeight(mHeight); //Posición inicial del sprite mSprite.setPosX(mPosX); mSprite.setPosY(mPosY); //Valores especificos según el tipo switch (kind) { case BULLET_UP: //Establece la velocidad inicial mVelX = 0; //Rectangulo con los gráficos del objeto mSprite.setSpriteClip(0 * mWidth, 0, mSprite.getWidth(), mSprite.getHeight()); break; case BULLET_LEFT: //Establece la velocidad inicial mVelX = -2; //Rectangulo con los gráficos del objeto mSprite.setSpriteClip(1 * mWidth, 0, mSprite.getWidth(), mSprite.getHeight()); break; case BULLET_RIGHT: //Establece la velocidad inicial mVelX = 2; //Rectangulo con los gráficos del objeto mSprite.setSpriteClip(2 * mWidth, 0, mSprite.getWidth(), mSprite.getHeight()); break; default: break; } //Establece el tamaño del circulo de colisión mCollider.r = mWidth / 2; //Alinea el circulo de colisión con el objeto shiftColliders(); } //Pinta el objeto en pantalla void Bullet::render() { mSprite.render(); } //Actualiza la posición y estado del objeto en horizontal void Bullet::move() { //Mueve el objeto a su nueva posición mPosX += mVelX; //Si el objeto se sale del area de juego por los laterales if ((mPosX < PLAY_AREA_LEFT) || (mPosX + mWidth > PLAY_AREA_RIGHT)) { //Se deshabilita mKind = NO_KIND; } //Mueve el objeto a su nueva posición en vertical mPosY += int(mVelY); //Si el objeto se sale del area de juego por la parte superior o inferior if ((mPosY < PLAY_AREA_TOP) || (mPosY + mHeight > PLAY_AREA_BOTTOM)) { //Se deshabilita mKind = NO_KIND; } //Actualiza la posición del sprite mSprite.setPosX(mPosX); mSprite.setPosY(mPosY); //Alinea el circulo de colisión con el objeto shiftColliders(); } #ifdef TEST void Bullet::testMove() { //Update sprite position mSprite.setPosX(mPosX); mSprite.setPosY(mPosY); //Update circle colliders shiftColliders(); } #endif //Deshabilita el objeto void Bullet::erase() { mKind = NO_KIND; } //Comprueba si el objeto está activo bool Bullet::isActive() { if (mKind == NO_KIND) { return false; } else { return true; } } //Obtiene el valor de la variable int Bullet::getPosX() { return mPosX; } //Obtiene el valor de la variable int Bullet::getPosY() { return mPosY; } //Establece el valor de la variable void Bullet::setPosX(int x) { mPosX = x; } //Establece el valor de la variable void Bullet::setPosY(int y) { mPosY = y; } //Obtiene el valor de la variable float Bullet::getVelY() { return mVelY; } //Obtiene el valor de la variable int Bullet::getKind() { return mKind; } //Obtiene el circulo de colisión Circle &Bullet::getCollider() { return mCollider; } //Alinea el circulo de colisión con el objeto void Bullet::shiftColliders() { mCollider.x = mPosX + mCollider.r; mCollider.y = mPosY + mCollider.r; }