arreglos varios pa que JailDoc puga tastar com va açò

This commit is contained in:
2026-04-16 17:53:07 +02:00
parent 4da00d81c2
commit 6ea50cf35e
17 changed files with 322 additions and 104 deletions

View File

@@ -1,12 +1,15 @@
#include "game/entities/key.hpp"
#include <cmath> // Para std::sin
#include "core/rendering/sprite/animated_sprite.hpp" // Para AnimatedSprite
#include "core/resources/resource_cache.hpp" // Para Resource
// Constructor: carga la animación, posiciona el sprite y crea el collider
Key::Key(const Data& data)
: sprite_(std::make_shared<AnimatedSprite>(Resource::Cache::get()->getAnimationData(data.animation_path))),
id_(data.id) {
id_(data.id),
base_y_(data.y) {
sprite_->setPosX(data.x);
sprite_->setPosY(data.y);
sprite_->setCurrentAnimation("default");
@@ -18,17 +21,22 @@ void Key::render() {
sprite_->render();
}
// Avanza la animación de la llave
// Avanza la animación de la llave y aplica el movimiento flotante sinusoidal
void Key::update(float delta_time) {
if (is_paused_) {
return;
}
sprite_->animate(delta_time);
// Oscilacion sinusoidal sincronizada (mismo tiempo global para todas las llaves)
const float t = static_cast<float>(SDL_GetTicks()) / 1000.0F;
const float offset = std::sin(t * 2.0F * SDL_PI_F / FLOAT_PERIOD_S) * FLOAT_AMPLITUDE;
sprite_->setPosY(base_y_ + offset);
}
// Posición actual (para registrar pickup en KeyTracker)
// Posición base (el collider y el tracker usan la posición sin oscilación)
auto Key::getPos() const -> SDL_FPoint {
return SDL_FPoint{.x = sprite_->getX(), .y = sprite_->getY()};
return SDL_FPoint{.x = sprite_->getX(), .y = base_y_};
}
#ifdef _DEBUG
@@ -36,6 +44,7 @@ auto Key::getPos() const -> SDL_FPoint {
void Key::setPosition(float x, float y) {
sprite_->setPosX(x);
sprite_->setPosY(y);
base_y_ = y;
collider_ = sprite_->getRect();
}
#endif