mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-23 07:40:14 +00:00
Add 3D level-up effect using LevelUp.m2 spell model
Replace 2D screen-space ding rings with real WoW LevelUp.m2 particle/geometry effect. Fix FBlock particle color parsing (C3Vector floats, not CImVector bytes) which was producing blue/red instead of golden yellow. Spell effect models bypass particle dampeners, glow sprite conversion, Mod→Additive blend override, and all collision (floor/wall/camera) to prevent camera zoom-in. Other players' level-ups trigger the 3D effect at their position with group chat notification. F7 hotkey for testing.
This commit is contained in:
parent
1fb1daea7f
commit
da49593268
13 changed files with 321 additions and 128 deletions
|
|
@ -300,6 +300,16 @@ void Application::run() {
|
|||
LOG_INFO("Shadows: ", enabled ? "ON" : "OFF");
|
||||
}
|
||||
}
|
||||
// F7: Test level-up effect (ignore key repeat)
|
||||
else if (event.key.keysym.scancode == SDL_SCANCODE_F7 && event.key.repeat == 0) {
|
||||
if (renderer) {
|
||||
renderer->triggerLevelUpEffect(renderer->getCharacterPosition());
|
||||
LOG_INFO("Triggered test level-up effect");
|
||||
}
|
||||
if (uiManager) {
|
||||
uiManager->getGameScreen().triggerDing(99);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1329,11 +1339,38 @@ void Application::setupUICallbacks() {
|
|||
despawnOnlineGameObject(guid);
|
||||
});
|
||||
|
||||
// Level-up callback — play sound, cheer emote, and trigger UI ding overlay
|
||||
// Level-up callback — play sound, cheer emote, and trigger UI ding overlay + 3D effect
|
||||
gameHandler->setLevelUpCallback([this](uint32_t newLevel) {
|
||||
if (uiManager) {
|
||||
uiManager->getGameScreen().triggerDing(newLevel);
|
||||
}
|
||||
if (renderer) {
|
||||
renderer->triggerLevelUpEffect(renderer->getCharacterPosition());
|
||||
}
|
||||
});
|
||||
|
||||
// Other player level-up callback — trigger 3D effect + chat notification
|
||||
gameHandler->setOtherPlayerLevelUpCallback([this](uint64_t guid, uint32_t newLevel) {
|
||||
if (!gameHandler || !renderer) return;
|
||||
|
||||
// Trigger 3D effect at the other player's position
|
||||
auto entity = gameHandler->getEntityManager().getEntity(guid);
|
||||
if (entity) {
|
||||
glm::vec3 canonical(entity->getX(), entity->getY(), entity->getZ());
|
||||
glm::vec3 renderPos = core::coords::canonicalToRender(canonical);
|
||||
renderer->triggerLevelUpEffect(renderPos);
|
||||
}
|
||||
|
||||
// Show chat message if in group
|
||||
if (gameHandler->isInGroup()) {
|
||||
std::string name = gameHandler->getCachedPlayerName(guid);
|
||||
if (name.empty()) name = "A party member";
|
||||
game::MessageChatData msg;
|
||||
msg.type = game::ChatType::SYSTEM;
|
||||
msg.language = game::ChatLanguage::UNIVERSAL;
|
||||
msg.message = name + " has reached level " + std::to_string(newLevel) + "!";
|
||||
gameHandler->addLocalChatMessage(msg);
|
||||
}
|
||||
});
|
||||
|
||||
// Mount callback (online mode) - defer heavy model load to next frame
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue