Trigger player model visual update when online inventory changes

rebuildOnlineInventory() now sets a dirty flag that GameScreen checks
each frame to call updateCharacterGeosets/Textures and loadEquippedWeapons.
This commit is contained in:
Kelsi 2026-02-06 03:13:42 -08:00
parent ab1f39c73b
commit 82e63fc95d
3 changed files with 5 additions and 1 deletions

View file

@ -190,6 +190,7 @@ public:
// Inventory
Inventory& getInventory() { return inventory; }
const Inventory& getInventory() const { return inventory; }
bool consumeOnlineEquipmentDirty() { bool d = onlineEquipDirty_; onlineEquipDirty_ = false; return d; }
// Targeting
void setTarget(uint64_t guid);
@ -548,6 +549,7 @@ private:
std::unordered_set<uint32_t> pendingItemQueries_;
std::array<uint64_t, 23> equipSlotGuids_{};
std::array<uint64_t, 16> backpackSlotGuids_{};
bool onlineEquipDirty_ = false;
// ---- Phase 2: Combat ----
bool autoAttacking = false;

View file

@ -2936,6 +2936,8 @@ void GameHandler::rebuildOnlineInventory() {
inventory.setBackpackSlot(i, def);
}
onlineEquipDirty_ = true;
LOG_DEBUG("Rebuilt online inventory: equip=", [&](){
int c = 0; for (auto g : equipSlotGuids_) if (g) c++; return c;
}(), " backpack=", [&](){

View file

@ -104,7 +104,7 @@ void GameScreen::render(game::GameHandler& gameHandler) {
gameHandler.notifyInventoryChanged();
}
if (inventoryScreen.consumeEquipmentDirty()) {
if (inventoryScreen.consumeEquipmentDirty() || gameHandler.consumeOnlineEquipmentDirty()) {
updateCharacterGeosets(gameHandler.getInventory());
updateCharacterTextures(gameHandler.getInventory());
core::Application::getInstance().loadEquippedWeapons();