diff options
| author | robojumper <robojumper@gmail.com> | 2025-11-28 11:49:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-28 11:49:41 +0100 |
| commit | 2c19043e82eccd9a669f6cd51869e23e95c0b360 (patch) | |
| tree | 588feca232018d430a4076c29703114f9115a61c /src/d | |
| parent | a67ebabb075ca36b93b9964be977c534517cd962 (diff) | |
| parent | cb5e00197aefe5e517462331b92dfbcd65111b40 (diff) | |
Merge pull request #275 from robojumper/d_lyt_draw_mark
d_lyt_draw_mark OK
Diffstat (limited to 'src/d')
| -rw-r--r-- | src/d/lyt/d_lyt_control_game.cpp | 2 | ||||
| -rw-r--r-- | src/d/lyt/d_lyt_draw_mark.cpp | 596 |
2 files changed, 597 insertions, 1 deletions
diff --git a/src/d/lyt/d_lyt_control_game.cpp b/src/d/lyt/d_lyt_control_game.cpp index 7d5a0a67..454341e7 100644 --- a/src/d/lyt/d_lyt_control_game.cpp +++ b/src/d/lyt/d_lyt_control_game.cpp @@ -360,7 +360,7 @@ int dLytControlGame_c::execute() { if (mpDrawMark != nullptr) { if (field_0x15C54 == 0) { - mpDrawMark->setField_0x941(1); + mpDrawMark->setForceComplete(true); } mpDrawMark->execute(); if (mpDrawMark->getField_0x940() != 0) { diff --git a/src/d/lyt/d_lyt_draw_mark.cpp b/src/d/lyt/d_lyt_draw_mark.cpp new file mode 100644 index 00000000..aee7f322 --- /dev/null +++ b/src/d/lyt/d_lyt_draw_mark.cpp @@ -0,0 +1,596 @@ +#include "d/lyt/d_lyt_draw_mark.h" + +#include "common.h" +#include "d/d_gfx.h" +#include "d/d_pad.h" +#include "d/d_rumble.h" +#include "d/d_sc_game.h" +#include "d/flag/storyflag_manager.h" +#include "d/lyt/d_lyt_control_game.h" +#include "d/lyt/d_lyt_do_button.h" +#include "d/snd/d_snd_bgm_mgr.h" +#include "d/snd/d_snd_small_effect_mgr.h" +#include "d/snd/d_snd_wzsound.h" +#include "m/m_angle.h" +#include "m/m_pad.h" +#include "m/m_vec.h" +#include "nw4r/math/math_types.h" +#include "toBeSorted/arc_managers/layout_arc_manager.h" + +class dLytDrawMark_HIO_c { +public: + dLytDrawMark_HIO_c(); + virtual ~dLytDrawMark_HIO_c(); + + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0C; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ s16 field_0x14; + /* 0x16 */ u16 field_0x16; + /* 0x18 */ u16 field_0x18; + /* 0x1A */ s16 field_0x1A; + /* 0x1C */ s16 field_0x1C; + /* 0x1E */ u8 field_0x1E; +}; + +static dLytDrawMark_HIO_c sHio; + +dLytDrawMark_HIO_c::dLytDrawMark_HIO_c() { + field_0x14 = 10; + field_0x04 = 620.0f; + field_0x08 = 800.0f; + field_0x0C = 35.0f; + field_0x10 = 30.0f; + field_0x16 = 5; + field_0x1A = 10923; + field_0x18 = 9000; + field_0x1C = 10; + field_0x1E = 0; +} +dLytDrawMark_HIO_c::~dLytDrawMark_HIO_c() {} + +STATE_DEFINE(dLytDrawMark_c, Wait); +STATE_DEFINE(dLytDrawMark_c, In); +STATE_DEFINE(dLytDrawMark_c, RingIn); +STATE_DEFINE(dLytDrawMark_c, MoveWait); +STATE_DEFINE(dLytDrawMark_c, MoveDraw); +STATE_DEFINE(dLytDrawMark_c, MoveFix); +STATE_DEFINE(dLytDrawMark_c, MoveEnd); +STATE_DEFINE(dLytDrawMark_c, Complete); + +#define DRAW_MARK_ANIM_IN 0 +#define DRAW_MARK_ANIM_RING_IN 1 +#define DRAW_MARK_ANIM_DRAW_LINE_LOOP_OFFSET 2 +#define DRAW_MARK_ANIM_BASE_LOOP 8 +#define DRAW_MARK_ANIM_LINE_FIX_OFFSET 9 +#define DRAW_MARK_ANIM_COMPLETE 15 + +#define DRAW_MARK_NUM_ANIMS 16 + +#define DRAW_MARK_PANE_START_OFFSET 0 +#define DRAW_MARK_PANE_END_OFFSET 6 +#define DRAW_MARK_PANE_RING_ALL 12 + +#define DRAW_MARK_NUM_PANES 13 + +bool dLytDrawMark_c::build(UNKWORD) { + // enums cause deoptimization here... + mVariant = dScGame_c::currentSpawnInfo.layer == 3 ? /* VAR_IMP_2*/ 1 : dScGame_c::currentSpawnInfo.layer == 4 ? /* VAR_IMP_3 */ 2 : /* VAR_IMP_1 */ 0; + + if (mVariant == VAR_IMP_2) { + buildVariant02(); + } else if (mVariant == VAR_IMP_3) { + buildVariant03(); + } else { + buildVariant01(); + } + + field_0x500 = mpPanes[0]; + + mLastLine = false; + mNeedEnableLineLoop = false; + field_0x940 = false; + mForceComplete = false; + + mSavedLineLoopIndex = -1; + field_0x8F8 = -1; + mLineFixIndex = 0; + + field_0x944 = 0; + + field_0x900 = 0; + mDpdPosInitTimer = 1; + mSampleTimer = 0; + mLineLoopIndex = 0; + + field_0x874.x = field_0x874.y = 0.0f; + mDpdPosLastFrame.x = mDpdPosLastFrame.y = 0.0f; + + field_0x910 = 0.0f; + field_0x914 = 0.0f; + + for (int i = 0; i < 10; i++) { + field_0x918[i] = 0.0f; + } + + field_0x955 = 0; + field_0x956 = 0; + field_0x957 = 0; + + for (int i = 0; i < 6; i++) { + mStartPositions[i].x = mStartPositions[i].y = 0.0f; + mEndPositions[i].x = mEndPositions[i].y = 0.0f; + } + + mAnm[DRAW_MARK_ANIM_IN].setFrame(0.0f); + mAnm[DRAW_MARK_ANIM_IN].setAnimEnable(true); + mAnm[DRAW_MARK_ANIM_RING_IN].setFrame(0.0f); + mAnm[DRAW_MARK_ANIM_RING_IN].setAnimEnable(true); + + mLyt.calc(); + + mAnm[DRAW_MARK_ANIM_IN].setAnimEnable(false); + mAnm[DRAW_MARK_ANIM_RING_IN].setAnimEnable(false); + + mStateMgr.changeState(StateID_In); + + return true; +} + +bool dLytDrawMark_c::remove() { + dPad::ex_c::getInstance()->setField_0x70(); + mResAcc.detach(); + return true; +} + +bool dLytDrawMark_c::execute() { + dPad::ex_c::fn_80059220(); + mStateMgr.executeState(); + + for (int i = 0; i < DRAW_MARK_NUM_ANIMS; i++) { + if (mAnmCtrlInUse[i]) { + if (mAnm[i].isEnabled()) { + mAnm[i].play(); + } + } + } + + mLyt.calc(); + return true; +} + +bool dLytDrawMark_c::draw() { + mLyt.addToDrawList(); + return true; +} + +void dLytDrawMark_c::initializeState_Wait() {} +void dLytDrawMark_c::executeState_Wait() {} +void dLytDrawMark_c::finalizeState_Wait() {} + +void dLytDrawMark_c::initializeState_In() { + mAnm[DRAW_MARK_ANIM_IN].setForwardOnce(); + mAnm[DRAW_MARK_ANIM_IN].setToStart(); + mAnm[DRAW_MARK_ANIM_IN].setAnimEnable(true); + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SEAL_APPEAR); + if (mVariant == VAR_IMP_2) { + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SEAL_LINE_APPEAR_2); + } else if (mVariant == VAR_IMP_3) { + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SEAL_LINE_APPEAR_3); + } else { + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SEAL_LINE_APPEAR_1); + } +} +void dLytDrawMark_c::executeState_In() { + if (mAnm[DRAW_MARK_ANIM_IN].isStop2()) { + mAnm[DRAW_MARK_ANIM_IN].setAnimEnable(false); + mStateMgr.changeState(StateID_RingIn); + } +} +void dLytDrawMark_c::finalizeState_In() {} + +void dLytDrawMark_c::initializeState_RingIn() { + mAnm[DRAW_MARK_ANIM_RING_IN].setForwardOnce(); + mAnm[DRAW_MARK_ANIM_RING_IN].setToStart(); + mAnm[DRAW_MARK_ANIM_RING_IN].setAnimEnable(true); + mAnm[DRAW_MARK_ANIM_BASE_LOOP].setAnimEnable(true); + mAnm[DRAW_MARK_ANIM_BASE_LOOP].setFrame(0.0f); +} +void dLytDrawMark_c::executeState_RingIn() { + if (mAnm[DRAW_MARK_ANIM_RING_IN].isStop2()) { + mAnm[DRAW_MARK_ANIM_RING_IN].setAnimEnable(false); + mNeedEnableLineLoop = true; + mStateMgr.changeState(StateID_MoveWait); + } +} +void dLytDrawMark_c::finalizeState_RingIn() {} + +void dLytDrawMark_c::initializeState_MoveWait() { + loadPanePos(); + if (mNeedEnableLineLoop) { + mAnm[mLineLoopIndex + DRAW_MARK_ANIM_DRAW_LINE_LOOP_OFFSET].setAnimEnable(true); + mNeedEnableLineLoop = false; + } + field_0x874 = mStartPositions[mLineLoopIndex]; + // unused + mVec2_c _ = mEndPositions[mLineLoopIndex] - mStartPositions[mLineLoopIndex]; + if (mSavedLineLoopIndex == -1) { + mSavedLineLoopIndex = mLineLoopIndex; + } +} +void dLytDrawMark_c::executeState_MoveWait() { + if (mAnm[mLineLoopIndex + DRAW_MARK_ANIM_DRAW_LINE_LOOP_OFFSET].getFrame() == 1.0f) { + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SEAL_LINE_BLINK); + } + dPad::ex_c::getInstance()->setField_0x70(sHio.field_0x18); + fn_800ADC10(mVec2_c(0.0f, 0.0f)); + mDpdPosScreen.x = mDpdPosScreen.y = 0.0f; + mDpdPosLastFrame.set(0.0f, 0.0f); + mStateMgr.changeState(StateID_MoveDraw); +} +void dLytDrawMark_c::finalizeState_MoveWait() {} + +void dLytDrawMark_c::initializeState_MoveDraw() { + mDpdPosInitTimer = 1; + field_0x900 = 0; + field_0x914 = 0.0f; + for (int i = 0; i < 10; i++) { + field_0x918[i] = 0.0f; + } + field_0x955 = 0; + field_0x956 = 0; + field_0x957 = 0; +} +void dLytDrawMark_c::executeState_MoveDraw() { + if (mAnm[mLineLoopIndex + DRAW_MARK_ANIM_DRAW_LINE_LOOP_OFFSET].getFrame() == 1.0f) { + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SEAL_LINE_BLINK); + } + if (mForceComplete) { + mStateMgr.changeState(StateID_Complete); + } else { + detectSwordSwing(); + } +} +void dLytDrawMark_c::finalizeState_MoveDraw() {} + +void dLytDrawMark_c::initializeState_MoveFix() { + mAnm[mLineLoopIndex + DRAW_MARK_ANIM_DRAW_LINE_LOOP_OFFSET].setFrame(0.0f); + mLyt.calc(); + mAnm[mLineLoopIndex + DRAW_MARK_ANIM_DRAW_LINE_LOOP_OFFSET].setAnimEnable(false); + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SEAL_LINE); + dRumble_c::start(dRumble_c::sRumblePreset4, dRumble_c::FLAG_SLOT0); + + mAnm[mLineFixIndex + DRAW_MARK_ANIM_LINE_FIX_OFFSET].setAnimEnable(true); + mAnm[mLineFixIndex + DRAW_MARK_ANIM_LINE_FIX_OFFSET].setFrame(0.0f); +} +void dLytDrawMark_c::executeState_MoveFix() { + if (mAnm[mLineFixIndex + DRAW_MARK_ANIM_LINE_FIX_OFFSET].isEndReached()) { + mAnm[mLineFixIndex + DRAW_MARK_ANIM_LINE_FIX_OFFSET].setAnimEnable(false); + mLineFixIndex++; + if (mLineLoopIndex >= getNumLines() - 1) { + mLineLoopIndex = 0; + mLastLine = true; + } else { + mLineLoopIndex++; + } + mNeedEnableLineLoop = true; + if (mSavedLineLoopIndex < getNumLines()) { + if (mLastLine) { + dLytControlGame_c::getInstance()->setDrawMarkRelated(0, 0); + mStateMgr.changeState(StateID_Complete); + } else { + mSavedLineLoopIndex = -1; + mStateMgr.changeState(StateID_MoveWait); + } + } + } +} +void dLytDrawMark_c::finalizeState_MoveFix() {} + +void dLytDrawMark_c::initializeState_MoveEnd() { + if (mLineLoopIndex >= getNumLines() - 1) { + mLineLoopIndex = 0; + mLastLine = true; + } else { + mLineLoopIndex++; + } + mNeedEnableLineLoop = true; +} +void dLytDrawMark_c::executeState_MoveEnd() { + if (mSavedLineLoopIndex < getNumLines()) { + if (mLastLine) { + dLytControlGame_c::getInstance()->setDrawMarkRelated(0, 0); + mStateMgr.changeState(StateID_Complete); + } else { + mSavedLineLoopIndex = -1; + mStateMgr.changeState(StateID_MoveWait); + } + } +} +void dLytDrawMark_c::finalizeState_MoveEnd() {} + +void dLytDrawMark_c::initializeState_Complete() { + static const s32 sFlags[] = { + STORYFLAG_IMPRISONED_1_DEFEATED, + STORYFLAG_IMPRISONED_2_DEFEATED, + STORYFLAG_IMPRISONED_3_DEFEATED, + }; + mAnm[DRAW_MARK_ANIM_COMPLETE].setForwardOnce(); + mAnm[DRAW_MARK_ANIM_COMPLETE].setToStart(); + mAnm[DRAW_MARK_ANIM_COMPLETE].setAnimEnable(true); + StoryflagManager::sInstance->setFlag(sFlags[mVariant]); + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SEAL_COMPLETE); + dSndBgmMgr_c::GetInstance()->stopAllBgm(30); +} +void dLytDrawMark_c::executeState_Complete() { + if (mAnm[DRAW_MARK_ANIM_COMPLETE].isEndReached()) { + mAnm[DRAW_MARK_ANIM_COMPLETE].setAnimEnable(false); + field_0x940 = true; + mStateMgr.changeState(StateID_Wait); + } +} +void dLytDrawMark_c::finalizeState_Complete() {} + +void dLytDrawMark_c::detectSwordSwing() { + dPad::ex_c::getInstance()->setField_0x70(sHio.field_0x18); + mDpdPosScreen = dPad::getDpdPosScreen(); + if (mDpdPosInitTimer > 0) { + mDpdPosLastFrame = mDpdPosScreen; + mDpdPosInitTimer--; + } + + if (mSampleTimer > 0) { + mSampleTimer--; + mDpdPosLastFrame = mDpdPosScreen; + } else { + mVec2_c swingDir(mDpdPosScreen.x - mDpdPosLastFrame.x, mDpdPosScreen.y - mDpdPosLastFrame.y); + mAng swingAngle = swingDir.ang2(); + mVec2_c lineDir = mEndPositions[mLineLoopIndex] - mStartPositions[mLineLoopIndex]; + mAng lineAngle = lineDir.ang2(); + mVec2_c v(swingDir); + v.y *= dGfx_c::getScreenAspectF(); + f32 swingMag = v.length(); + mAng ang2 = mAng::abs(lineAngle - swingAngle); + + if (field_0x910 >= sHio.field_0x08) { + if (swingMag < sHio.field_0x10) { + field_0x914 = 0.0f; + } else { + field_0x914 += swingMag; + bool isSwingInRightDirection = false; + if (ang2 <= sHio.field_0x1A) { + isSwingInRightDirection = true; + } + field_0x955 = field_0x956; + field_0x956 = field_0x957; + field_0x957 = isSwingInRightDirection; + if (field_0x914 >= sHio.field_0x04) { + if (field_0x955 && field_0x956 && field_0x957) { + field_0x910 = sHio.field_0x08 / 2.0f; + } + mStateMgr.changeState(StateID_MoveFix); + return; + } + } + } else { + if (ang2 <= sHio.field_0x1A) { + field_0x900++; + field_0x914 += swingMag; + if (field_0x900 > sHio.field_0x14) { + field_0x900 = sHio.field_0x14; + field_0x914 -= field_0x918[0]; + for (int i = 0; i < 9; i++) { + field_0x918[i] = field_0x918[i + 1]; + } + field_0x918[9] = swingMag; + } else { + s32 idx = field_0x900 - 1; + field_0x918[idx] = swingMag; + } + if (field_0x914 >= sHio.field_0x04) { + field_0x910 = 0.0f; + mStateMgr.changeState(StateID_MoveFix); + return; + } + } else { + if (swingMag >= sHio.field_0x0C) { + field_0x910 += swingMag - sHio.field_0x0C; + if (field_0x910 >= sHio.field_0x08) { + mSampleTimer = sHio.field_0x1C; + } + } + field_0x900 = 0; + field_0x914 = 0.0f; + for (int i = 0; i < 10; i++) { + field_0x918[i] = 0.0f; + } + } + } + + fn_800ADC10(mVec2_c(0.0f, 0.0f)); + mDpdPosScreen.x = mDpdPosScreen.y = 0.0f; + mDpdPosLastFrame.set(0.0f, 0.0f); + dLytDobutton_c::setActionTextStuff(dLytDobutton_c::ICON_2, dLytDobutton_c::ACT_DO_70, true); + } +} + +// Copied from SelectBtnHelper +void dLytDrawMark_c::convertScreenPosToDpdPos(mVec2_c *pOutDpd, mVec2_c *screenPos) const { + pOutDpd->x = (screenPos->x - dGfx_c::getWidth4x3LeftF()) / (dGfx_c::getWidth4x3F() * 0.5f) - 1.0f; + pOutDpd->y = (screenPos->y - dGfx_c::getCurrentScreenTopF()) / (dGfx_c::getCurrentScreenHeightF() * -0.5f) - 1.0f; +} + +// Copied from SelectBtnHelper +void dLytDrawMark_c::fn_800ADC10(mVec2_c screenPos) const { + mVec2_c dpdPos; + convertScreenPosToDpdPos(&dpdPos, &screenPos); + dPad::ex_c::getInstance()->fn_80056580(mPad::getCurrentCoreID(), dpdPos); +} + +void dLytDrawMark_c::loadPanePos() { + for (int i = 0; i < getNumLines(); i++) { + nw4r::math::MTX34 mtx1 = mpPanes[i + DRAW_MARK_PANE_START_OFFSET]->GetGlobalMtx(); + mStartPositions[i].set(mtx1._03, mtx1._13); + + nw4r::math::MTX34 mtx2 = mpPanes[i + DRAW_MARK_PANE_END_OFFSET]->GetGlobalMtx(); + mEndPositions[i].set(mtx2._03, mtx2._13); + } +} + +static const d2d::LytBrlanMapping brlanMapVariant01[] = { + { "drawMark_01_in.brlan", "G_inOut_00"}, + { "drawMark_01_ringIn.brlan", "G_inOut_01"}, + {"drawMark_01_drawLineLoop.brlan", "G_triangle_00"}, + {"drawMark_01_drawLineLoop.brlan", "G_triangle_01"}, + {"drawMark_01_drawLineLoop.brlan", "G_triangle_02"}, + { "", ""}, + { "", ""}, + { "", ""}, + { "drawMark_01_baseLoop.brlan", "G_baseAll_00"}, + { "drawMark_01_LineFix.brlan", "G_lineFix_00"}, + { "drawMark_01_LineFix.brlan", "G_lineFix_01"}, + { "drawMark_01_LineFix.brlan", "G_lineFix_02"}, + { "", ""}, + { "", ""}, + { "", ""}, + { "drawMark_01_complete.brlan", "G_complete_00"}, +}; + +static const char *sPaneNamesVariant01[] = { + "N_start_03", "N_start_04", "N_start_05", nullptr, nullptr, nullptr, "N_end_01", + "N_end_02", "N_end_03", nullptr, nullptr, nullptr, "N_ringAll_00", +}; + +void dLytDrawMark_c::buildVariant01() { + void *data = LayoutArcManager::GetInstance()->getLoadedData("DrawMark_01"); + mResAcc.attach(data, ""); + mLyt.setResAcc(&mResAcc); + mLyt.build("drawMark_01.brlyt", nullptr); + for (int i = 0; i < DRAW_MARK_NUM_ANIMS; i++) { + if (brlanMapVariant01[i].mFile[0] == '\0') { + mAnmCtrlInUse[i] = false; + } else { + mAnmCtrlInUse[i] = true; + mAnm[i].init(brlanMapVariant01[i].mFile, &mResAcc, mLyt.getLayout(), brlanMapVariant01[i].mName); + mAnm[i].bind(false); + mAnm[i].setAnimEnable(false); + } + } + + for (int i = 0; i < DRAW_MARK_NUM_PANES; i++) { + if (sPaneNamesVariant01[i] != nullptr) { + mpPanes[i] = mLyt.findPane(sPaneNamesVariant01[i]); + } else { + mpPanes[i] = nullptr; + } + } +} + +static const d2d::LytBrlanMapping brlanMapVariant02[] = { + { "drawMark_02_in.brlan", "G_inOut_00"}, + { "drawMark_02_ringIn.brlan", "G_inOut_01"}, + {"drawMark_02_drawLineLoop.brlan", "G_triangle_00"}, + {"drawMark_02_drawLineLoop.brlan", "G_triangle_01"}, + {"drawMark_02_drawLineLoop.brlan", "G_triangle_02"}, + {"drawMark_02_drawLineLoop.brlan", "G_triangle_03"}, + { "", ""}, + { "", ""}, + { "drawMark_02_baseLoop.brlan", "G_baseAll_00"}, + { "drawMark_02_LineFix.brlan", "G_lineFix_00"}, + { "drawMark_02_LineFix.brlan", "G_lineFix_01"}, + { "drawMark_02_LineFix.brlan", "G_lineFix_02"}, + { "drawMark_02_LineFix.brlan", "G_lineFix_03"}, + { "", ""}, + { "", ""}, + { "drawMark_02_complete.brlan", "G_complete_00"}, +}; + +static const char *sPaneNamesVariant02[] = { + "N_start_00", "N_start_01", "N_start_02", "N_start_03", nullptr, nullptr, "N_end_01", + "N_end_02", "N_end_03", "N_end_04", nullptr, nullptr, "N_ringAll_00", +}; + +void dLytDrawMark_c::buildVariant02() { + void *data = LayoutArcManager::GetInstance()->getLoadedData("DrawMark_02"); + mResAcc.attach(data, ""); + mLyt.setResAcc(&mResAcc); + mLyt.build("drawMark_02.brlyt", nullptr); + for (int i = 0; i < DRAW_MARK_NUM_ANIMS; i++) { + if (brlanMapVariant02[i].mFile[0] == '\0') { + mAnmCtrlInUse[i] = false; + } else { + mAnmCtrlInUse[i] = true; + mAnm[i].init(brlanMapVariant02[i].mFile, &mResAcc, mLyt.getLayout(), brlanMapVariant02[i].mName); + mAnm[i].bind(false); + mAnm[i].setAnimEnable(false); + } + } + + for (int i = 0; i < DRAW_MARK_NUM_PANES; i++) { + if (sPaneNamesVariant02[i] != nullptr) { + mpPanes[i] = mLyt.findPane(sPaneNamesVariant02[i]); + } else { + mpPanes[i] = nullptr; + } + } +} + +static const d2d::LytBrlanMapping brlanMapVariant03[] = { + { "drawMark_03_in.brlan", "G_inOut_00"}, + { "drawMark_03_ringIn.brlan", "G_inOut_01"}, + {"drawMark_03_drawLineLoop.brlan", "G_triangle_00"}, + {"drawMark_03_drawLineLoop.brlan", "G_triangle_01"}, + {"drawMark_03_drawLineLoop.brlan", "G_triangle_02"}, + {"drawMark_03_drawLineLoop.brlan", "G_triangle_03"}, + {"drawMark_03_drawLineLoop.brlan", "G_triangle_04"}, + {"drawMark_03_drawLineLoop.brlan", "G_triangle_05"}, + { "drawMark_03_baseLoop.brlan", "G_baseAll_00"}, + { "drawMark_03_LineFix.brlan", "G_lineFix_00"}, + { "drawMark_03_LineFix.brlan", "G_lineFix_01"}, + { "drawMark_03_LineFix.brlan", "G_lineFix_02"}, + { "drawMark_03_LineFix.brlan", "G_lineFix_03"}, + { "drawMark_03_LineFix.brlan", "G_lineFix_04"}, + { "drawMark_03_LineFix.brlan", "G_lineFix_05"}, + { "drawMark_03_complete.brlan", "G_complete_00"}, +}; + +static const char *sPaneNamesVariant03[] = { + "N_start_00", "N_start_01", "N_start_02", "N_start_03", "N_start_04", "N_start_05", "N_end_01", + "N_end_02", "N_end_03", "N_end_04", "N_end_05", "N_end_06", "N_ringAll_00", +}; + +void dLytDrawMark_c::buildVariant03() { + void *data = LayoutArcManager::GetInstance()->getLoadedData("DrawMark_03"); + mResAcc.attach(data, ""); + mLyt.setResAcc(&mResAcc); + mLyt.build("drawMark_03.brlyt", nullptr); + for (int i = 0; i < DRAW_MARK_NUM_ANIMS; i++) { + if (brlanMapVariant03[i].mFile[0] == '\0') { + mAnmCtrlInUse[i] = false; + } else { + mAnmCtrlInUse[i] = true; + mAnm[i].init(brlanMapVariant03[i].mFile, &mResAcc, mLyt.getLayout(), brlanMapVariant03[i].mName); + mAnm[i].bind(false); + mAnm[i].setAnimEnable(false); + } + } + + for (int i = 0; i < DRAW_MARK_NUM_PANES; i++) { + if (sPaneNamesVariant03[i] != nullptr) { + mpPanes[i] = mLyt.findPane(sPaneNamesVariant03[i]); + } else { + mpPanes[i] = nullptr; + } + } +} + +s32 dLytDrawMark_c::getNumLines() const { + if (mVariant == VAR_IMP_2) { + return 4; + } else if (mVariant == VAR_IMP_3) { + return 6; + } else { + return 3; + } +} |
