#pragma once #include #include "sprite.h" #ifndef MOVINGSPRITE_H #define MOVINGSPRITE_H // Clase MovingSprite. Añade posicion y velocidad en punto flotante class MovingSprite : public Sprite { protected: // Objetos y punteros SDL_Point *center; // Centro de rotación // Variables float x; // Posición en el eje X float y; // Posición en el eje Y float xPrev; // Posición anterior en el eje X float yPrev; // Posición anterior en el eje Y float vx; // Velocidad en el eje X. Cantidad de pixeles a desplazarse float vy; // Velocidad en el eje Y. Cantidad de pixeles a desplazarse float ax; // Aceleración en el eje X. Variación de la velocidad float ay; // Aceleración en el eje Y. Variación de la velocidad float zoomW; // Zoom aplicado a la anchura float zoomH; // Zoom aplicado a la altura double angle; // Angulo para dibujarlo bool rotateEnabled; // Indica si ha de rotar int rotateSpeed; // Velocidad de giro double rotateAmount; // Cantidad de grados a girar en cada iteración int counter; // Contador interno SDL_RendererFlip currentFlip; // Indica como se voltea el sprite bool currentFlipV; bool currentFlipH; public: // Constructor MovingSprite(float x = 0, float y = 0, int w = 0, int h = 0, float velx = 0, float vely = 0, float accelx = 0, float accely = 0, Texture *texture = nullptr, SDL_Renderer *renderer = nullptr); // Destructor ~MovingSprite(); // Mueve el sprite void move(); // Rota el sprite void rotate(); // Actualiza las variables internas del objeto void update(); // Reinicia todas las variables void clear(); // Muestra el sprite por pantalla void render(); // Obten el valor de la variable float getPosX(); // Obten el valor de la variable float getPosY(); // Obten el valor de la variable float getVelX(); // Obten el valor de la variable float getVelY(); // Obten el valor de la variable float getAccelX(); // Obten el valor de la variable float getAccelY(); // Obten el valor de la variable float getZoomW(); // Obten el valor de la variable float getZoomH(); // Obten el valor de la variable double getAngle(); // Obtiene el valor de la variable bool getRotate(); // Obtiene el valor de la variable Uint16 getRotateSpeed(); // Establece la posición y el tamaño del objeto void setRect(SDL_Rect rect); // Establece el valor de la variable void setPosX(float value); // Establece el valor de la variable void setPosY(float value); // Establece el valor de la variable void setVelX(float value); // Establece el valor de la variable void setVelY(float value); // Establece el valor de la variable void setAccelX(float value); // Establece el valor de la variable void setAccelY(float value); // Establece el valor de la variable void setZoomW(float value); // Establece el valor de la variable void setZoomH(float value); // Establece el valor de la variable void setAngle(double vaue); // Incrementa el valor de la variable void incAngle(double value); // Decrementa el valor de la variable void decAngle(double value); // Establece el valor de la variable void setRotate(bool value); // Establece el valor de la variable void setRotateSpeed(int value); // Establece el valor de la variable void setRotateAmount(double value); // Quita el efecto de rotación y deja el sprite en su angulo inicial. void disableRotate(); // Cambia el sentido de la rotación void switchRotate(); // Actualiza el valor de la variable void updateCurrentFlip(); // Establece el valor de la variable void setFlipH(bool flip); // Gira el sprite horizontalmente void flipH(); // Establece el valor de la variable void setFlipV(bool flip); // Voltea el sprite verticalmente void flipV(); // Obtiene el valor de la variable SDL_RendererFlip getFlip(); // Obtiene el valor de la variable bool getFlipH(); // Obtiene el valor de la variable bool getFlipV(); // Devuelve el rectangulo donde está el sprite SDL_Rect getRect(); // Deshace el último movimiento void undoMove(); // Deshace el último movimiento en el eje X void undoMoveX(); // Deshace el último movimiento en el eje Y void undoMoveY(); // Pone a cero las velocidades de desplacamiento void clearVel(); // Devuelve el incremento en el eje X en pixels int getIncX(); }; #endif