#pragma once #include // for SDL_Rect #include // for Uint16 #include // for string #include // for vector #include #include "utils.h" // for Circle #include "animated_sprite.h" #include "texture.h" // Tipos de objetos constexpr int ITEM_POINTS_1_DISK = 1; constexpr int ITEM_POINTS_2_GAVINA = 2; constexpr int ITEM_POINTS_3_PACMAR = 3; constexpr int ITEM_CLOCK = 4; constexpr int ITEM_COFFEE = 5; constexpr int ITEM_COFFEE_MACHINE = 6; constexpr int ITEM_NULL = 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 int kind_; // 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(int kind, float x, float y, SDL_Rect *play_area, std::shared_ptr texture, 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 int getClass(); // 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(); };