#pragma once #include // for SDL_Rect, SDL_Point #include // for shared_ptr, __shared_ptr_access #include // for string #include // for vector #include "sprite.h" // for Sprite #include "texture.h" // for Texture #include "utils.h" // for Color struct ItemData { std::string tile_set_file; // Ruta al fichero con los gráficos del item int x; // Posición del item en pantalla int y; // Posición del item en pantalla int tile; // Número de tile dentro de la textura int counter; // Contador inicial. Es el que lo hace cambiar de color Color color1; // Uno de los dos colores que se utiliza para el item Color color2; // Uno de los dos colores que se utiliza para el item // Constructor ItemData() : x(0), y(0), tile(0), counter(0), color1(), color2() {} }; class Item { private: // Constantes static constexpr int ITEM_SIZE_ = 8; // Objetos y punteros std::shared_ptr sprite_; // Sprite del objeto // Variables std::vector color_; // Vector con los colores del objeto int counter_; // Contador interno SDL_Rect collider_; // Rectangulo de colisión int change_color_speed; // Cuanto mas alto, mas tarda en cambiar de color public: // Constructor explicit Item(ItemData item); // Destructor ~Item() = default; // Pinta el objeto en pantalla void render(); // Actualiza las variables del objeto void update() { counter_++; } // Obtiene el rectangulo de colision del objeto SDL_Rect &getCollider() { return collider_; } // Obtiene su ubicación SDL_Point getPos(); // Recarga la textura void reLoadTexture() { sprite_->getTexture()->reLoad(); } // Asigna los colores del objeto void setColors(Color col1, Color col2); };