#pragma once #include #include "movingsprite.h" #include #include #include #include #include #ifndef ANIMATEDSPRITE_H #define ANIMATEDSPRITE_H // Clase AnimatedSprite class AnimatedSprite : public MovingSprite { private: struct t_animation { std::string name; // Nombre de la animacion std::vector frames; // Cada uno de los frames que componen la animación int speed; // Velocidad de la animación int loop; // Indica a que frame vuelve la animación al terminar. -1 para que no vuelva bool completed; // Indica si ha finalizado la animación int currentFrame; // Frame actual int counter; // Contador para las animaciones }; std::vector animation; // Vector con las diferentes animaciones int currentAnimation; // Animacion activa public: // Constructor AnimatedSprite(LTexture *texture = nullptr, SDL_Renderer *renderer = nullptr, std::string file = "", std::vector *buffer = nullptr); // Destructor ~AnimatedSprite(); // Calcula el frame correspondiente a la animación actual void animate(); // Establece el frame actual de la animación void setCurrentFrame(int num); // Establece el valor del contador void setAnimationCounter(std::string name, int num); // Establece la velocidad de una animación void setAnimationSpeed(std::string name, int speed); void setAnimationSpeed(int index, int speed); // Establece el frame al que vuelve la animación al finalizar void setAnimationLoop(std::string name, int loop); void setAnimationLoop(int index, int loop); // Establece el valor de la variable void setAnimationCompleted(std::string name, bool value); void setAnimationCompleted(int index, bool value); // Comprueba si ha terminado la animación bool animationIsCompleted(); // Devuelve el rectangulo de una animación y frame concreto SDL_Rect getAnimationClip(std::string name, Uint8 index); SDL_Rect getAnimationClip(int indexA, Uint8 indexF); // Obtiene el indice de la animación a partir del nombre int getIndex(std::string name); // Carga la animación desde un fichero bool loadFromFile(std::string filePath); // Carga la animación desde un vector bool loadFromVector(std::vector *source); // Establece la animacion actual void setCurrentAnimation(std::string name = "default"); void setCurrentAnimation(int index = 0); // Actualiza las variables del objeto void update(); // OLD - Establece el rectangulo para un frame de una animación void setAnimationFrames(Uint8 index_animation, Uint8 index_frame, int x, int y, int w, int h); // OLD - Establece el contador para todas las animaciones void setAnimationCounter(int value); // Reinicia la animación void resetAnimation(); }; #endif