summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-04-02 00:57:49 +0200
committerrobojumper <robojumper@gmail.com>2025-04-07 22:12:36 +0200
commit5e2343afb79863394f5f1487d70cd3492305963e (patch)
treecfbc5f4bb6784e203e7f84a3ca41bdc8141ba2fe /src/d
parenta337ae752a4aa67b423baee3d28fb6ae9a28c5be (diff)
d_lyt_msg_window_stone OK
Diffstat (limited to 'src/d')
-rw-r--r--src/d/lyt/d_lyt_common_a_btn.cpp36
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp195
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;
+}