forked from jaildesigner-jailgames/jaildoctors_dilemma
92 lines
3.0 KiB
C++
92 lines
3.0 KiB
C++
#pragma once
|
|
|
|
#include <SDL2/SDL.h>
|
|
#include "movingsprite.h"
|
|
#include <vector>
|
|
#include <string>
|
|
#include <sstream>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
|
|
#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<SDL_Rect> 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<t_animation> 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<std::string> *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<std::string> *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 |