## Problema Durante la refactorización de Room (Fases 1-3), se introdujeron includes relativos con ".." en 4 archivos, violando el estándar del proyecto que requiere includes absolutos desde la raíz source/. ## Cambios Realizados ### collision_map.hpp (1 corrección) - "../../utils/utils.hpp" → "utils/utils.hpp" ### collision_map.cpp (2 correcciones) - "../../core/system/debug.hpp" → "core/system/debug.hpp" - "../../utils/defines.hpp" → "utils/defines.hpp" ### enemy_manager.cpp (2 correcciones) - "../../utils/utils.hpp" → "utils/utils.hpp" - "../entities/enemy.hpp" → "game/entities/enemy.hpp" ### item_manager.cpp (4 correcciones) - "../../core/audio/audio.hpp" → "core/audio/audio.hpp" - "../../utils/utils.hpp" → "utils/utils.hpp" - "../entities/item.hpp" → "game/entities/item.hpp" - "../options.hpp" → "game/options.hpp" ## Validación ✓ Compilación exitosa ✓ 325 assets cargados correctamente ✓ Room files verificados ✓ Funcionamiento del juego confirmado ## Total 9 includes corregidos en 4 archivos, cumpliendo con el estándar de includes absolutos del proyecto definido en CLAUDE.md. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
70 lines
1.9 KiB
C++
70 lines
1.9 KiB
C++
#include "item_manager.hpp"
|
|
|
|
#include "core/audio/audio.hpp" // Para Audio
|
|
#include "utils/utils.hpp" // Para checkCollision
|
|
#include "game/entities/item.hpp" // Para Item
|
|
#include "item_tracker.hpp" // Para ItemTracker
|
|
#include "scoreboard.hpp" // Para Scoreboard::Data
|
|
#include "game/options.hpp" // Para Options
|
|
|
|
// Constructor
|
|
ItemManager::ItemManager(std::string room_name, std::shared_ptr<Scoreboard::Data> scoreboard_data)
|
|
: room_name_(std::move(room_name))
|
|
, data_(std::move(scoreboard_data)) {
|
|
}
|
|
|
|
// Añade un item a la colección
|
|
void ItemManager::addItem(std::shared_ptr<Item> item) {
|
|
items_.push_back(std::move(item));
|
|
}
|
|
|
|
// Elimina todos los items
|
|
void ItemManager::clear() {
|
|
items_.clear();
|
|
}
|
|
|
|
// Actualiza todos los items
|
|
void ItemManager::update(float delta_time) {
|
|
for (const auto& item : items_) {
|
|
item->update(delta_time);
|
|
}
|
|
}
|
|
|
|
// Renderiza todos los items
|
|
void ItemManager::render() {
|
|
for (const auto& item : items_) {
|
|
item->render();
|
|
}
|
|
}
|
|
|
|
// Pausa/despausa todos los items
|
|
void ItemManager::setPaused(bool paused) {
|
|
for (const auto& item : items_) {
|
|
item->setPaused(paused);
|
|
}
|
|
}
|
|
|
|
// Comprueba si hay colisión con algún item
|
|
auto ItemManager::checkCollision(SDL_FRect& rect) -> bool {
|
|
for (int i = 0; i < static_cast<int>(items_.size()); ++i) {
|
|
if (::checkCollision(rect, items_.at(i)->getCollider())) {
|
|
// Registra el item como recogido
|
|
ItemTracker::get()->addItem(room_name_, items_.at(i)->getPos());
|
|
|
|
// Elimina el item de la colección
|
|
items_.erase(items_.begin() + i);
|
|
|
|
// Reproduce el sonido de pickup
|
|
Audio::get()->playSound("item.wav", Audio::Group::GAME);
|
|
|
|
// Actualiza el scoreboard y estadísticas
|
|
data_->items++;
|
|
Options::stats.items = data_->items;
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|