Bullet: ara tenen animació de tres frames, encara que no es nota una puta merda

This commit is contained in:
2025-06-26 21:13:51 +02:00
parent 00b496957c
commit 57123d6b8a
9 changed files with 88 additions and 24 deletions

View File

@@ -3,11 +3,12 @@
#include <memory> // Para unique_ptr, make_unique, shared_ptr
#include "param.h" // Para Param, ParamGame, param
#include "sprite.h" // Para Sprite
class Texture; // lines 5-5
#include "resource.h"
class Texture; // lines 5-5
// Constructor
Bullet::Bullet(float x, float y, BulletType bullet_type, bool powered_up, int owner, std::shared_ptr<Texture> texture)
: sprite_(std::make_unique<Sprite>(texture, SDL_FRect{x, y, BULLET_WIDTH_, BULLET_HEIGHT_})),
Bullet::Bullet(float x, float y, BulletType bullet_type, bool powered, int owner)
: sprite_(std::make_unique<AnimatedSprite>(Resource::get()->getTexture("bullet.png"), Resource::get()->getAnimation("bullet.ani"))),
pos_x_(x),
pos_y_(y),
bullet_type_(bullet_type),
@@ -17,9 +18,24 @@ Bullet::Bullet(float x, float y, BulletType bullet_type, bool powered_up, int ow
: (bullet_type_ == BulletType::RIGHT) ? BULLET_VEL_X_RIGHT_
: 0;
int sprite_offset = powered_up ? 3 : 0;
int offset = (static_cast<int>(bullet_type) + sprite_offset) * BULLET_WIDTH_;
sprite_->setSpriteClip(offset, 0, BULLET_WIDTH_, BULLET_HEIGHT_);
std::string powered_type = powered ? "powered_" : "normal_";
switch (bullet_type)
{
case BulletType::UP:
sprite_->setCurrentAnimation(powered_type + "up");
break;
case BulletType::LEFT:
sprite_->setCurrentAnimation(powered_type + "left");
break;
case BulletType::RIGHT:
sprite_->setCurrentAnimation(powered_type + "right");
break;
default:
break;
}
collider_.r = BULLET_WIDTH_ / 2;
shiftColliders();
@@ -28,7 +44,15 @@ Bullet::Bullet(float x, float y, BulletType bullet_type, bool powered_up, int ow
// Implementación de render (llama al render del sprite_)
void Bullet::render()
{
sprite_->render();
if (bullet_type_ != BulletType::NONE)
sprite_->render();
}
// Actualiza el estado del objeto
BulletMoveStatus Bullet::update()
{
sprite_->update();
return move();
}
// Implementación del movimiento usando BulletMoveStatus