mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-17 01:23:51 +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
80 lines
3.5 KiB
Markdown
80 lines
3.5 KiB
Markdown
# Contributing to Wowee
|
|
|
|
## Build Setup
|
|
|
|
See [BUILD_INSTRUCTIONS.md](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 once` for 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 feature
|
|
- `fix:` bug fix
|
|
- `refactor:` code restructuring with no behavior change
|
|
- `perf:` performance improvement
|
|
- Prefer `constexpr` over `static const` for compile-time data.
|
|
- Mark functions whose return value should not be ignored with `[[nodiscard]]`.
|
|
|
|
## Pull Request Process
|
|
|
|
1. Branch from `master`.
|
|
2. Keep commits focused -- one logical change per commit.
|
|
3. Describe *what* changed and *why* in the PR description.
|
|
4. Ensure the project compiles cleanly before submitting.
|
|
5. 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](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:
|
|
|
|
1. Define a `struct FooData` holding the parsed fields.
|
|
2. Write `void GameHandler::handleFoo(network::Packet& packet)` to parse into `FooData`.
|
|
3. 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](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 |
|