netejant capçaleres

This commit is contained in:
2025-11-12 10:14:47 +01:00
parent 580e52a51e
commit cf40865d37
4 changed files with 54 additions and 58 deletions

View File

@@ -13,7 +13,7 @@
#include "utils/utils.hpp" // Para printWithDots
// Carga las animaciones en un vector(Animations) desde un fichero
auto loadAnimationsFromFile(const std::string& file_path) -> Animations {
auto SurfaceAnimatedSprite::loadAnimationsFromFile(const std::string& file_path) -> Animations {
// Load file using ResourceHelper (supports both filesystem and pack)
auto file_data = Resource::Helper::loadFile(file_path);
if (file_data.empty()) {
@@ -46,7 +46,7 @@ auto loadAnimationsFromFile(const std::string& file_path) -> Animations {
SurfaceAnimatedSprite::SurfaceAnimatedSprite(const std::string& file_path) {
// Carga las animaciones
if (!file_path.empty()) {
Animations v = loadAnimationsFromFile(file_path);
Animations v = SurfaceAnimatedSprite::loadAnimationsFromFile(file_path);
setAnimations(v);
}
}
@@ -63,7 +63,7 @@ SurfaceAnimatedSprite::SurfaceAnimatedSprite(std::shared_ptr<Surface> surface, c
: SurfaceMovingSprite(std::move(surface)) {
// Carga las animaciones
if (!file_path.empty()) {
Animations v = loadAnimationsFromFile(file_path);
Animations v = SurfaceAnimatedSprite::loadAnimationsFromFile(file_path);
setAnimations(v);
}
}
@@ -211,7 +211,7 @@ auto parseGlobalParameter(const std::string& line, std::shared_ptr<Surface>& sur
}
// Helper: Parsea los frames de una animación desde una cadena separada por comas
void parseAnimationFrames(const std::string& value, AnimationData& animation, float frame_width, float frame_height, int frames_per_row, int max_tiles) {
void parseAnimationFrames(const std::string& value, SurfaceAnimatedSprite::AnimationData& animation, float frame_width, float frame_height, int frames_per_row, int max_tiles) {
std::stringstream ss(value);
std::string tmp;
SDL_FRect rect = {0.0F, 0.0F, frame_width, frame_height};
@@ -227,7 +227,7 @@ void parseAnimationFrames(const std::string& value, AnimationData& animation, fl
}
// Helper: Parsea un parámetro de animación individual
auto parseAnimationParameter(const std::string& key, const std::string& value, AnimationData& animation, float frame_width, float frame_height, int frames_per_row, int max_tiles) -> bool {
auto parseAnimationParameter(const std::string& key, const std::string& value, SurfaceAnimatedSprite::AnimationData& animation, float frame_width, float frame_height, int frames_per_row, int max_tiles) -> bool {
if (key == "name") {
animation.name = value;
return true;
@@ -251,8 +251,8 @@ auto parseAnimationParameter(const std::string& key, const std::string& value, A
}
// Helper: Parsea una animación completa
auto parseAnimation(const Animations& animations, size_t& index, float frame_width, float frame_height, int frames_per_row, int max_tiles) -> AnimationData {
AnimationData animation;
auto parseAnimation(const SurfaceAnimatedSprite::Animations& animations, size_t& index, float frame_width, float frame_height, int frames_per_row, int max_tiles) -> SurfaceAnimatedSprite::AnimationData {
SurfaceAnimatedSprite::AnimationData animation;
std::string line;
do {
@@ -295,7 +295,7 @@ void SurfaceAnimatedSprite::setAnimations(const Animations& animations) {
// Si la linea contiene el texto [animation] se realiza el proceso de carga de una animación
if (line == "[animation]") {
AnimationData animation = parseAnimation(animations, index, frame_width, frame_height, frames_per_row, max_tiles);
SurfaceAnimatedSprite::AnimationData animation = parseAnimation(animations, index, frame_width, frame_height, frames_per_row, max_tiles);
animations_.emplace_back(animation);
}

View File

@@ -8,37 +8,17 @@
#include <vector> // Para vector
#include "core/rendering/surface_moving_sprite.hpp" // Para SMovingSprite
class Surface; // lines 9-9
struct AnimationData {
std::string name; // Nombre de la animacion
std::vector<SDL_FRect> frames; // Cada uno de los frames que componen la animación
float speed{0.083F}; // Velocidad de la animación (segundos por frame)
int loop{0}; // Indica a que frame vuelve la animación al terminar. -1 para que no vuelva
bool completed{false}; // Indica si ha finalizado la animación
int current_frame{0}; // Frame actual
float accumulated_time{0.0F}; // Tiempo acumulado para las animaciones (time-based)
};
using Animations = std::vector<std::string>;
// Carga las animaciones en un vector(Animations) desde un fichero
auto loadAnimationsFromFile(const std::string& file_path) -> Animations;
class Surface;
class SurfaceAnimatedSprite : public SurfaceMovingSprite {
protected:
// Variables
std::vector<AnimationData> animations_; // Vector con las diferentes animaciones
int current_animation_ = 0; // Animacion activa
// Calcula el frame correspondiente a la animación actual (time-based)
void animate(float delta_time);
// Carga la animación desde un vector de cadenas
void setAnimations(const Animations& animations);
public:
// Constructor
using Animations = std::vector<std::string>; // Tipo para lista de animaciones
// Métodos estáticos
static auto loadAnimationsFromFile(const std::string& file_path) -> Animations; // Carga las animaciones desde fichero
// Constructores
explicit SurfaceAnimatedSprite(const std::string& file_path);
explicit SurfaceAnimatedSprite(const Animations& animations);
SurfaceAnimatedSprite(std::shared_ptr<Surface> surface, const std::string& file_path);
@@ -46,28 +26,44 @@ class SurfaceAnimatedSprite : public SurfaceMovingSprite {
explicit SurfaceAnimatedSprite(std::shared_ptr<Surface> surface)
: SurfaceMovingSprite(std::move(surface)) {}
// Destructor
~SurfaceAnimatedSprite() override = default;
~SurfaceAnimatedSprite() override = default; // Destructor
// Actualiza las variables del objeto (time-based)
void update(float delta_time) override;
void update(float delta_time) override; // Actualiza las variables del objeto (time-based)
// Comprueba si ha terminado la animación
auto animationIsCompleted() -> bool;
// Consultas de estado
auto animationIsCompleted() -> bool; // Comprueba si ha terminado la animación
auto getIndex(const std::string& name) -> int; // Obtiene el índice de la animación por nombre
auto getCurrentAnimationSize() -> int { return static_cast<int>(animations_[current_animation_].frames.size()); } // Número de frames de la animación actual
// Obtiene el indice de la animación a partir del nombre
auto getIndex(const std::string& name) -> int;
// Modificadores de animación
void setCurrentAnimation(const std::string& name = "default"); // Establece la animación actual por nombre
void setCurrentAnimation(int index = 0); // Establece la animación actual por índice
void resetAnimation(); // Reinicia la animación
void setCurrentAnimationFrame(int num); // Establece el frame actual de la animación
// Establece la animacion actual
void setCurrentAnimation(const std::string& name = "default");
void setCurrentAnimation(int index = 0);
protected:
// Métodos protegidos
void animate(float delta_time); // Calcula el frame correspondiente a la animación actual (time-based)
void setAnimations(const Animations& animations); // Carga la animación desde un vector de cadenas
// Reinicia la animación
void resetAnimation();
private:
// Estructura interna de datos de animación
struct AnimationData {
std::string name{}; // Nombre de la animacion
std::vector<SDL_FRect> frames; // Cada uno de los frames que componen la animación
float speed{0.083F}; // Velocidad de la animación (segundos por frame)
int loop{0}; // Indica a que frame vuelve la animación al terminar. -1 para que no vuelva
bool completed{false}; // Indica si ha finalizado la animación
int current_frame{0}; // Frame actual
float accumulated_time{0.0F}; // Tiempo acumulado para las animaciones (time-based)
};
// Establece el frame actual de la animación
void setCurrentAnimationFrame(int num);
// Funciones amigas (helper functions del .cpp)
friend void parseAnimationFrames(const std::string& value, AnimationData& animation, float frame_width, float frame_height, int frames_per_row, int max_tiles);
friend auto parseAnimationParameter(const std::string& key, const std::string& value, AnimationData& animation, float frame_width, float frame_height, int frames_per_row, int max_tiles) -> bool;
friend auto parseAnimation(const Animations& animations, size_t& index, float frame_width, float frame_height, int frames_per_row, int max_tiles) -> AnimationData;
// Obtiene el numero de frames de la animación actual
auto getCurrentAnimationSize() -> int { return static_cast<int>(animations_[current_animation_].frames.size()); }
// Variables miembro
std::vector<AnimationData> animations_; // Vector con las diferentes animaciones
int current_animation_{0}; // Animación activa
};

View File

@@ -149,7 +149,7 @@ auto Cache::getText(const std::string& name) -> std::shared_ptr<Text> {
}
// Obtiene la animación a partir de un nombre
auto Cache::getAnimations(const std::string& name) -> Animations& {
auto Cache::getAnimations(const std::string& name) -> SurfaceAnimatedSprite::Animations& {
auto it = std::ranges::find_if(animations_, [&name](const auto& a) { return a.name == name; });
if (it != animations_.end()) {
@@ -300,7 +300,7 @@ void Cache::loadAnimations() {
for (const auto& l : list) {
auto name = getFileName(l);
animations_.emplace_back(name, loadAnimationsFromFile(l));
animations_.emplace_back(name, SurfaceAnimatedSprite::loadAnimationsFromFile(l));
updateLoadingProgress();
}
}

View File

@@ -80,11 +80,11 @@ struct ResourceText {
// Estructura para almacenar ficheros animaciones y su nombre
struct ResourceAnimation {
std::string name; // Nombre del fichero
Animations animation; // Objeto con las animaciones
std::string name; // Nombre del fichero
SurfaceAnimatedSprite::Animations animation; // Objeto con las animaciones
// Constructor
ResourceAnimation(std::string name, Animations animation)
ResourceAnimation(std::string name, SurfaceAnimatedSprite::Animations animation)
: name(std::move(name)),
animation(std::move(animation)) {}
};
@@ -245,7 +245,7 @@ class Cache {
auto getText(const std::string& name) -> std::shared_ptr<Text>;
// Obtiene la animación a partir de un nombre
auto getAnimations(const std::string& name) -> Animations&;
auto getAnimations(const std::string& name) -> SurfaceAnimatedSprite::Animations&;
// Obtiene el mapa de tiles a partir de un nombre
auto getTileMap(const std::string& name) -> std::vector<int>&;