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

@@ -18,7 +18,7 @@ namespace Defaults::Canvas {
} // namespace Defaults::Canvas
namespace Defaults::Window {
constexpr int ZOOM = 2; // Zoom de la ventana por defecto
constexpr int ZOOM = 3; // Zoom de la ventana por defecto
} // namespace Defaults::Window
namespace Defaults::Video {
@@ -114,6 +114,10 @@ namespace Defaults::Console {
constexpr Uint8 COMMAND_COLOR = 9; // Color del texto que escribe el usuario
} // namespace Defaults::Console
namespace Defaults::Loading {
constexpr bool SHOW_PROGRESS = false; // Por defecto no mostrar la barra de carga de recursos
} // namespace Defaults::Loading
namespace Defaults::Localization {
constexpr const char* LANGUAGE = "ca"; // Idioma por defecto (en = inglés, ca = catalán)
} // namespace Defaults::Localization

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

View File

@@ -24,6 +24,9 @@ class Key {
float y{0.0F}; // Posición Y en píxeles
};
static constexpr float FLOAT_PERIOD_S = 2.0F; // Segundos por ciclo sinusoidal (todas las llaves sincronizadas)
static constexpr float FLOAT_AMPLITUDE = 2.0F; // Amplitud en píxeles
explicit Key(const Data& data);
~Key() = default;
@@ -44,5 +47,6 @@ class Key {
std::shared_ptr<AnimatedSprite> sprite_; // Sprite animado de la llave
SDL_FRect collider_{}; // Rectángulo de colisión
std::string id_; // Identificador
float base_y_{0.0F}; // Posición Y base (el sprite oscila alrededor)
bool is_paused_{false}; // Indica si la llave está pausada
};

View File

@@ -631,6 +631,19 @@ namespace Options {
}
}
// Carga configuración de la pantalla de carga de recursos desde YAML
void loadLoadingConfigFromYaml(const fkyaml::node& yaml) {
if (!yaml.contains("loading")) { return; }
const auto& l = yaml["loading"];
if (l.contains("show_progress")) {
try {
loading.show_progress = l["show_progress"].get_value<bool>();
} catch (...) { /* @INTENTIONAL: campo yaml ausente o malformado → dejar default */
}
}
}
// Carga configuración de idioma desde YAML
void loadLocalizationFromYaml(const fkyaml::node& yaml) {
if (yaml.contains("localization")) {
@@ -696,6 +709,7 @@ namespace Options {
loadKioskConfigFromYaml(yaml);
loadLocalizationFromYaml(yaml);
loadConsoleConfigFromYaml(yaml);
loadLoadingConfigFromYaml(yaml);
std::cout << "Config file loaded successfully\n\n";
@@ -832,6 +846,12 @@ namespace Options {
file << " text: \"" << kiosk.text << "\"\n";
file << " infinite_lives: " << (kiosk.infinite_lives ? "true" : "false") << "\n";
// LOADING
file << "\n";
file << "# LOADING (pantalla de carga de recursos)\n";
file << "loading:\n";
file << " show_progress: " << (loading.show_progress ? "true" : "false") << " # mostrar barra de progreso al cargar recursos\n";
// LOCALIZATION
file << "\n";
file << "# LOCALIZATION (en = English, ca = Catalan)\n";

View File

@@ -138,6 +138,11 @@ namespace Options {
float height{Defaults::Canvas::HEIGHT}; // Alto de la resolucion del juego
};
// Estructura para las opciones de la pantalla de carga de recursos
struct Loading {
bool show_progress{Defaults::Loading::SHOW_PROGRESS}; // Mostrar barra de progreso al cargar recursos
};
// Estructura para las opciones visuales de la consola en pantalla
struct Console {
bool transparent{Defaults::Console::TRANSPARENT}; // true = sin fondo, false = sólida
@@ -191,6 +196,7 @@ namespace Options {
inline GamepadControls gamepad_controls{}; // Botones del gamepad usados para jugar
inline Kiosk kiosk{}; // Opciones del modo kiosko
inline Console console{}; // Opciones visuales de la consola en pantalla
inline Loading loading{}; // Opciones de la pantalla de carga de recursos
// Idioma del juego (establecido al inicio, sin cambio en caliente)
inline std::string language{Defaults::Localization::LANGUAGE};