menudo berenjenal. sigo con la integracion con las ultimas versiones de mis librerias

This commit is contained in:
2022-09-26 11:18:50 +02:00
parent 26bc47d9f6
commit 837bcbd1da
13 changed files with 732 additions and 377 deletions

View File

@@ -2,244 +2,256 @@
#include "movingsprite.h"
// Constructor
MovingSprite::MovingSprite()
MovingSprite::MovingSprite(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, LTexture *texture, SDL_Renderer *renderer)
{
clear();
}
// Copia los punteros
this->texture = texture;
this->renderer = renderer;
// Establece el alto y el ancho del sprite
this->w = w;
this->h = h;
// Establece la posición X,Y del sprite
this->x = x;
this->y = y;
xPrev = x;
yPrev = y;
// Establece la velocidad X,Y del sprite
vx = velx;
vy = vely;
// Establece la aceleración X,Y del sprite
ax = accelx;
ay = accely;
// Establece el zoom W,H del sprite
zoomW = 1;
zoomH = 1;
// Establece el angulo con el que se dibujará
angle = (double)0;
// Establece los valores de rotacion
rotateEnabled = false;
rotateSpeed = 0;
rotateAmount = (double)0;
// Contador interno
counter = 0;
// Establece el rectangulo de donde coger la imagen
spriteClip = {0, 0, w, h};
// Establece el centro de rotación
center = {0, 0};
// Establece el tipo de volteado
currentFlip = SDL_FLIP_NONE;
};
// Destructor
MovingSprite::~MovingSprite()
{
clear();
}
// Reinicia todas las variables
void MovingSprite::clear()
{
mPosX = 0.0f; // Posición en el eje X
mPosY = 0.0f; // Posición en el eje Y
x = 0.0f; // Posición en el eje X
y = 0.0f; // Posición en el eje Y
mVelX = 0.0f; // Velocidad en el eje X. Cantidad de pixeles a desplazarse
mVelY = 0.0f; // Velocidad en el eje Y. Cantidad de pixeles a desplazarse
vx = 0.0f; // Velocidad en el eje X. Cantidad de pixeles a desplazarse
vy = 0.0f; // Velocidad en el eje Y. Cantidad de pixeles a desplazarse
mAccelX = 0.0f; // Aceleración en el eje X. Variación de la velocidad
mAccelY = 0.0f; // Aceleración en el eje Y. Variación de la velocidad
ax = 0.0f; // Aceleración en el eje X. Variación de la velocidad
ay = 0.0f; // Aceleración en el eje Y. Variación de la velocidad
mZoomW = 1.0f; // Zoom aplicado a la anchura
mZoomH = 1.0f; // Zoom aplicado a la altura
zoomW = 1.0f; // Zoom aplicado a la anchura
zoomH = 1.0f; // Zoom aplicado a la altura
mAngle = 0.0; // Angulo para dibujarlo
mRotate = false; // Indica si ha de rotar
mRotateSpeed = 0; // Velocidad de giro
mRotateAmount = 0.0; // Cantidad de grados a girar en cada iteración
mCounter = 0; // Contador interno
}
angle = 0.0; // Angulo para dibujarlo
rotateEnabled = false; // Indica si ha de rotar
center = {0, 0}; // Centro de rotación
rotateSpeed = 0; // Velocidad de giro
rotateAmount = 0.0; // Cantidad de grados a girar en cada iteración
counter = 0; // Contador interno
// Iniciador
void MovingSprite::init(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, LTexture *texture, SDL_Renderer *renderer)
{
// Establece el alto y el ancho del sprite
setWidth(w);
setHeight(h);
// Establece la posición X,Y del sprite
setPosX(x);
setPosY(y);
// Establece la velocidad X,Y del sprite
setVelX(velx);
setVelY(vely);
// Establece la aceleración X,Y del sprite
setAccelX(accelx);
setAccelY(accely);
// Establece el zoom W,H del sprite
setZoomW(1);
setZoomH(1);
// Establece el angulo con el que se dibujará
setAngle(0.0);
// Establece los valores de rotacion
setRotate(false);
setRotateSpeed(0);
setRotateAmount(0.0);
// Contador interno
mCounter = 0;
// Establece la textura donde están los gráficos para el sprite
setTexture(texture);
// Establece el renderizador
setRenderer(renderer);
// Establece el rectangulo de donde coger la imagen
setSpriteClip(0, 0, w, h);
currentFlip = SDL_FLIP_NONE; // Establece como se ha de voltear el sprite
}
// Mueve el sprite
void MovingSprite::move()
{
if (mEnabled)
if (enabled)
{
mPosX += mVelX;
mPosY += mVelY;
xPrev = x;
yPrev = y;
mVelX += mAccelX;
mVelY += mAccelY;
x += vx;
y += vy;
vx += ax;
vy += ay;
}
}
// Muestra el sprite por pantalla
void MovingSprite::render()
{
if (mEnabled)
mTexture->render(mRenderer, (int)mPosX, (int)mPosY, &mSpriteClip, mZoomW, mZoomH, mAngle);
if (enabled)
texture->render(renderer, (int)x, (int)y, &spriteClip, zoomW, zoomH, angle, &center, currentFlip);
}
// Obtiene el valor de la variable
float MovingSprite::getPosX()
{
return mPosX;
return x;
}
// Obtiene el valor de la variable
float MovingSprite::getPosY()
{
return mPosY;
return y;
}
// Obtiene el valor de la variable
float MovingSprite::getVelX()
{
return mVelX;
return vx;
}
// Obtiene el valor de la variable
float MovingSprite::getVelY()
{
return mVelY;
return vy;
}
// Obtiene el valor de la variable
float MovingSprite::getAccelX()
{
return mAccelX;
return ax;
}
// Obtiene el valor de la variable
float MovingSprite::getAccelY()
{
return mAccelY;
return ay;
}
// Obtiene el valor de la variable
float MovingSprite::getZoomW()
{
return mZoomW;
return zoomW;
}
// Obtiene el valor de la variable
float MovingSprite::getZoomH()
{
return mZoomH;
return zoomH;
}
// Obtiene el valor de la variable
double MovingSprite::getAngle()
{
return mAngle;
return angle;
}
// Establece la posición del objeto
void MovingSprite::setPos(SDL_Rect rect)
{
x = (float)rect.x;
y = (float)rect.y;
}
// Establece el valor de la variable
void MovingSprite::setPosX(float x)
void MovingSprite::setPosX(float value)
{
mPosX = x;
x = value;
}
// Establece el valor de la variable
void MovingSprite::setPosY(float y)
void MovingSprite::setPosY(float value)
{
mPosY = y;
y = value;
}
// Establece el valor de la variable
void MovingSprite::setVelX(float x)
void MovingSprite::setVelX(float value)
{
mVelX = x;
vx = value;
}
// Establece el valor de la variable
void MovingSprite::setVelY(float y)
void MovingSprite::setVelY(float value)
{
mVelY = y;
vy = value;
}
// Establece el valor de la variable
void MovingSprite::setAccelX(float x)
void MovingSprite::setAccelX(float value)
{
mAccelX = x;
ax = value;
}
// Establece el valor de la variable
void MovingSprite::setAccelY(float y)
void MovingSprite::setAccelY(float value)
{
mAccelY = y;
ay = value;
}
// Establece el valor de la variable
void MovingSprite::setZoomW(float w)
void MovingSprite::setZoomW(float value)
{
mZoomW = w;
zoomW = value;
}
// Establece el valor de la variable
void MovingSprite::setZoomH(float h)
void MovingSprite::setZoomH(float value)
{
mZoomH = h;
zoomH = value;
}
// Establece el valor de la variable
void MovingSprite::setAngle(double a)
void MovingSprite::setAngle(double value)
{
mAngle = a;
angle = value;
}
// Incrementa el valor de la variable
void MovingSprite::incAngle(double inc)
void MovingSprite::incAngle(double value)
{
mAngle += inc;
angle += value;
}
// Decrementa el valor de la variable
void MovingSprite::decAngle(double dec)
void MovingSprite::decAngle(double value)
{
mAngle -= dec;
angle -= value;
}
// Obtiene el valor de la variable
bool MovingSprite::getRotate()
{
return mRotate;
return rotateEnabled;
}
// Obtiene el valor de la variable
Uint16 MovingSprite::getRotateSpeed()
{
return mRotateSpeed;
return rotateSpeed;
}
// Establece la rotacion
void MovingSprite::rotate()
{
if (mEnabled)
if (mRotate)
if (enabled)
if (rotateEnabled)
{
if (mCounter % mRotateSpeed == 0)
if (counter % rotateSpeed == 0)
{
incAngle(mRotateAmount);
incAngle(rotateAmount);
}
}
}
@@ -247,26 +259,26 @@ void MovingSprite::rotate()
// Establece el valor de la variable
void MovingSprite::setRotate(bool value)
{
mRotate = value;
rotateEnabled = value;
}
// Establece el valor de la variable
void MovingSprite::setRotateSpeed(Uint16 value)
void MovingSprite::setRotateSpeed(int value)
{
mRotateSpeed = value;
rotateSpeed = value;
}
// Establece el valor de la variable
void MovingSprite::setRotateAmount(double value)
{
mRotateAmount = value;
rotateAmount = value;
}
// Establece el valor de la variable
void MovingSprite::disableRotate()
{
mRotate = false;
mAngle = 0;
rotateEnabled = false;
angle = (double)0;
}
// Actualiza las variables internas del objeto
@@ -275,12 +287,79 @@ void MovingSprite::update()
move();
rotate();
if (mEnabled)
++mCounter %= 60000;
if (enabled)
{
++counter %= 60000;
}
}
// Cambia el sentido de la rotación
void MovingSprite::switchRotate()
{
mRotateAmount *= -1;
rotateAmount *= -1;
}
// Establece el valor de la variable
void MovingSprite::setFlip(SDL_RendererFlip flip)
{
currentFlip = flip;
}
// Gira el sprite horizontalmente
void MovingSprite::flip()
{
currentFlip = (currentFlip == SDL_FLIP_HORIZONTAL) ? SDL_FLIP_NONE : SDL_FLIP_HORIZONTAL;
}
// Obtiene el valor de la variable
SDL_RendererFlip MovingSprite::getFlip()
{
return currentFlip;
}
// Devuelve el rectangulo donde está el sprite
SDL_Rect MovingSprite::getRect()
{
const SDL_Rect rect = {(int)x, (int)y, w, h};
return rect;
}
// Establece los valores de posición y tamaño del sprite
void MovingSprite::setRect(SDL_Rect rect)
{
x = (float)rect.x;
y = (float)rect.y;
w = rect.w;
h = rect.h;
}
// Deshace el último movimiento
void MovingSprite::undoMove()
{
x = xPrev;
y = yPrev;
}
// Deshace el último movimiento en el eje X
void MovingSprite::undoMoveX()
{
x = xPrev;
}
// Deshace el último movimiento en el eje Y
void MovingSprite::undoMoveY()
{
y = yPrev;
}
// Pone a cero las velocidades de desplacamiento
void MovingSprite::clearVel()
{
vx = vy = 0.0f;
}
// Devuelve el incremento en el eje X en pixels
int MovingSprite::getIncX()
{
return (int)x - (int)xPrev;
}