From 7725f8ab3ea57153fea70a5e978615bde76ee385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Sun, 7 May 2023 12:55:32 +0200 Subject: [PATCH] Sprite: Se peude establecer el nivel de zoom en ancho y alto --- main.cpp | 19 +++++++++++++------ units/screen.cpp | 6 +++--- units/sprite.cpp | 18 +++++++++++++++++- units/sprite.h | 8 ++++++++ units/text.cpp | 25 ++++++++++++++++++++++++- units/text.h | 9 ++++++++- 6 files changed, 73 insertions(+), 12 deletions(-) diff --git a/main.cpp b/main.cpp index 443c420..8a934e3 100644 --- a/main.cpp +++ b/main.cpp @@ -90,8 +90,8 @@ int main(int argc, char *argv[]) MovingSprite *sprite = new MovingSprite(); sprite->setRenderer(renderer); sprite->setTexture(texture); - sprite->setPosX(0); - sprite->setPosY(0); + sprite->setPosX(140); + sprite->setPosY(100); sprite->setWidth(16); sprite->setHeight(32); sprite->setSpriteClip({0, 0, 16, 32}); @@ -116,6 +116,9 @@ int main(int argc, char *argv[]) { switch (event->key.keysym.scancode) { + case SDL_SCANCODE_N: + screen->showNotification("Ejemplo de", "notificacion", 1); + break; default: break; @@ -168,7 +171,7 @@ int main(int argc, char *argv[]) sprite->update(); // Actualiza el degradado - // if (counter % 4 == 0) + if (counter % 1 == 0) { gradBreathDirection == 0 ? gradCurrentColor-- : gradCurrentColor++; if (gradCurrentColor == gradColorMin) @@ -183,10 +186,9 @@ int main(int argc, char *argv[]) } // Dibuja en pantalla - //SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); - //SDL_RenderClear(renderer); screen->start(); screen->clean(); + // Dibuja un degradado de fondo const int gradFirstLine = options->gameHeight / 3; const int gradLastLine = options->gameHeight; @@ -200,12 +202,17 @@ int main(int argc, char *argv[]) SDL_SetRenderDrawColor(renderer, color, 0x00, 0x00, 0xFF); SDL_RenderDrawLine(renderer, 0, i, options->gameWidth, i); } + // Escribe el texto + text->setZoom(2); text->writeCentered(options->gameWidth / 2, text->getCharacterSize(), "Jail Engine DEMO"); + text->disableZoom(); + text->writeCentered(options->gameWidth / 2, text->getCharacterSize() * 6, "Pulsa 'N' para mostrar una notificacion"); + // Dibuja el sprite sprite->render(); + // Vuelca el buffer en pantalla - //SDL_RenderPresent(renderer); screen->blit(); } diff --git a/units/screen.cpp b/units/screen.cpp index 7c9c359..3bae021 100644 --- a/units/screen.cpp +++ b/units/screen.cpp @@ -414,16 +414,16 @@ void Screen::showNotification(std::string text1, std::string text2, int icon) // Dibuja las notificaciones void Screen::renderNotifications() { - if (notifyAdded) + //if (notifyAdded) { if (!notifyActive) { return; } - SDL_RenderSetLogicalSize(renderer, notificationLogicalWidth, notificationLogicalHeight); + //SDL_RenderSetLogicalSize(renderer, notificationLogicalWidth, notificationLogicalHeight); notify->render(); - SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight); + //SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight); } } diff --git a/units/sprite.cpp b/units/sprite.cpp index 5654a5a..0cdde12 100644 --- a/units/sprite.cpp +++ b/units/sprite.cpp @@ -22,6 +22,8 @@ Sprite::Sprite(int x, int y, int w, int h, Texture *texture, SDL_Renderer *rende // Inicializa variables enabled = true; + zoomW = 1.0f; + zoomH = 1.0f; } Sprite::Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer) @@ -45,6 +47,8 @@ Sprite::Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer) // Inicializa variables enabled = true; + zoomW = 1.0f; + zoomH = 1.0f; } // Muestra el sprite por pantalla @@ -52,7 +56,7 @@ void Sprite::render() { if (enabled) { - texture->render(renderer, x, y, &spriteClip); + texture->render(renderer, x, y, &spriteClip, zoomW, zoomH); } } @@ -198,4 +202,16 @@ void Sprite::setRect(SDL_Rect rect) y = rect.y; w = rect.w; h = rect.h; +} + +// Establece el nivel de zoom en horizontal +void Sprite::setZoomW(float value) +{ + zoomW = value; +} + +// Establece el nivel de zoom en vertical +void Sprite::setZoomH(float value) +{ + zoomH = value; } \ No newline at end of file diff --git a/units/sprite.h b/units/sprite.h index 0e0c407..c4e69a3 100644 --- a/units/sprite.h +++ b/units/sprite.h @@ -21,6 +21,8 @@ protected: int h; // Alto del sprite SDL_Rect spriteClip; // Rectangulo de origen de la textura que se dibujará en pantalla bool enabled; // Indica si el sprite esta habilitado + float zoomW; // Cantidad de zoom en horizontal a aplicar al sprite + float zoomH; // Cantidad de zoom en verical a aplicar al sprite public: // Constructor @@ -95,6 +97,12 @@ public: // Establece los valores de posición y tamaño del sprite void setRect(SDL_Rect rect); + + // Establece el nivel de zoom en horizontal + void setZoomW(float value); + + // Establece el nivel de zoom en vertical + void setZoomH(float value); }; #endif diff --git a/units/text.cpp b/units/text.cpp index 8b713d7..c90544b 100644 --- a/units/text.cpp +++ b/units/text.cpp @@ -98,6 +98,7 @@ Text::Text(string textFile, string bitmapFile, SDL_Renderer *renderer) // Inicializa variables fixedWidth = false; + zoom = 1; } // Constructor @@ -121,6 +122,7 @@ Text::Text(string textFile, Texture *texture, SDL_Renderer *renderer) // Inicializa variables fixedWidth = false; + zoom = 1; } // Constructor @@ -141,6 +143,7 @@ Text::Text(textFile_t *textFile, Texture *texture, SDL_Renderer *renderer) // Inicializa variables fixedWidth = false; + zoom = 1; } // Destructor @@ -168,7 +171,7 @@ void Text::write(int x, int y, string text, int kerning, int lenght) sprite->setPosY(y); sprite->render(); // shift += (offset[int(text[i])].w + kerning); - shift += fixedWidth ? boxWidth : (offset[int(text[i])].w + kerning); + shift += fixedWidth ? boxWidth * zoom : (offset[int(text[i])].w + kerning) * zoom; } } @@ -266,4 +269,24 @@ void Text::reLoadTexture() void Text::setFixedWidth(bool value) { fixedWidth = value; +} + +// Establece el tamaño del zoom +void Text::setZoom(int value) +{ + if (value < 1) + { + value = 1; + } + zoom = value; + sprite->setZoomW(zoom); + sprite->setZoomH(zoom); +} + +// Quita el zoom +void Text::disableZoom() +{ + zoom = 1; + sprite->setZoomW(zoom); + sprite->setZoomH(zoom); } \ No newline at end of file diff --git a/units/text.h b/units/text.h index 7946e59..5b78baf 100644 --- a/units/text.h +++ b/units/text.h @@ -34,9 +34,10 @@ class Text private: // Objetos y punteros Texture *texture; // Textura con los gráficos para el texto - Sprite *sprite; // Objeto para dibujar el texto + Sprite *sprite; // Objeto para dibujar el texto // Variables + int zoom; // Tamaño del texto int boxWidth; // Anchura de la caja de cada caracter en el png int boxHeight; // Altura de la caja de cada caracter en el png bool fixedWidth; // Indica si el texto se ha de escribir con longitud fija en todas las letras @@ -77,6 +78,12 @@ public: // Establece si se usa un tamaño fijo de letra void setFixedWidth(bool value); + + // Establece el tamaño del zoom + void setZoom(int value); + + // Quita el zoom + void disableZoom(); }; #endif