diff options
| author | robojumper <robojumper@gmail.com> | 2025-04-02 00:57:49 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-04-07 22:12:36 +0200 |
| commit | 5e2343afb79863394f5f1487d70cd3492305963e (patch) | |
| tree | cfbc5f4bb6784e203e7f84a3ca41bdc8141ba2fe /src/d | |
| parent | a337ae752a4aa67b423baee3d28fb6ae9a28c5be (diff) | |
d_lyt_msg_window_stone OK
Diffstat (limited to 'src/d')
| -rw-r--r-- | src/d/lyt/d_lyt_common_a_btn.cpp | 36 | ||||
| -rw-r--r-- | src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp | 195 |
2 files changed, 213 insertions, 18 deletions
diff --git a/src/d/lyt/d_lyt_common_a_btn.cpp b/src/d/lyt/d_lyt_common_a_btn.cpp index 056e6397..f484e1e5 100644 --- a/src/d/lyt/d_lyt_common_a_btn.cpp +++ b/src/d/lyt/d_lyt_common_a_btn.cpp @@ -14,12 +14,12 @@ static const d2d::LytBrlanMapping brlanMap[] = { { "aBtn_00_out.brlan", "G_inOut_00"}, }; -#define MSG_ABTN_ANIM_IN 0 -#define MSG_ABTN_ANIM_LOOP 1 -#define MSG_ABTN_ANIM_DECIDE 2 -#define MSG_ABTN_ANIM_OUT 3 +#define A_BTN_ANIM_IN 0 +#define A_BTN_ANIM_LOOP 1 +#define A_BTN_ANIM_DECIDE 2 +#define A_BTN_ANIM_OUT 3 -#define MSG_ABTN_NUM_ANIMS 4 +#define A_BTN_NUM_ANIMS 4 const dLytCommonABtn_c::executeFunc dLytCommonABtn_c::sExecuteFuncs[4] = { &dLytCommonABtn_c::executeStateInvisible, @@ -32,7 +32,7 @@ bool dLytCommonABtn_c::build(d2d::ResAccIf_c *resAcc) { mLyt.setResAcc(resAcc); mLyt.build("aBtn_00.brlyt", nullptr); - for (int i = 0; i < MSG_ABTN_NUM_ANIMS; i++) { + for (int i = 0; i < A_BTN_NUM_ANIMS; i++) { mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName); } @@ -42,7 +42,7 @@ bool dLytCommonABtn_c::build(d2d::ResAccIf_c *resAcc) { } bool dLytCommonABtn_c::remove() { - for (int i = 0; i < MSG_ABTN_NUM_ANIMS; i++) { + for (int i = 0; i < A_BTN_NUM_ANIMS; i++) { mAnm[i].remove(); } return true; @@ -93,7 +93,7 @@ void dLytCommonABtn_c::gotoStateInvisible() { setState(STATE_INVISIBLE); mLyt.unbindAnims(); - d2d::AnmGroup_c &inAnim = mAnm[MSG_ABTN_ANIM_IN]; + d2d::AnmGroup_c &inAnim = mAnm[A_BTN_ANIM_IN]; field_0x1A8 = 0; mInRequested = false; mOutRequested = false; @@ -130,7 +130,7 @@ void dLytCommonABtn_c::gotoStateIn() { } void dLytCommonABtn_c::executeStateIn() { - d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_IN]; + d2d::AnmGroup_c &anm = mAnm[A_BTN_ANIM_IN]; if (anm.isEndReached() == true) { goToStateVisible(); } else { @@ -140,8 +140,8 @@ void dLytCommonABtn_c::executeStateIn() { void dLytCommonABtn_c::goToStateVisible() { setState(STATE_VISIBLE); - mAnm[MSG_ABTN_ANIM_IN].unbind(); - d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_LOOP]; + mAnm[A_BTN_ANIM_IN].unbind(); + d2d::AnmGroup_c &anm = mAnm[A_BTN_ANIM_LOOP]; anm.bind(false); anm.setFrame(0.0f); if (dSys::getFrameRate() == 1) { @@ -156,17 +156,17 @@ void dLytCommonABtn_c::executeStateVisible() { goToStateDecideOut(); mOutRequested = false; } else { - d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_LOOP]; + d2d::AnmGroup_c &anm = mAnm[A_BTN_ANIM_LOOP]; anm.play(); } } void dLytCommonABtn_c::goToStateDecideOut() { setState(STATE_OUT); - mAnm[MSG_ABTN_ANIM_LOOP].unbind(); + mAnm[A_BTN_ANIM_LOOP].unbind(); if (mNoDecide == true) { mNoDecide = false; - d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_OUT]; + d2d::AnmGroup_c &anm = mAnm[A_BTN_ANIM_OUT]; anm.bind(false); anm.setFrame(0.0f); if (dSys::getFrameRate() == 1) { @@ -176,7 +176,7 @@ void dLytCommonABtn_c::goToStateDecideOut() { } mOutState = OUT_STATE_OUT; } else { - d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_DECIDE]; + d2d::AnmGroup_c &anm = mAnm[A_BTN_ANIM_DECIDE]; anm.bind(false); anm.setAnimEnable(true); anm.setFrame(0.0f); @@ -194,7 +194,7 @@ void dLytCommonABtn_c::goToStateDecideOut() { } void dLytCommonABtn_c::executeStateDecideOut() { - d2d::AnmGroup_c &decideAnm = mAnm[MSG_ABTN_ANIM_DECIDE]; + d2d::AnmGroup_c &decideAnm = mAnm[A_BTN_ANIM_DECIDE]; switch (mOutState) { case OUT_STATE_DECIDING: { if (decideAnm.isEndReached() == true) { @@ -210,7 +210,7 @@ void dLytCommonABtn_c::executeStateDecideOut() { } case OUT_STATE_GOTO_OUT: { decideAnm.unbind(); - d2d::AnmGroup_c &anmOut = mAnm[MSG_ABTN_ANIM_OUT]; + d2d::AnmGroup_c &anmOut = mAnm[A_BTN_ANIM_OUT]; anmOut.bind(false); anmOut.setAnimEnable(true); anmOut.setFrame(0.0f); @@ -223,7 +223,7 @@ void dLytCommonABtn_c::executeStateDecideOut() { break; } case OUT_STATE_OUT: { - d2d::AnmGroup_c &anmOut = mAnm[MSG_ABTN_ANIM_OUT]; + d2d::AnmGroup_c &anmOut = mAnm[A_BTN_ANIM_OUT]; if (anmOut.isEndReached() == true) { mOutState = OUT_STATE_GOTO_INVISIBLE; mIsDoneOut = true; diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp new file mode 100644 index 00000000..b21936ff --- /dev/null +++ b/src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp @@ -0,0 +1,195 @@ +#include "d/lyt/msg_window/d_lyt_msg_window_stone.h" + +#include "common.h" +#include "d/d_tag_processor.h" +#include "d/lyt/d2d.h" +#include "d/lyt/d_textbox.h" +#include "nw4r/lyt/lyt_group.h" +#include "nw4r/lyt/lyt_pane.h" +#include "s/s_State.hpp" + +STATE_DEFINE(dLytMsgWindowStone_c, Invisible); +STATE_DEFINE(dLytMsgWindowStone_c, In); +STATE_DEFINE(dLytMsgWindowStone_c, Visible); +STATE_DEFINE(dLytMsgWindowStone_c, Out); + +static const d2d::LytBrlanMapping brlanMap[] = { + { "sekibanWindow_00_in.brlan", "G_inOut_00"}, + {"sekibanWindow_00_loop.brlan", "G_loop_00"}, + { "sekibanWindow_00_out.brlan", "G_inOut_00"}, +}; + +#define SEKIBAN_ANIM_IN 0 +#define SEKIBAN_ANIM_LOOP 1 +#define SEKIBAN_ANIM_OUT 2 + +#define SEKIBAN_NUM_ANIMS 3 + +static const char *sPanes[] = { + "N_aBtn_00", + "N_inOut_00", +}; + +static const char *sTextBoxes[] = { + "T_message_00", + "T_messageS_00", + "T_messageS_01", +}; + +static const char *sGroupName = "G_ref_00"; + +bool dLytMsgWindowStone_c::build(void *unk, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor) { + mLyt.setResAcc(resAcc); + mLyt.build("sekibanWindow_00.brlyt", nullptr); + mLyt.setPriority(0x8A); + + for (int i = 0; i < SEKIBAN_NUM_ANIMS; i++) { + mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName); + mAnm[i].bind(false); + mAnm[i].setAnimEnable(false); + } + + mAnm[SEKIBAN_ANIM_LOOP].setAnimEnable(true); + mAnm[SEKIBAN_ANIM_OUT].setAnimEnable(true); + mAnm[SEKIBAN_ANIM_OUT].setToEnd(); + mLyt.calc(); + mAnm[SEKIBAN_ANIM_OUT].setAnimEnable(false); + + for (int i = 0; i < 2; i++) { + mpPanes[i] = mLyt.findPane(sPanes[i]); + } + + for (int i = 0; i < 3; i++) { + mpTextboxes[i] = mLyt.getTextBox(sTextBoxes[i]); + mpTextboxes[i]->SetTextPositionH(0); + mpTextboxes[i]->SetTextPositionV(0); + } + + mpTextboxes[1]->set0x1F6(1); + mpTextboxes[2]->set0x1F6(1); + + for (int i = 0; i < 1; i++) { + mNodes[i].mpLytPane = &mCommon; + mCommon.build(resAcc); + mSubpaneList.PushBack(&mNodes[i]); + } + + if (mLyt.getLayout()->GetGroupContainer() != nullptr) { + nw4r::lyt::Group *g = mLyt.getLayout()->GetGroupContainer()->FindGroupByName(sGroupName); + if (g != nullptr) { + d2d::dSubPane::linkMeters(g, &mSubpaneList); + } + } + + mpPanes[1]->SetVisible(true); + mLyt.calc(); + mpPanes[1]->SetVisible(false); + mpTagProcessor = tagProcessor; + mStateMgr.changeState(StateID_Invisible); + return true; +} + +bool dLytMsgWindowStone_c::remove() { + for (d2d::SubPaneList::Iterator it = mSubpaneList.GetBeginIter(); it != mSubpaneList.GetEndIter(); ++it) { + d2d::dSubPane *subPane = it->mpLytPane; + if (subPane != nullptr) { + nw4r::lyt::Pane *parent = subPane->getPane()->GetParent(); + parent->RemoveChild(subPane->getPane()); + } + } + + for (int i = 0; i < 1; i++) { + mNodes[i].mpLytPane->remove(); + } + mCommon.remove(); + for (int i = 0; i < SEKIBAN_NUM_ANIMS; i++) { + mAnm[i].remove(); + } + return true; +} + +void dLytMsgWindowStone_c::initializeState_Invisible() { + mCommon.resetToInvisble(); +} +void dLytMsgWindowStone_c::executeState_Invisible() { + if (mShouldBeOpen) { + mStateMgr.changeState(StateID_In); + } +} +void dLytMsgWindowStone_c::finalizeState_Invisible() {} + +void dLytMsgWindowStone_c::initializeState_In() { + mAnm[SEKIBAN_ANIM_IN].setAnimEnable(true); + mAnm[SEKIBAN_ANIM_IN].setFrame(0.0f); +} +void dLytMsgWindowStone_c::executeState_In() { + if (mAnm[SEKIBAN_ANIM_IN].isEndReached()) { + mAnm[SEKIBAN_ANIM_IN].setAnimEnable(false); + mStateMgr.changeState(StateID_Visible); + } +} +void dLytMsgWindowStone_c::finalizeState_In() {} + +void dLytMsgWindowStone_c::initializeState_Visible() {} +void dLytMsgWindowStone_c::executeState_Visible() { + if (!mShouldBeOpen) { + mStateMgr.changeState(StateID_Out); + } +} +void dLytMsgWindowStone_c::finalizeState_Visible() {} + +void dLytMsgWindowStone_c::initializeState_Out() { + mAnm[SEKIBAN_ANIM_OUT].setAnimEnable(true); + mAnm[SEKIBAN_ANIM_OUT].setFrame(0.0f); +} +void dLytMsgWindowStone_c::executeState_Out() { + if (mAnm[SEKIBAN_ANIM_OUT].isEndReached()) { + mAnm[SEKIBAN_ANIM_OUT].setAnimEnable(false); + mStateMgr.changeState(StateID_Invisible); + } +} +void dLytMsgWindowStone_c::finalizeState_Out() {} + +bool dLytMsgWindowStone_c::execute() { + mStateMgr.executeState(); + for (int i = 0; i < SEKIBAN_NUM_ANIMS; i++) { + if (mAnm[i].isEnabled()) { + mAnm[i].play(); + } + } + mLyt.calc(); + for (int i = 0; i < 1; i++) { + mNodes[i].mpLytPane->execute(); + } + return true; +} + +void dLytMsgWindowStone_c::draw() { + mLyt.draw(); +} + +void dLytMsgWindowStone_c::open() { + mShouldBeOpen = true; +} + +bool dLytMsgWindowStone_c::isOpening() const { + return !(*mStateMgr.getStateID() == StateID_In); +} + +void dLytMsgWindowStone_c::close() { + mShouldBeOpen = false; +} + +bool dLytMsgWindowStone_c::isClosing() const { + return !(*mStateMgr.getStateID() == StateID_Out); +} + +bool dLytMsgWindowStone_c::setText(const wchar_t *text) { + mpTextboxes[0]->SetTagProcessor(mpTagProcessor); + mpTextboxes[1]->SetTagProcessor(mpTagProcessor); + mpTextboxes[2]->SetTagProcessor(mpTagProcessor); + mpTextboxes[0]->fn_800AF540(text, mpTagProcessor, 0); + mpTextboxes[1]->fn_800AF540(text, mpTagProcessor, 0); + mpTextboxes[2]->fn_800AF540(text, mpTagProcessor, 0); + return true; +} |
