delta-time: bullet.cpp
This commit is contained in:
@@ -60,13 +60,19 @@ void Bullet::render() {
|
||||
}
|
||||
}
|
||||
|
||||
// Actualiza el estado del objeto
|
||||
// Actualiza el estado del objeto (frame-based)
|
||||
auto Bullet::update() -> BulletMoveStatus {
|
||||
sprite_->update();
|
||||
return move();
|
||||
}
|
||||
|
||||
// Implementación del movimiento usando BulletMoveStatus
|
||||
// Actualiza el estado del objeto (time-based)
|
||||
auto Bullet::update(float deltaTime) -> BulletMoveStatus {
|
||||
sprite_->update(deltaTime);
|
||||
return move(deltaTime);
|
||||
}
|
||||
|
||||
// Implementación del movimiento usando BulletMoveStatus (frame-based)
|
||||
auto Bullet::move() -> BulletMoveStatus {
|
||||
pos_x_ += vel_x_;
|
||||
if (pos_x_ < param.game.play_area.rect.x - WIDTH || pos_x_ > param.game.play_area.rect.w) {
|
||||
@@ -86,6 +92,29 @@ auto Bullet::move() -> BulletMoveStatus {
|
||||
return BulletMoveStatus::OK;
|
||||
}
|
||||
|
||||
// Implementación del movimiento usando BulletMoveStatus (time-based)
|
||||
auto Bullet::move(float deltaTime) -> BulletMoveStatus {
|
||||
// Convertir deltaTime (milisegundos) a factor de frame (asumiendo 60fps)
|
||||
float frameFactor = deltaTime / (1000.0f / 60.0f);
|
||||
|
||||
pos_x_ += vel_x_ * frameFactor;
|
||||
if (pos_x_ < param.game.play_area.rect.x - WIDTH || pos_x_ > param.game.play_area.rect.w) {
|
||||
disable();
|
||||
return BulletMoveStatus::OUT;
|
||||
}
|
||||
|
||||
pos_y_ += VEL_Y * frameFactor;
|
||||
if (pos_y_ < param.game.play_area.rect.y - HEIGHT) {
|
||||
disable();
|
||||
return BulletMoveStatus::OUT;
|
||||
}
|
||||
|
||||
shiftSprite();
|
||||
shiftColliders();
|
||||
|
||||
return BulletMoveStatus::OK;
|
||||
}
|
||||
|
||||
auto Bullet::isEnabled() const -> bool {
|
||||
return bullet_type_ != BulletType::NONE;
|
||||
}
|
||||
|
||||
@@ -34,9 +34,10 @@ class Bullet {
|
||||
~Bullet() = default; // Destructor
|
||||
|
||||
// --- Métodos principales ---
|
||||
void render(); // Dibuja la bala en pantalla
|
||||
auto update() -> BulletMoveStatus; // Actualiza el estado del objeto
|
||||
void disable(); // Desactiva la bala
|
||||
void render(); // Dibuja la bala en pantalla
|
||||
auto update() -> BulletMoveStatus; // Actualiza el estado del objeto (frame-based)
|
||||
auto update(float deltaTime) -> BulletMoveStatus; // Actualiza el estado del objeto (time-based)
|
||||
void disable(); // Desactiva la bala
|
||||
|
||||
// --- Getters ---
|
||||
[[nodiscard]] auto isEnabled() const -> bool; // Comprueba si está activa
|
||||
@@ -64,7 +65,8 @@ class Bullet {
|
||||
// --- Métodos internos ---
|
||||
void shiftColliders(); // Ajusta el círculo de colisión
|
||||
void shiftSprite(); // Ajusta el sprite
|
||||
auto move() -> BulletMoveStatus; // Mueve la bala y devuelve su estado
|
||||
auto move() -> BulletMoveStatus; // Mueve la bala y devuelve su estado (frame-based)
|
||||
auto move(float deltaTime) -> BulletMoveStatus; // Mueve la bala y devuelve su estado (time-based)
|
||||
static auto calculateVelocity(BulletType bullet_type) -> float; // Calcula la velocidad horizontal de la bala
|
||||
static auto buildAnimationString(BulletType bullet_type, bool powered) -> std::string; // Construye el string de animación
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user