#pragma once #include // for SDL_Rect #include // for Uint16 #include // for shared_ptr, unique_ptr #include // for string #include // for vector #include "animated_sprite.h" // for SpriteAnimated #include "utils.h" // for Circle class Texture; // Tipos de objetos enum class ItemType : int { DISK = 1, GAVINA = 2, PACMAR = 3, CLOCK = 4, COFFEE = 5, COFFEE_MACHINE = 6, NONE = 7, }; // Clase Item class Item { private: // Objetos y punteros std::unique_ptr sprite_; // Sprite con los graficos del objeto // Variables float pos_x_; // Posición X del objeto float pos_y_; // Posición Y del objeto int width_; // Ancho del objeto int height_; // Alto del objeto float vel_x_; // Velocidad en el eje X float vel_y_; // Velocidad en el eje Y float accel_x_; // Aceleración en el eje X float accel_y_; // Aceleración en el eje Y bool floor_collision_; // Indica si el objeto colisiona con el suelo ItemType type_; // Especifica el tipo de objeto que es bool enabled_; // Especifica si el objeto está habilitado Circle collider_; // Circulo de colisión del objeto SDL_Rect *play_area_; // Rectangulo con la zona de juego Uint16 time_to_live_; // Temporizador con el tiempo que el objeto está presente // Alinea el circulo de colisión con la posición del objeto void shiftColliders(); // Actualiza la posición y estados del objeto void move(); // Actualiza el contador void updateTimeToLive(); // Comprueba si el objeto sigue vivo void checkTimeToLive(); public: // Constructor Item(ItemType type, float x, float y, SDL_Rect *play_area, std::shared_ptr texture, const std::vector &animation); // Destructor ~Item() = default; // Centra el objeto en la posición X void allignTo(int x); // Pinta el objeto en la pantalla void render(); // Pone a cero todos los valores del objeto void disable(); // Actualiza al objeto a su posicion, animación y controla los contadores void update(); // Obtiene del valor de la variable float getPosX(); // Obtiene del valor de la variable float getPosY(); // Obtiene del valor de la variable int getWidth(); // Obtiene del valor de la variable int getHeight(); // Obtiene del valor de la variable ItemType getType(); // Obtiene el valor de la variable bool isEnabled(); // Obtiene el circulo de colisión Circle &getCollider(); // Informa si el objeto ha colisionado con el suelo bool isOnFloor(); };