mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-16 09:13:50 +00:00
- architecture.md: add chat system modules (src/ui/chat/), world map modules (src/rendering/world_map/), CatmullRomSpline (src/math/), transport decomposition, and updated namespace list - status.md: update timestamp to 2026-04-14, add recent refactors section and world map known gaps - CHANGELOG.md: add detailed entries for PRs #58-63 covering architecture, features, bug fixes, and 19 new test files - TESTING.md: expand test suite layout from 8 to 27 files organized by category (core, animation, transport, world map, chat) - CONTRIBUTING.md: update namespace table, testing section, and key files list to reflect new module directories - README.md: update status timestamp to 2026-04-14
3.5 KiB
3.5 KiB
Contributing to Wowee
Build Setup
See BUILD_INSTRUCTIONS.md for full platform-specific details. The short version: CMake + Make on Linux/macOS, MSYS2 on Windows.
cmake -B build -DCMAKE_BUILD_TYPE=Debug
make -C build -j$(nproc)
Code Style
- C++20. Use
#pragma oncefor include guards. - Namespaces:
wowee::game,wowee::rendering,wowee::rendering::world_map,wowee::ui,wowee::ui::chat,wowee::math,wowee::core,wowee::network. - Conventional commit messages in imperative mood:
feat:new featurefix:bug fixrefactor:code restructuring with no behavior changeperf:performance improvement
- Prefer
constexproverstatic constfor compile-time data. - Mark functions whose return value should not be ignored with
[[nodiscard]].
Pull Request Process
- Branch from
master. - Keep commits focused -- one logical change per commit.
- Describe what changed and why in the PR description.
- Ensure the project compiles cleanly before submitting.
- Manual testing against a WoW 3.3.5a server (e.g. AzerothCore/ChromieCraft) is expected for gameplay-affecting changes.
Architecture Overview
See docs/architecture.md for the full picture. Key namespaces:
| Namespace | Responsibility |
|---|---|
wowee::game |
Game state, packet handling (GameHandler), opcode dispatch, spline parsing |
wowee::rendering |
Vulkan renderer, M2/WMO/terrain, sky system |
wowee::rendering::world_map |
Modular world map (16 components: facade, compositor, layers, etc.) |
wowee::ui |
ImGui windows and HUD (GameScreen) |
wowee::ui::chat |
Modular chat system (15+ components: commands, markup, macros, etc.) |
wowee::math |
Reusable math modules (CatmullRomSpline) |
wowee::core |
Coordinates, math, utilities |
wowee::network |
Connection, Packet read/write API |
Packet Handlers
The standard pattern for adding a new server packet handler:
- Define a
struct FooDataholding the parsed fields. - Write
void GameHandler::handleFoo(network::Packet& packet)to parse intoFooData. - Register it in the dispatch table:
registerHandler(LogicalOpcode::SMSG_FOO, &GameHandler::handleFoo).
Helper variants: registerWorldHandler (requires isInWorld()), registerSkipHandler (discard),
registerErrorHandler (log warning).
Testing
27 unit tests cover core systems, animation, transport/spline, world map, and chat.
See TESTING.md for the full guide. Run with ./test.sh --test.
Manual testing against WoW 3.3.5a private servers (primarily ChromieCraft/AzerothCore)
is expected for gameplay-affecting changes.
Key Files for New Contributors
| File / Directory | What it does |
|---|---|
include/game/game_handler.hpp |
Central game state and all packet handler declarations |
src/game/game_handler.cpp |
Packet dispatch registration and handler implementations |
include/network/packet.hpp |
Packet class -- the read/write API every handler uses |
include/ui/game_screen.hpp |
Main gameplay UI screen (ImGui) |
src/ui/chat/ |
Modular chat system (commands, markup, macros, tab completion) |
src/rendering/world_map/ |
Modular world map (facade, compositor, layers, coordinate projection) |
src/math/spline.cpp |
Reusable CatmullRomSpline math |
src/game/spline_packet.cpp |
Unified spline packet parsing for all expansions |
src/rendering/m2_renderer.cpp |
M2 model loading and rendering |
docs/architecture.md |
High-level system architecture reference |