migrades portes i plataformes a solidActor
This commit is contained in:
@@ -2,22 +2,23 @@
|
||||
|
||||
#include <utility> // Para std::move
|
||||
|
||||
#include "core/rendering/surface.hpp" // Para Surface
|
||||
#include "core/resources/resource_cache.hpp" // Para Resource
|
||||
#include "game/defaults.hpp" // Para Defaults::Game
|
||||
#include "game/gameplay/collision_map.hpp" // Para CollisionMap
|
||||
#include "game/gameplay/door_manager.hpp" // Para DoorManager
|
||||
#include "game/gameplay/door_tracker.hpp" // Para DoorTracker
|
||||
#include "game/gameplay/enemy_manager.hpp" // Para EnemyManager
|
||||
#include "game/gameplay/item_manager.hpp" // Para ItemManager
|
||||
#include "game/gameplay/item_tracker.hpp" // Para ItemTracker
|
||||
#include "game/gameplay/key_manager.hpp" // Para KeyManager
|
||||
#include "game/gameplay/key_tracker.hpp" // Para KeyTracker
|
||||
#include "game/gameplay/platform_manager.hpp" // Para PlatformManager
|
||||
#include "game/gameplay/room_format.hpp" // Para RoomFormat
|
||||
#include "game/gameplay/scoreboard.hpp" // Para Scoreboard::Data
|
||||
#include "game/gameplay/tilemap_renderer.hpp" // Para TilemapRenderer
|
||||
#include "utils/defines.hpp" // Para TILE_SIZE
|
||||
#include "core/rendering/surface.hpp" // Para Surface
|
||||
#include "core/resources/resource_cache.hpp" // Para Resource
|
||||
#include "game/defaults.hpp" // Para Defaults::Game
|
||||
#include "game/gameplay/collision_map.hpp" // Para CollisionMap
|
||||
#include "game/gameplay/door_manager.hpp" // Para DoorManager
|
||||
#include "game/gameplay/door_tracker.hpp" // Para DoorTracker
|
||||
#include "game/gameplay/enemy_manager.hpp" // Para EnemyManager
|
||||
#include "game/gameplay/item_manager.hpp" // Para ItemManager
|
||||
#include "game/gameplay/item_tracker.hpp" // Para ItemTracker
|
||||
#include "game/gameplay/key_manager.hpp" // Para KeyManager
|
||||
#include "game/gameplay/key_tracker.hpp" // Para KeyTracker
|
||||
#include "game/gameplay/platform_manager.hpp" // Para PlatformManager
|
||||
#include "game/gameplay/room_format.hpp" // Para RoomFormat
|
||||
#include "game/gameplay/scoreboard.hpp" // Para Scoreboard::Data
|
||||
#include "game/gameplay/solid_actor_manager.hpp" // Para SolidActorManager
|
||||
#include "game/gameplay/tilemap_renderer.hpp" // Para TilemapRenderer
|
||||
#include "utils/defines.hpp" // Para TILE_SIZE
|
||||
#include "utils/utils.hpp"
|
||||
|
||||
// Constructor
|
||||
@@ -25,18 +26,24 @@ Room::Room(const std::string& room_path, std::shared_ptr<Scoreboard::Data> data)
|
||||
: data_(std::move(data)) {
|
||||
auto room = Resource::Cache::get()->getRoom(room_path);
|
||||
|
||||
// Gestor de actores sólidos dinámicos (AABBs): puertas, plataformas móviles,
|
||||
// y otros actores que participan en la resolución de colisión del Player
|
||||
// sin escribir en el tilemap. Debe ir antes que DoorManager/PlatformManager
|
||||
// para poder pasarles su puntero.
|
||||
solid_actor_manager_ = std::make_unique<SolidActorManager>();
|
||||
|
||||
// Crea los managers de enemigos, items, plataformas y llaves
|
||||
enemy_manager_ = std::make_unique<EnemyManager>();
|
||||
item_manager_ = std::make_unique<ItemManager>(room->number, data_);
|
||||
platform_manager_ = std::make_unique<PlatformManager>();
|
||||
platform_manager_ = std::make_unique<PlatformManager>(solid_actor_manager_.get());
|
||||
key_manager_ = std::make_unique<KeyManager>(room->number);
|
||||
|
||||
// Crea el mapa de colisiones desde el collision_tile_map (debe ir antes
|
||||
// del DoorManager porque éste lo necesita para mutar tiles dinámicamente)
|
||||
// Crea el mapa de colisiones desde el collision_tile_map
|
||||
collision_map_ = std::make_unique<CollisionMap>(room->collision_tile_map);
|
||||
|
||||
// Crea el manager de puertas (necesita el CollisionMap para sincronizar muros)
|
||||
door_manager_ = std::make_unique<DoorManager>(room->number, collision_map_.get());
|
||||
// Crea el manager de puertas (registra los Door como SolidActor en el
|
||||
// SolidActorManager; ya no escribe tiles en el CollisionMap).
|
||||
door_manager_ = std::make_unique<DoorManager>(room->number, solid_actor_manager_.get());
|
||||
|
||||
initializeRoom(*room);
|
||||
|
||||
@@ -250,6 +257,14 @@ auto Room::getTileCollider() const -> const TileCollider& {
|
||||
return collision_map_->getTileCollider();
|
||||
}
|
||||
|
||||
auto Room::getSolidActors() const -> const SolidActorManager& {
|
||||
return *solid_actor_manager_;
|
||||
}
|
||||
|
||||
auto Room::getSolidActors() -> SolidActorManager& {
|
||||
return *solid_actor_manager_;
|
||||
}
|
||||
|
||||
auto Room::getCollisionTileMap() const -> const std::vector<int>& {
|
||||
return collision_map_->getCollisionTileMap();
|
||||
}
|
||||
@@ -258,6 +273,10 @@ void Room::updateCollisionBorders(const CollisionMap::AdjacentData& adjacent) {
|
||||
collision_map_->updateBorders(adjacent);
|
||||
}
|
||||
|
||||
void Room::updateSolidActorBorders(const SolidActorManager::AdjacentActors& adjacent) {
|
||||
solid_actor_manager_->setAdjacent(adjacent);
|
||||
}
|
||||
|
||||
// Devuelve la cadena del fichero de la habitación contigua segun el borde
|
||||
auto Room::getRoom(Border border) -> std::string { // NOLINT(readability-convert-member-functions-to-static)
|
||||
switch (border) {
|
||||
@@ -290,10 +309,6 @@ void Room::tryUnlockDoors(const SDL_FRect& player_rect) {
|
||||
door_manager_->tryUnlock(player_rect);
|
||||
}
|
||||
|
||||
auto Room::checkPlayerOnPlatform(const SDL_FRect& player_collider, float player_vy) -> MovingPlatform* {
|
||||
return platform_manager_->checkPlayerOnPlatform(player_collider, player_vy);
|
||||
}
|
||||
|
||||
// Carga una habitación desde un archivo YAML (delegado a RoomFormat)
|
||||
auto Room::loadYAML(const std::string& file_path, bool verbose) -> Data { // NOLINT(readability-convert-member-functions-to-static)
|
||||
return RoomFormat::loadYAML(file_path, verbose);
|
||||
|
||||
Reference in New Issue
Block a user