Decompile fn_12230 (UIMenuWnd::Paint)
Batch #1931 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_12230 UIMenuWnd::Paint: logic confirmed by peer review Reviewed-by: ragnarok-clanker
This commit is contained in:
parent
4b1cf4c358
commit
c51d216ac6
4 changed files with 107 additions and 1 deletions
|
|
@ -149,7 +149,9 @@ public:
|
|||
/* 52B0 */ const char* const* m_weaponNamesEnd;
|
||||
/* 52B4 */ unsigned char unknown_52B4[0x04];
|
||||
/* 52B8 */ std::vector<const char*> m_accessoryNames;
|
||||
/* 52C4 */ unsigned char unknown_52C4[0x294];
|
||||
/* 52C4 */ unsigned char unknown_52C4[0x278];
|
||||
/* 553C */ std::string m_serverName;
|
||||
/* 5554 */ unsigned char unknown_5554[4];
|
||||
/* 5558 */ int unknown_5558;
|
||||
/* 555C */ unsigned char unknown_555C[0xC];
|
||||
/* 5568 */ int unknown_5568;
|
||||
|
|
|
|||
|
|
@ -66,6 +66,12 @@ namespace {
|
|||
constexpr char prefix[] = "유저인터페이스\\";
|
||||
}
|
||||
|
||||
// STRING: st_16833
|
||||
static const char menuSeparatorText[] = "-";
|
||||
|
||||
// GLOBAL: gl_24749
|
||||
const char* g_menuSeparator = menuSeparatorText;
|
||||
|
||||
// OFFSET: 0x008C73C0
|
||||
// FUNCTION: fn_11930
|
||||
UIChooseSellBuyWnd::UIChooseSellBuyWnd(UIWindowContext& windows, UIFrameContext& frames, UIAcceptanceContext& acceptance)
|
||||
|
|
@ -213,6 +219,47 @@ void UIItemParamChangeDisplayWnd::Paint() {
|
|||
void UILoadingWnd::Paint() {
|
||||
}
|
||||
|
||||
// OFFSET: 0x008EED00
|
||||
// FUNCTION: fn_12230
|
||||
void UIMenuWnd::Paint() {
|
||||
auto& controls = *this->m_controls;
|
||||
unsigned red, green, blue;
|
||||
SkinPaletteChannels(ResourceMgr::Instance(), 6, 6, red, green, blue);
|
||||
this->ClearSurface(RGB(red, green, blue));
|
||||
unsigned fillRed, fillGreen, fillBlue;
|
||||
SkinPaletteChannels(ResourceMgr::Instance(), 2, 2, fillRed, fillGreen, fillBlue);
|
||||
this->FillRegion(1, 1, this->geometry.width - 2, this->geometry.height - 2, RGB(fillRed, fillGreen, fillBlue));
|
||||
|
||||
const auto* leftUp = static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\sysboxs_lu.bmp")));
|
||||
this->DrawBitmap(0, 0, &leftUp->image, false);
|
||||
const auto* leftDown = static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\sysboxs_ld.bmp")));
|
||||
this->DrawBitmap(0, this->geometry.height - leftDown->image.height, &leftDown->image, false);
|
||||
const auto* rightUp = static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\sysboxs_ru.bmp")));
|
||||
this->DrawBitmap(this->geometry.width - rightUp->image.width, 0, &rightUp->image, false);
|
||||
const auto* rightDown = static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\sysboxs_rd.bmp")));
|
||||
this->DrawBitmap(this->geometry.width - rightDown->image.width, this->geometry.height - rightDown->image.height, &rightDown->image, false);
|
||||
|
||||
SkinPaletteChannels(ResourceMgr::Instance(), 6, 2, red, green, blue);
|
||||
const int count = static_cast<int>(this->m_items.size());
|
||||
for (int index = 0; index < count; ++index) {
|
||||
const std::string& item = this->m_items[index];
|
||||
const bool separator = item == g_menuSeparator;
|
||||
const bool afterSeparator = index != 0 && this->m_items[index - 1] == item;
|
||||
if (separator) {
|
||||
unsigned lineRed, lineGreen, lineBlue;
|
||||
SkinPaletteChannels(ResourceMgr::Instance(), 14, 6, lineRed, lineGreen, lineBlue);
|
||||
this->FillRegion(0, this->m_itemHeight * index / 2 + 2, this->geometry.width, 1, RGB(lineRed, lineGreen, lineBlue));
|
||||
continue;
|
||||
}
|
||||
|
||||
const int row = afterSeparator ? index - 1 : index;
|
||||
if (index == this->m_selected) {
|
||||
this->FillRegion(3, this->m_itemHeight / 2 * row + 1, this->geometry.width - 6, this->m_itemHeight - 2, RGB(red, green, blue));
|
||||
}
|
||||
this->DrawTextAt(controls.fonts, controls.locale, 3, this->m_itemHeight * row / 2 + 1, item.c_str(), 0, 0, 12, this->m_colors[index], 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x008EF0A0
|
||||
// FUNCTION: fn_12231
|
||||
void UIMinimapZoomWnd::Paint() {
|
||||
|
|
@ -285,6 +332,46 @@ void UIPasswordWnd::Paint() {
|
|||
this->DrawBorder(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
// OFFSET: 0x008EFCF0
|
||||
// FUNCTION: fn_12244
|
||||
void UIProhibitListWnd::Paint() {
|
||||
auto& controls = *this->m_controls;
|
||||
char text[256];
|
||||
|
||||
const int titleHeight = this->DrawTitleBar(controls.fonts, controls.locale, true, controls.services.MessageText(714), 0);
|
||||
this->DrawPanelBackground(titleHeight, 0, "");
|
||||
const auto* left = static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\sysboxs_ld.bmp")));
|
||||
this->DrawBitmap(0, this->geometry.height - left->image.height, &left->image, false);
|
||||
const auto* right = static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\sysboxs_rd.bmp")));
|
||||
this->DrawBitmap(this->geometry.width - right->image.width, this->geometry.height - right->image.height, &right->image, false);
|
||||
|
||||
int y = 0;
|
||||
const int count = static_cast<int>(g_session.m_prohibitionLog.size());
|
||||
for (int index = 0; index < count; ++index) {
|
||||
const ProhibitionLogEntry& entry = g_session.m_prohibitionLog[index];
|
||||
if (std::strcmp(entry.ownerName, g_session.m_serverName.c_str()) != 0 || entry.aid != this->m_aid) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (y == 0) {
|
||||
std::sprintf(text, "AID : %d CharacterName : %s", entry.aid, entry.name);
|
||||
this->DrawTextAt(controls.fonts, controls.locale, 10, 25, text, 0, 0, 12, 0, 0, 0);
|
||||
std::sprintf(text, "ServerName : %s", g_session.m_prohibitionLog[index].ownerName);
|
||||
this->DrawTextAt(controls.fonts, controls.locale, 10, 41, text, 0, 0, 12, 0, 0, 0);
|
||||
}
|
||||
|
||||
const ProhibitionLogEntry& record = g_session.m_prohibitionLog[index];
|
||||
const int date = static_cast<int>(record.date);
|
||||
const int time = static_cast<int>(record.time);
|
||||
std::sprintf(
|
||||
text, "ProhibitTime : %d분 LogTime : %d년 %d월 %d일 %d시 %d분 %d초", record.minutes, date >> 16 & 0xFFFF, date >> 8 & 0xFF, date & 0xFF, time >> 16 & 0xFF,
|
||||
time >> 8 & 0xFF, time & 0xFF
|
||||
);
|
||||
this->DrawTextAt(controls.fonts, controls.locale, 10, y + 65, text, 0, 0, 12, 0, 0, 0);
|
||||
y += 18;
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x008EFF60
|
||||
// FUNCTION: fn_12245
|
||||
void UIQuitWnd::Paint() {
|
||||
|
|
|
|||
|
|
@ -3,20 +3,30 @@
|
|||
|
||||
#include "UI/Window/UIFrameWnd.h"
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
struct UIButtonContext;
|
||||
class UIMenuWnd : public UIFrameWnd {
|
||||
public:
|
||||
/* 00B4 */ int m_menuId;
|
||||
/* 00B8 */ int m_selected;
|
||||
/* 00BC */ int m_itemHeight;
|
||||
/* 00C0 */ std::vector<std::string> m_items;
|
||||
/* 00CC */ std::uint32_t unknown_00CC;
|
||||
/* 00D0 */ std::uint32_t* m_colors;
|
||||
|
||||
void Paint() override;
|
||||
void Slot27(int x, int y) override;
|
||||
void Slot28(int x, int y) override;
|
||||
|
||||
int ItemAt(int x, int y);
|
||||
|
||||
protected:
|
||||
UIButtonContext* m_controls;
|
||||
};
|
||||
|
||||
extern const char* g_menuSeparator;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3,11 +3,18 @@
|
|||
|
||||
#include "UI/Window/UIFrameWnd.h"
|
||||
|
||||
struct UIButtonContext;
|
||||
|
||||
class UIProhibitListWnd : public UIFrameWnd {
|
||||
public:
|
||||
/* 00B4 */ int m_count;
|
||||
/* 00B8 */ std::uint32_t m_aid;
|
||||
|
||||
void Paint() override;
|
||||
void Slot19() override;
|
||||
|
||||
protected:
|
||||
UIButtonContext* m_controls;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue