mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-23 07:40:14 +00:00
fix: animation stutter, resolution crash, memory cap, spell tooltip hints, GO collision
- Animation stutter: skip playAnimation(Run) for the local player in the server movement callback — the player renderer state machine already manages it; resetting animTime on every movement packet caused visible stutter - Resolution crash: reorder swapchain recreation so old swapchain is only destroyed after confirming the new build succeeded; add null-swapchain guard in beginFrame to survive the retry window - Memory cap: reduce cache budget from 80% uncapped to 50% hard-capped at 16 GB to prevent excessive RAM use on high-memory systems - Spell tooltip: suppress "Drag to action bar / Double-click to cast" hints when the tooltip is shown from the action bar (showUsageHints=false) - M2 collision: add watermelon/melon/squash/gourd to foliage (no-collision); exclude chair/bench/stool/seat/throne from smallSolidProp so invisible chair bounding boxes no longer trap the player
This commit is contained in:
parent
8f2974b17c
commit
19eb7a1fb7
7 changed files with 60 additions and 30 deletions
|
|
@ -2553,13 +2553,19 @@ void Application::setupUICallbacks() {
|
|||
// Don't override Death animation (1). The per-frame sync loop will return to
|
||||
// Stand when movement stops.
|
||||
if (durationMs > 0) {
|
||||
uint32_t curAnimId = 0; float curT = 0.0f, curDur = 0.0f;
|
||||
auto* cr = renderer->getCharacterRenderer();
|
||||
bool gotState = cr->getAnimationState(instanceId, curAnimId, curT, curDur);
|
||||
if (!gotState || curAnimId != 1 /*Death*/) {
|
||||
cr->playAnimation(instanceId, 5u, /*loop=*/true);
|
||||
// Player animation is managed by the local renderer state machine —
|
||||
// don't reset it here or every server movement packet restarts the
|
||||
// run cycle from frame 0, causing visible stutter.
|
||||
if (!isPlayer) {
|
||||
uint32_t curAnimId = 0; float curT = 0.0f, curDur = 0.0f;
|
||||
auto* cr = renderer->getCharacterRenderer();
|
||||
bool gotState = cr->getAnimationState(instanceId, curAnimId, curT, curDur);
|
||||
// Only start Run if not already running and not in Death animation.
|
||||
if (!gotState || (curAnimId != 1 /*Death*/ && curAnimId != 5u /*Run*/)) {
|
||||
cr->playAnimation(instanceId, 5u, /*loop=*/true);
|
||||
}
|
||||
creatureWasMoving_[guid] = true;
|
||||
}
|
||||
if (!isPlayer) creatureWasMoving_[guid] = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -8701,17 +8707,21 @@ void Application::updateQuestMarkers() {
|
|||
int markerType = -1; // -1 = no marker
|
||||
|
||||
using game::QuestGiverStatus;
|
||||
float markerGrayscale = 0.0f; // 0 = colour, 1 = grey (trivial quests)
|
||||
switch (status) {
|
||||
case QuestGiverStatus::AVAILABLE:
|
||||
markerType = 0; // Yellow !
|
||||
break;
|
||||
case QuestGiverStatus::AVAILABLE_LOW:
|
||||
markerType = 0; // Available (yellow !)
|
||||
markerType = 0; // Grey ! (same texture, desaturated in shader)
|
||||
markerGrayscale = 1.0f;
|
||||
break;
|
||||
case QuestGiverStatus::REWARD:
|
||||
case QuestGiverStatus::REWARD_REP:
|
||||
markerType = 1; // Turn-in (yellow ?)
|
||||
markerType = 1; // Yellow ?
|
||||
break;
|
||||
case QuestGiverStatus::INCOMPLETE:
|
||||
markerType = 2; // Incomplete (grey ?)
|
||||
markerType = 2; // Grey ?
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -8745,7 +8755,7 @@ void Application::updateQuestMarkers() {
|
|||
}
|
||||
|
||||
// Set the marker (renderer will handle positioning, bob, glow, etc.)
|
||||
questMarkerRenderer->setMarker(guid, renderPos, markerType, boundingHeight);
|
||||
questMarkerRenderer->setMarker(guid, renderPos, markerType, boundingHeight, markerGrayscale);
|
||||
markersAdded++;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue