diff options
| author | robojumper <robojumper@gmail.com> | 2025-04-05 00:11:00 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-04-07 22:12:39 +0200 |
| commit | f2bcb0da52cd6c3e0ed18315c155d57ec71d805f (patch) | |
| tree | a2f35c2e5a0b30c03db6db165f2a51f565d1963d /src | |
| parent | af4a1cfdb0842ee4ac440b3c98308b0d68da6897 (diff) | |
More demo
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/lyt/msg_window/d_lyt_msg_window.cpp | 11 | ||||
| -rw-r--r-- | src/d/lyt/msg_window/d_lyt_msg_window_demo.cpp | 184 |
2 files changed, 190 insertions, 5 deletions
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window.cpp b/src/d/lyt/msg_window/d_lyt_msg_window.cpp index 0f15501f..51e11365 100644 --- a/src/d/lyt/msg_window/d_lyt_msg_window.cpp +++ b/src/d/lyt/msg_window/d_lyt_msg_window.cpp @@ -14,14 +14,13 @@ // clang-format off // vtable order #include "d/lyt/msg_window/d_lyt_msg_window_common.h" -#include "d/lyt/msg_window/d_lyt_msg_window_demo.h" -#include "d/lyt/msg_window/d_lyt_msg_window_get.h" #include "d/lyt/msg_window/d_lyt_msg_window_link.h" -#include "d/lyt/msg_window/d_lyt_msg_window_sword.h" #include "d/lyt/msg_window/d_lyt_msg_window_talk.h" - +#include "d/lyt/msg_window/d_lyt_msg_window_sword.h" #include "d/lyt/msg_window/d_lyt_msg_window_wood.h" #include "d/lyt/msg_window/d_lyt_msg_window_stone.h" +#include "d/lyt/msg_window/d_lyt_msg_window_get.h" +#include "d/lyt/msg_window/d_lyt_msg_window_demo.h" #include "d/lyt/d_lyt_auto_explain.h" #include "d/lyt/d_lyt_auto_caption.h" // clang-format on @@ -217,7 +216,7 @@ void dLytMsgWindow_c::executeState_Invisible() { } else if (mpTagProcessor->getMsgWindowSubtype() >= 2 && mpTagProcessor->getMsgWindowSubtype() < 5) { mpCurrentSubtype = mpWindowSword; - // TODO + field_0x828 = mpWindowSword->getCharData(); } else if (mpTagProcessor->getMsgWindowSubtype() == 9) { mpCurrentSubtype = mpWindowLink; // TODO @@ -226,10 +225,12 @@ void dLytMsgWindow_c::executeState_Invisible() { // TODO } else if (mpTagProcessor->getMsgWindowSubtype() == 30) { mpCurrentSubtype = mpWindowDemo; + field_0x828 = mpWindowDemo->getCharData(); dTextBox_c *box = mpCurrentSubtype->getTextBox(); mpMsgWindowUnk->fn_800B2130(mNameCopy, box, field_0x828, true); mpMsgWindowUnk->textAdvancingRelated(true, true); setTextToDisplay(mpMsgWindowUnk->getProcessedText()); + mpCurrentSubtype->setPriority(0x8A); mStateMgr.changeState(StateID_DemoIn); return; } else { diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_demo.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_demo.cpp new file mode 100644 index 00000000..2e15b7ce --- /dev/null +++ b/src/d/lyt/msg_window/d_lyt_msg_window_demo.cpp @@ -0,0 +1,184 @@ +#include "d/lyt/msg_window/d_lyt_msg_window_demo.h" + +#include "common.h" +#include "d/d_tag_processor.h" +#include "d/lyt/d2d.h" +#include "d/lyt/d_textbox.h" +#include "d/lyt/msg_window/d_lyt_msg_window.h" +#include "d/lyt/msg_window/d_lyt_msg_window_common.h" +#include "nw4r/lyt/lyt_pane.h" +#include "nw4r/lyt/lyt_types.h" +#include "s/s_State.hpp" +#include "toBeSorted/arc_managers/layout_arc_manager.h" + +STATE_DEFINE(dLytMsgWindowDemo_c, Invisible); +STATE_DEFINE(dLytMsgWindowDemo_c, In); +STATE_DEFINE(dLytMsgWindowDemo_c, Visible); +STATE_DEFINE(dLytMsgWindowDemo_c, Out); + +static const d2d::LytBrlanMapping brlanMap[] = { + { "demoWait_00_in.brlan", "G_inOut_00"}, + {"demoWait_00_out.brlan", "G_inOut_00"}, +}; + +#define DEMO_ANIM_IN 0 +#define DEMO_ANIM_OUT 1 + +#define DEMO_NUM_ANIMS 2 + +static const char *sTextBoxes[] = { + "T_message_00", + "T_messageS_00", +}; + +bool dLytMsgWindowDemo_c::build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor) { + mResAcc.attach(LayoutArcManager::GetInstance()->getLoadedData("DemoWait"), ""); + mLyt.setResAcc(&mResAcc); + mLyt.build("demoWait_00.brlyt", nullptr); + mLyt.setPriority(0x8A); + + for (int i = 0; i < DEMO_NUM_ANIMS; i++) { + mAnm[i].init(brlanMap[i].mFile, &mResAcc, mLyt.getLayout(), brlanMap[i].mName); + mAnm[i].bind(false); + mAnm[i].setAnimEnable(false); + } + + mAnm[DEMO_ANIM_OUT].setAnimEnable(true); + mAnm[DEMO_ANIM_OUT].setToEnd(); + mLyt.calc(); + mAnm[DEMO_ANIM_OUT].setAnimEnable(false); + + mpPane = mLyt.findPane("N_inOut_00"); + + for (int i = 0; i < 2; i++) { + mpTextboxes[i] = mLyt.getTextBox(sTextBoxes[i]); + } + + mpTextboxes[1]->set0x1F6(1); + + mpTagProcessor = tagProcessor; + + mOffsets[0].x = mOffsets[0].y = 0.0f; + mOffsets[1].x = mOffsets[1].y = 0.0f; + + mText.build(&mResAcc, dLytTextLight::DEMO); + mBlurRelated.build(); + + mStateMgr.changeState(StateID_Invisible); + return true; +} + +bool dLytMsgWindowDemo_c::remove() { + mText.remove(); + for (int i = 0; i < DEMO_NUM_ANIMS; i++) { + mAnm[i].remove(); + } + mResAcc.detach(); + return true; +} + +void dLytMsgWindowDemo_c::initializeState_Invisible() { + nw4r::lyt::Size size = getTextBox()->GetSize(); + nw4r::lyt::Size fontSize = getTextBox()->GetFontSize(); + nw4r::math::MTX34 transform = getTextBox()->GetGlobalMtx(); + + mOffsets[0].x = transform._03 - size.width / 2.0f; + mOffsets[0].y = (transform._13 - size.height / 2.0f) + fontSize.height + fontSize.height * 0.5f; + mOffsets[1].x = mOffsets[0].x; + mOffsets[1].y = + (transform._13 - size.height / 2.0f) + fontSize.height + getTextBox()->GetLineSpace() + fontSize.height; +} +void dLytMsgWindowDemo_c::executeState_Invisible() { + if (mShouldBeOpen) { + mStateMgr.changeState(StateID_In); + } +} +void dLytMsgWindowDemo_c::finalizeState_Invisible() {} + +void dLytMsgWindowDemo_c::initializeState_In() { + mAnm[DEMO_ANIM_IN].setForwardOnce(); + mAnm[DEMO_ANIM_IN].setAnimEnable(true); + mAnm[DEMO_ANIM_IN].setToStart(); +} +void dLytMsgWindowDemo_c::executeState_In() { + if (mAnm[DEMO_ANIM_IN].isStop2()) { + mAnm[DEMO_ANIM_IN].setAnimEnable(false); + mStateMgr.changeState(StateID_Visible); + } +} +void dLytMsgWindowDemo_c::finalizeState_In() {} + +void dLytMsgWindowDemo_c::initializeState_Visible() {} +void dLytMsgWindowDemo_c::executeState_Visible() { + if (!mShouldBeOpen) { + mStateMgr.changeState(StateID_Out); + } +} +void dLytMsgWindowDemo_c::finalizeState_Visible() {} + +void dLytMsgWindowDemo_c::initializeState_Out() { + mAnm[DEMO_ANIM_OUT].setForwardOnce(); + mAnm[DEMO_ANIM_OUT].setAnimEnable(true); + mAnm[DEMO_ANIM_OUT].setToStart(); +} +void dLytMsgWindowDemo_c::executeState_Out() { + if (mAnm[DEMO_ANIM_OUT].isStop2()) { + mAnm[DEMO_ANIM_OUT].setAnimEnable(false); + mStateMgr.changeState(StateID_Invisible); + } +} +void dLytMsgWindowDemo_c::finalizeState_Out() {} + +bool dLytMsgWindowDemo_c::execute() { + mStateMgr.executeState(); + for (int i = 0; i < DEMO_NUM_ANIMS; i++) { + if (mAnm[i].isEnabled()) { + mAnm[i].play(); + } + } + mLyt.calc(); + return true; +} + +void dLytMsgWindowDemo_c::draw() { + SizedString<64> label = getTextLabel(); + // TODO figure out what these correspond to + if (!(label == "Demo01_01:07") && !(label == "Demo01_01:15") && !(label == "Demo01_01:16") && + !(label == "Demo01_01:17") && !(label == "Demo01_01:18")) { + // TODO order of evaluation + s32 i = 0; + if (mpTagProcessor->getNumLinesMaybe() > 1) { + i = 1; + } + mBlurRelated.drawTextBlur(&mText, mOffsets[i], mpPane->GetAlpha()); + } + mLyt.draw(); +} + +SizedString<64> dLytMsgWindowDemo_c::getTextLabel() { + return dLytMsgWindow_c::getInstance()->getLabel(); +} + +void dLytMsgWindowDemo_c::open(dAcObjBase_c *obj, u32 param) { + mShouldBeOpen = true; +} + +bool dLytMsgWindowDemo_c::isDoneOpening() const { + return !(*mStateMgr.getStateID() == StateID_In); +} + +void dLytMsgWindowDemo_c::close() { + mShouldBeOpen = false; +} + +bool dLytMsgWindowDemo_c::isDoneClosing() const { + return !(*mStateMgr.getStateID() == StateID_Out); +} + +bool dLytMsgWindowDemo_c::setText(const wchar_t *text) { + mpTextboxes[0]->SetTagProcessor(mpTagProcessor); + mpTextboxes[1]->SetTagProcessor(mpTagProcessor); + mpTextboxes[0]->setTextWithTextProcessor(text, mpTagProcessor, 0); + mpTextboxes[1]->setTextWithTextProcessor(text, mpTagProcessor, 0); + return true; +} |
