mirror of
https://github.com/zeldaret/ss
synced 2026-09-01 09:32:58 -04:00
d_lyt_msg_window_wood OK, d_lyt_common_a_btn OK
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
#include "d/lyt/msg_window/d_lyt_msg_window_wood.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(dLytMsgWindowWood_c, Invisible);
|
||||
STATE_DEFINE(dLytMsgWindowWood_c, In);
|
||||
STATE_DEFINE(dLytMsgWindowWood_c, Visible);
|
||||
STATE_DEFINE(dLytMsgWindowWood_c, Out);
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "kanbanWindow_00_in.brlan", "G_inOut_00"},
|
||||
{"kanbanWindow_00_loop.brlan", "G_loop_00"},
|
||||
{ "kanbanWindow_00_out.brlan", "G_inOut_00"},
|
||||
};
|
||||
|
||||
#define KANBAN_ANIM_IN 0
|
||||
#define KANBAN_ANIM_LOOP 1
|
||||
#define KANBAN_ANIM_OUT 2
|
||||
|
||||
#define KANBAN_NUM_ANIMS 3
|
||||
|
||||
static const char *sPanes[] = {
|
||||
"N_aBtn_00",
|
||||
"N_inOut_00",
|
||||
};
|
||||
|
||||
static const char *sTextBoxes[] = {
|
||||
"T_message_00",
|
||||
"T_messageS_00",
|
||||
};
|
||||
|
||||
static const char *sGroupName = "G_ref_00";
|
||||
|
||||
bool dLytMsgWindowWood_c::build(void *unk, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("kanbanWindow_00.brlyt", nullptr);
|
||||
mLyt.setPriority(0x8A);
|
||||
|
||||
for (int i = 0; i < KANBAN_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mAnm[KANBAN_ANIM_LOOP].setAnimEnable(true);
|
||||
mAnm[KANBAN_ANIM_OUT].setAnimEnable(true);
|
||||
mAnm[KANBAN_ANIM_OUT].setToEnd();
|
||||
mLyt.calc();
|
||||
mAnm[KANBAN_ANIM_OUT].setAnimEnable(false);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpPanes[i] = mLyt.findPane(sPanes[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextboxes[i] = mLyt.getTextBox(sTextBoxes[i]);
|
||||
mpTextboxes[i]->SetTextPositionH(0);
|
||||
mpTextboxes[i]->SetTextPositionV(0);
|
||||
}
|
||||
|
||||
mpTextboxes[1]->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 dLytMsgWindowWood_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 < KANBAN_NUM_ANIMS; i++) {
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void dLytMsgWindowWood_c::initializeState_Invisible() {
|
||||
mCommon.resetToInvisble();
|
||||
}
|
||||
void dLytMsgWindowWood_c::executeState_Invisible() {
|
||||
if (mCommon.shouldBeOpen()) {
|
||||
mStateMgr.changeState(StateID_In);
|
||||
}
|
||||
}
|
||||
void dLytMsgWindowWood_c::finalizeState_Invisible() {}
|
||||
|
||||
void dLytMsgWindowWood_c::initializeState_In() {
|
||||
mAnm[KANBAN_ANIM_IN].setAnimEnable(true);
|
||||
mAnm[KANBAN_ANIM_IN].setFrame(0.0f);
|
||||
}
|
||||
void dLytMsgWindowWood_c::executeState_In() {
|
||||
if (mAnm[KANBAN_ANIM_IN].isEndReached()) {
|
||||
mAnm[KANBAN_ANIM_IN].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Visible);
|
||||
}
|
||||
}
|
||||
void dLytMsgWindowWood_c::finalizeState_In() {}
|
||||
|
||||
void dLytMsgWindowWood_c::initializeState_Visible() {}
|
||||
void dLytMsgWindowWood_c::executeState_Visible() {
|
||||
if (!mCommon.shouldBeOpen()) {
|
||||
mStateMgr.changeState(StateID_Out);
|
||||
}
|
||||
}
|
||||
void dLytMsgWindowWood_c::finalizeState_Visible() {}
|
||||
|
||||
void dLytMsgWindowWood_c::initializeState_Out() {
|
||||
mAnm[KANBAN_ANIM_OUT].setAnimEnable(true);
|
||||
mAnm[KANBAN_ANIM_OUT].setFrame(0.0f);
|
||||
}
|
||||
void dLytMsgWindowWood_c::executeState_Out() {
|
||||
if (mAnm[KANBAN_ANIM_OUT].isEndReached()) {
|
||||
mAnm[KANBAN_ANIM_OUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Invisible);
|
||||
}
|
||||
}
|
||||
void dLytMsgWindowWood_c::finalizeState_Out() {}
|
||||
|
||||
bool dLytMsgWindowWood_c::execute() {
|
||||
mStateMgr.executeState();
|
||||
for (int i = 0; i < KANBAN_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 dLytMsgWindowWood_c::draw() {
|
||||
mLyt.draw();
|
||||
}
|
||||
|
||||
void dLytMsgWindowWood_c::vt_0x1C() {
|
||||
mCommon.openMaybe();
|
||||
}
|
||||
|
||||
bool dLytMsgWindowWood_c::vt_0x20() const {
|
||||
return !(*mStateMgr.getStateID() == StateID_In);
|
||||
}
|
||||
|
||||
void dLytMsgWindowWood_c::vt_0x24() {
|
||||
mCommon.closeMaybe();
|
||||
}
|
||||
|
||||
bool dLytMsgWindowWood_c::vt_0x28() const {
|
||||
return !(*mStateMgr.getStateID() == StateID_Out);
|
||||
}
|
||||
|
||||
bool dLytMsgWindowWood_c::setText(const wchar_t *text) {
|
||||
mpTextboxes[0]->SetTagProcessor(mpTagProcessor);
|
||||
mpTextboxes[1]->SetTagProcessor(mpTagProcessor);
|
||||
mpTextboxes[0]->fn_800AF540(text, mpTagProcessor, 0);
|
||||
mpTextboxes[1]->fn_800AF540(text, mpTagProcessor, 0);
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user