mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-05 12:43:51 +00:00
[refactor] Break Application::getInstance() from GameHandler
Introduce `GameServices` struct — an explicit dependency bundle that `Application` populates and passes to `GameHandler` at construction time. Eliminates all 47 hidden `Application::getInstance()` calls in `src/game/*.cpp`, completing SOLID-D (dependency-inversion) cleanup. Changes: - New `include/game/game_services.hpp` — `struct GameServices` carrying pointers to `Renderer`, `AssetManager`, `ExpansionRegistry`, and two taxi-mount display IDs - `GameHandler(GameServices&)` replaces default constructor; exposes `services() const` accessor for domain handlers - `Application` holds `game::GameServices gameServices_`; populates it after all subsystems are created, then constructs `GameHandler` (fixes latent init-order bug: `GameHandler` was previously created before `AssetManager` / `ExpansionRegistry`) - `game_handler.cpp`: duplicate `isActiveExpansion` / `isClassicLikeExpansion` / `isPreWotlk` anonymous-namespace helpers removed; `game_utils.hpp` included instead - All domain handlers (`InventoryHandler`, `SpellHandler`, `MovementHandler`, `CombatHandler`, `QuestHandler`, `SocialHandler`, `WardenHandler`) replace `Application::getInstance().getXxx()` with `owner_.services().xxx`
This commit is contained in:
parent
c1c28d4216
commit
a86efaaa18
12 changed files with 92 additions and 68 deletions
|
|
@ -256,7 +256,6 @@ bool Application::initialize() {
|
|||
|
||||
// Create subsystems
|
||||
authHandler = std::make_unique<auth::AuthHandler>();
|
||||
gameHandler = std::make_unique<game::GameHandler>();
|
||||
world = std::make_unique<game::World>();
|
||||
|
||||
// Create and initialize expansion registry
|
||||
|
|
@ -268,6 +267,14 @@ bool Application::initialize() {
|
|||
// Create asset manager
|
||||
assetManager = std::make_unique<pipeline::AssetManager>();
|
||||
|
||||
// Populate game services — all subsystems now available
|
||||
gameServices_.renderer = renderer.get();
|
||||
gameServices_.assetManager = assetManager.get();
|
||||
gameServices_.expansionRegistry = expansionRegistry_.get();
|
||||
|
||||
// Create game handler with explicit service dependencies
|
||||
gameHandler = std::make_unique<game::GameHandler>(gameServices_);
|
||||
|
||||
// Try to get WoW data path from environment variable
|
||||
const char* dataPathEnv = std::getenv("WOW_DATA_PATH");
|
||||
std::string dataPath = dataPathEnv ? dataPathEnv : "./Data";
|
||||
|
|
@ -5657,6 +5664,8 @@ void Application::buildCreatureDisplayLookups() {
|
|||
|
||||
gryphonDisplayId_ = resolveDisplayIdForExactPath("Creature\\Gryphon\\Gryphon.m2");
|
||||
wyvernDisplayId_ = resolveDisplayIdForExactPath("Creature\\Wyvern\\Wyvern.m2");
|
||||
gameServices_.gryphonDisplayId = gryphonDisplayId_;
|
||||
gameServices_.wyvernDisplayId = wyvernDisplayId_;
|
||||
LOG_INFO("Taxi mount displayIds: gryphon=", gryphonDisplayId_, " wyvern=", wyvernDisplayId_);
|
||||
|
||||
// CharHairGeosets.dbc: maps (race, sex, hairStyleId) → skinSectionId for hair mesh
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue