Fix buff bar updates, stair collision, and right-click aura cancel

Clear aura list on AURA_UPDATE_ALL so dismount/WMO transitions refresh
properly. Increase WMO step height thresholds to reduce stair blocking.
Change buff cancel to right-click and support dismount via buff bar.
This commit is contained in:
Kelsi 2026-02-08 00:00:12 -08:00
parent b3b1cc80c6
commit aa462fdb1f
3 changed files with 16 additions and 10 deletions

View file

@ -3789,6 +3789,9 @@ void GameHandler::handleAuraUpdate(network::Packet& packet, bool isAll) {
}
if (auraList) {
if (isAll) {
auraList->clear();
}
for (const auto& [slot, aura] : data.updates) {
// Ensure vector is large enough
while (auraList->size() <= slot) {

View file

@ -1767,7 +1767,7 @@ bool WMORenderer::checkWallCollision(const glm::vec3& from, const glm::vec3& to,
// Player collision parameters
const float PLAYER_RADIUS = 0.70f; // Wider radius for better wall collision
const float PLAYER_HEIGHT = 2.0f; // Player height for wall checks
const float MAX_STEP_HEIGHT = 0.6f; // Allow stepping up stairs (lowered to catch curbs)
const float MAX_STEP_HEIGHT = 1.0f; // Allow stepping up stairs/ramps
glm::vec3 queryMin = glm::min(from, to) - glm::vec3(8.0f, 8.0f, 5.0f);
glm::vec3 queryMax = glm::max(from, to) + glm::vec3(8.0f, 8.0f, 5.0f);
@ -1873,7 +1873,7 @@ bool WMORenderer::checkWallCollision(const glm::vec3& from, const glm::vec3& to,
if (triMaxZ <= localFeetZ + MAX_STEP_HEIGHT) continue;
// Skip very short vertical surfaces (stair risers)
if (triHeight < 0.6f && triMaxZ <= localFeetZ + 0.8f) continue;
if (triHeight < 1.0f && triMaxZ <= localFeetZ + 1.2f) continue;
// Recompute distances with current (possibly pushed) localTo
float fromDist = glm::dot(localFrom - v0, normal);

View file

@ -2882,11 +2882,10 @@ void GameScreen::renderBuffBar(game::GameHandler& gameHandler) {
iconTex = getSpellIcon(aura.spellId, assetMgr);
}
bool clicked = false;
if (iconTex) {
ImGui::PushStyleColor(ImGuiCol_Button, borderColor);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2));
clicked = ImGui::ImageButton("##aura",
ImGui::ImageButton("##aura",
(ImTextureID)(uintptr_t)iconTex,
ImVec2(ICON_SIZE - 4, ICON_SIZE - 4));
ImGui::PopStyleVar();
@ -2895,10 +2894,19 @@ void GameScreen::renderBuffBar(game::GameHandler& gameHandler) {
ImGui::PushStyleColor(ImGuiCol_Button, borderColor);
char label[8];
snprintf(label, sizeof(label), "%u", aura.spellId);
clicked = ImGui::Button(label, ImVec2(ICON_SIZE, ICON_SIZE));
ImGui::Button(label, ImVec2(ICON_SIZE, ICON_SIZE));
ImGui::PopStyleColor();
}
// Right-click to cancel buffs / dismount
if (ImGui::IsItemClicked(ImGuiMouseButton_Right) && isBuff) {
if (gameHandler.isMounted()) {
gameHandler.dismount();
} else {
gameHandler.cancelAura(aura.spellId);
}
}
// Tooltip with spell name and duration
if (ImGui::IsItemHovered()) {
std::string name;
@ -2920,11 +2928,6 @@ void GameScreen::renderBuffBar(game::GameHandler& gameHandler) {
}
}
// Click to cancel own buffs
if (clicked && isBuff) {
gameHandler.cancelAura(aura.spellId);
}
ImGui::PopID();
shown++;
}