NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
d_lyttextbox.cpp
1#include <cstdarg>
2#include <game/bases/d_lyttextBox.hpp>
3#include <game/bases/d_font_manager.hpp>
4#include <game/bases/d_info.hpp>
5#include <game/bases/d_lytbase.hpp>
6
7void LytTextBox_c::setMessage(MsgRes_c *bmg, ulong messageID, ulong messageGroup, long placeholderCount, ...) {
8 dInfo_c *info = dInfo_c::getInstance();
9 info->mTextBoxMessageID = messageID;
10 info->mTextBoxMessageGroup = messageGroup;
11
12 va_list args;
13 va_start(args, placeholderCount);
14 setMessage(bmg, messageID, messageGroup, placeholderCount, &args);
15 va_end(args);
16}
17
19 dInfo_c *info = dInfo_c::getInstance();
20 const nw4r::lyt::res::ExtUserData *userData = FindExtUserDataByName("shadow");
21 if (userData != nullptr && *(int *) (((u8 *) userData) + userData->datOffs) != 0) {
22 info->m_3da = true;
23 }
24}
25
26void LytTextBox_c::setMessage(MsgRes_c *bmg, ulong messageID, ulong messageGroup, long placeholderCount, va_list *vargs) {
27 nw4r::lyt::Size fontSize = GetFontSize();
28
29 u8 fontIndex = bmg->getFont(messageID, messageGroup);
30 SetFont(dFontMng_c::getFont(fontIndex));
31 LytBase_c::s_TagPrc.mFontIndex = fontIndex;
32
33 dInfo_c *info = dInfo_c::getInstance();
34 info->m_3da = false;
35
36 u16 extUserDataNum = GetExtUserDataNum();
37 if (extUserDataNum != 0) {
39 }
40 info->mTextBoxMessageID = messageID;
41 info->mTextBoxMessageGroup = messageGroup;
42 setText(bmg->getMsg(messageID, messageGroup), placeholderCount, vargs, bmg);
43
44 float charWScale = bmg->getScale(messageID, messageGroup) * 0.01f;
45 fontSize.width = GetFont()->GetWidth() * charWScale;
46 SetFontSize(fontSize);
47
48 nw4r::lyt::Size size = GetSize();
49 nw4r::lyt::Size newSize = size;
50 newSize.width = 1024.0f;
51 SetSize(newSize);
52
53 nw4r::ut::WideTextWriter textWriter;
54
55 float prevSpaceSize = GetCharSpace();
56 nw4r::ut::Rect rectWithSpace = GetTextDrawRect(&textWriter);
57 SetCharSpace(0.0f);
59 nw4r::ut::Rect rectNoSpace = GetTextDrawRect(&textWriter);
61 SetCharSpace(prevSpaceSize);
62 SetSize(size);
63
64 float widthNoSpace = rectNoSpace.GetWidth();
65 float widthWithSpace = rectWithSpace.GetWidth();
66 float widthDiff = widthWithSpace - widthNoSpace;
67 if (size.width < widthWithSpace && widthNoSpace > 0.0f) {
68 float prevScale = charWScale;
69 charWScale *= (((size.width - widthDiff) - 4.0f) / widthNoSpace);
70 if (charWScale < prevScale) {
71 fontSize.width = GetFont()->GetWidth() * charWScale;
72 SetFontSize(fontSize);
73 }
74 }
75}
76
77void LytTextBox_c::setText(const wchar_t *text, long placeholderCount, ...) {
78 va_list args;
79 va_start(args, placeholderCount);
80 setText(text, placeholderCount, &args, nullptr);
81 va_end(args);
82}
83
84void LytTextBox_c::setText(const wchar_t *text, long placeholderCount, va_list *vargs, MsgRes_c *bmg) {
85 static wchar_t Buffer[0x200];
86 int count = 0;
87 LytBase_c::s_TagPrc.preProcess(text, Buffer, ARRAY_SIZE(Buffer), &count, placeholderCount, vargs, bmg);
88 SetString(Buffer, 0, count);
89}
void setMessage(MsgRes_c *bmg, ulong messageGroup, ulong messageID, long placeholderCount,...)
Sets the message to display in the text box.
void ExtensionUserDataSetup()
Checks for extension user data in the layout.
void setText(const wchar_t *text, long placeholderCount,...)
Sets the text to display in the text box.
static bool isZeroWidthSpace