mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-26 00:40:15 +00:00
Implement WoW 3.3.5a DBC-driven lighting system
Add complete Blizzard-style time-of-day lighting pipeline: Spatial Volume System (Light.dbc): - Light volumes with position + inner/outer radius - Distance-based weighting with smoothstep falloff - Multi-volume blending (top 2 with normalized weights) - X,Z,Y coordinate handling + LIGHT_COORD_SCALE for ×36 quirk - Smooth zone transitions without popping Profile Selection (LightParams.dbc): - Weather variants: clear/rain/underwater - Links to 18 color + 6 float band curves per profile - Block indexing: LightParamsID × 18/6 + channel Time-of-Day Band Sampling (LightIntBand/LightFloatBand): - Half-minutes format (0-2879) with time clamping - Keyframe interpolation with midnight wrap - Wrap-safe initialization for edge cases - BGR color unpacking Multi-Volume Blending: - Weighted sum of all lighting params - Proper direction blending: normalize(sum(dir × weight)) - Blends ambient, diffuse, fog, sky, cloud density Temporal Smoothing: - Exponential blend to prevent frame snapping - Smooths ALL parameters (colors, fog, direction, sky) Game Time Support: - Accepts server-sent game time (WoW standard) - Falls back to local time if not provided - Manual override for testing Debug Features: - Volume distance/weight logging - Fog params logging - Coordinate scale verification Also: Move buff bar to top-left under player frame
This commit is contained in:
parent
3c13cf4b12
commit
69fa4c6e03
4 changed files with 819 additions and 4 deletions
|
|
@ -3010,15 +3010,14 @@ void GameScreen::renderBuffBar(game::GameHandler& gameHandler) {
|
|||
}
|
||||
if (activeCount == 0) return;
|
||||
|
||||
auto* window = core::Application::getInstance().getWindow();
|
||||
float screenW = window ? static_cast<float>(window->getWidth()) : 1280.0f;
|
||||
auto* assetMgr = core::Application::getInstance().getAssetManager();
|
||||
|
||||
// Position below the minimap (minimap is 200px + 10px margin from top-right)
|
||||
// Position below the player frame in top-left
|
||||
constexpr float ICON_SIZE = 32.0f;
|
||||
constexpr int ICONS_PER_ROW = 8;
|
||||
float barW = ICONS_PER_ROW * (ICON_SIZE + 4.0f) + 8.0f;
|
||||
ImGui::SetNextWindowPos(ImVec2(screenW - barW - 10.0f, 220.0f), ImGuiCond_Always);
|
||||
// Dock under player frame in top-left (player frame is at 10, 30 with ~110px height)
|
||||
ImGui::SetNextWindowPos(ImVec2(10.0f, 145.0f), ImGuiCond_Always);
|
||||
ImGui::SetNextWindowSize(ImVec2(barW, 0), ImGuiCond_Always);
|
||||
|
||||
ImGuiWindowFlags flags = ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue