rodecomp/Source/UI/Shortcuts/NormalItemSlotLoad.cpp
ragnarok-clanker 33611655e5 Maintenance: [forced, user-approved] Family G17 (coordinator round-5 fixes). (1) ShortcutVisibility.h only held inline UIWindowMgr::S
Batch #10224 by ragnarok-clanker: forced by an admin (0 lower score(s), 2 changed function(s)); checked with 22 compiled unit(s), including every includer of Source/UI/Window/UIWindowMgr.inl, Source/UI/Shortcuts/ShortcutVisibility.h.
Deletes: Source/UI/Shortcuts/ShortcutVisibility.h
2026-11-03 09:09:57 +00:00

69 lines
1.8 KiB
C++

#include "UI/Shortcuts/NormalItemSlotLoad.h"
#include "UI/Window/UIWindowMgr.inl"
#include "UI/Window/UIWindow.h"
#include "UI/Window/WindowManagerWindows.h"
#include <cstring>
#include <json/value.h>
// OFFSET: 0x005E65E0
// FUNCTION: fn_03929
void LoadNormalItemSlots(
Json::Value& data, NormalItemSlot* slots, NormalItemSlotWindow& saved, bool& itemSlotActive, WindowManagerWindows& windows
) {
Json::Value& values = data["NormalItemSlot"];
if (values.isNull()) {
return;
}
std::memset(slots, 0, 9 * sizeof(NormalItemSlot));
for (auto entry = values.begin(); entry != values.end(); ++entry) {
Json::Value& value = *entry;
if (!value.isObject()) {
continue;
}
const int item = value.get("ItemID", 0).asInt();
const int index = value.get("SlotNum", 0).asInt();
slots[index].itemId = static_cast<std::uint32_t>(item);
}
Json::Value& info = data["SlotInfo"];
if (info.empty()) {
saved.Reset();
} else {
const int x = info.get("SlotX", 0).asInt();
const int y = info.get("SlotY", 0).asInt();
const int width = info.get("SlotWidth", 0).asInt();
const int height = info.get("SlotHeight", 0).asInt();
const int show = info.get("SlotShow", 1).asInt();
saved.x = x;
saved.y = y;
saved.width = width;
saved.height = height;
saved.show = show;
}
Json::Value& active = data["ItemSlotActive"];
itemSlotActive = active.isNull() ? true : active.asBool();
UIWindow* window = windows.LookupWindow(36);
if (!window) {
return;
}
window->geometry.x = saved.x;
window->geometry.y = saved.y;
window->geometry.width = saved.width;
window->geometry.height = saved.height;
g_windowMgr.ShowShortcutWindow(saved.show);
window->SendMsg(nullptr, 34, reinterpret_cast<std::intptr_t>(&saved), 0, 0, 0);
window->SendMsg(nullptr, 6, itemSlotActive ? 588 : 589, 0, 0, 0);
}