#pragma once #include // for SDL_Rect #include // for SDL_Renderer #include // for shared_ptr, unique_ptr #include // for string, basic_string #include // for vector #include "utils.h" // for Color class Sprite; class Text; class Texture; struct JA_Sound_t; // lines 12-12 class Notify { private: enum class NotificationStatus { RISING, STAY, VANISHING, FINISHED, }; enum class NotificationPosition { UPPER_LEFT, UPPER_CENTER, UPPER_RIGHT, MIDDLE_LEFT, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, }; enum class NotificationShape { ROUNDED, SQUARED, }; struct Notification { std::shared_ptr texture; std::shared_ptr sprite; std::string text1; std::string text2; int counter; NotificationStatus status; NotificationPosition position; NotificationShape shape; SDL_Rect rect; int y; int travelDist; }; // Objetos y punteros SDL_Renderer *renderer; // El renderizador de la ventana std::shared_ptr iconTexture; // Textura para los iconos de las notificaciones std::unique_ptr text; // Objeto para dibujar texto // Variables Color bgColor; // Color de fondo de las notificaciones int waitTime; // Tiempo que se ve la notificación std::vector notifications; // La lista de notificaciones activas bool stack; // Indica si las notificaciones se apilan bool hasIcons; // Indica si el notificador tiene textura para iconos JA_Sound_t *sound; // Sonido a reproducir cuando suena la notificación // Elimina las notificaciones finalizadas void clearFinishedNotifications(); // Finaliza y elimnina todas las notificaciones activas void clearNotifications(); public: // Constructor Notify(SDL_Renderer *renderer, std::string iconFile, std::string bitmapFile, std::string textFile, const std::string &soundFile); // Destructor ~Notify(); // Dibuja las notificaciones por pantalla void render(); // Actualiza el estado de las notificaiones void update(); // Muestra una notificación de texto por pantalla; void showText(std::string text1 = std::string(), std::string text2 = std::string(), int icon = -1); // Indica si hay notificaciones activas bool active(); };