d_lyt_meter_key OK

This commit is contained in:
robojumper
2025-04-16 20:45:35 +02:00
parent 568268a9a8
commit 2d4c0f0468
7 changed files with 374 additions and 64 deletions
+302 -12
View File
@@ -3,6 +3,7 @@
#include "c/c_lib.h"
#include "common.h"
#include "d/a/d_a_item.h"
#include "d/d_stage_mgr.h"
#include "d/lyt/d2d.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"
@@ -207,34 +208,323 @@ void dLytMeterKakeraKey_c::setPosition(s32 position) {
mMovementFrame = 0;
}
static const d2d::LytBrlanMapping brlanMapBoss[] = {
{ "keyBoss_00_in.brlan", "G_inOut_00"},
{ "keyBoss_00_out.brlan", "G_inOut_00"},
{ "keyBoss_00_keyBoss.brlan", "G_keyBoss_00"},
{ "keyBoss_00_loop.brlan", "G_loop_00"},
{"keyBoss_00_position.brlan", "G_position_00"},
};
#define KEY_BOSS_ANIM_IN 0
#define KEY_BOSS_ANIM_OUT 1
#define KEY_BOSS_ANIM_KEYBOSS 2
#define KEY_BOSS_ANIM_LOOP 3
#define KEY_BOSS_ANIM_POSITION 4
#define KEY_BOSS_NUM_ANIMS 5
void dLytMeterBossKey_c::initializeState_Wait() {}
void dLytMeterBossKey_c::executeState_Wait() {}
void dLytMeterBossKey_c::executeState_Wait() {
if (mShouldBeVisible) {
mStateMgr.changeState(StateID_On);
}
}
void dLytMeterBossKey_c::finalizeState_Wait() {}
void dLytMeterBossKey_c::initializeState_On() {}
void dLytMeterBossKey_c::executeState_On() {}
void dLytMeterBossKey_c::initializeState_On() {
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(true);
mAnm[KEY_BOSS_ANIM_IN].setFrame(0.0f);
}
void dLytMeterBossKey_c::executeState_On() {
if (mAnm[KEY_BOSS_ANIM_IN].isEndReached()) {
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterBossKey_c::finalizeState_On() {}
void dLytMeterBossKey_c::initializeState_Active() {}
void dLytMeterBossKey_c::executeState_Active() {}
void dLytMeterBossKey_c::executeState_Active() {
if (!mShouldBeVisible) {
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterBossKey_c::finalizeState_Active() {}
void dLytMeterBossKey_c::initializeState_Off() {}
void dLytMeterBossKey_c::executeState_Off() {}
void dLytMeterBossKey_c::initializeState_Off() {
mAnm[KEY_BOSS_ANIM_OUT].setAnimEnable(true);
mAnm[KEY_BOSS_ANIM_OUT].setFrame(0.0f);
}
void dLytMeterBossKey_c::executeState_Off() {
if (mAnm[KEY_BOSS_ANIM_OUT].isEndReached()) {
mAnm[KEY_BOSS_ANIM_OUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterBossKey_c::finalizeState_Off() {}
bool dLytMeterBossKey_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("keyBoss_00.brlyt", nullptr);
for (int i = 0; i < KEY_BOSS_NUM_ANIMS; i++) {
mAnm[i].init(brlanMapBoss[i].mFile, resAcc, mLyt.getLayout(), brlanMapBoss[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mAnm[KEY_BOSS_ANIM_LOOP].setAnimEnable(true);
mpPane = mLyt.findPane("N_keyBoss_00");
mAnm[KEY_BOSS_ANIM_POSITION].setAnimEnable(true);
for (int i = 0; i < 4; i++) {
mAnm[KEY_BOSS_ANIM_POSITION].setFrame(i);
mLyt.calc();
mPanePositions[i].copyFrom(mLyt.findPane("N_keyPosition_00")->GetTranslate());
}
mAnm[KEY_BOSS_ANIM_POSITION].setAnimEnable(false);
mPosititionIndex = 1;
mOldPosititionIndex = 1;
mMovementFrame = 0;
mPosition.copyFrom(mPanePositions[mPosititionIndex]);
mShouldBeVisible = 0;
mpPane->SetTranslate(mPosition);
mAnm[KEY_BOSS_ANIM_IN].setFrame(0.0f);
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(true);
f32 frame = 0.0f;
if (dStageMgr_c::GetInstance()->getMapNameId() == 11) {
frame = 0.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 14) {
frame = 1.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 12) {
frame = 2.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 16) {
frame = 3.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 13) {
frame = 4.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 15) {
frame = 5.0f;
}
mAnm[KEY_BOSS_ANIM_KEYBOSS].setAnimEnable(true);
mAnm[KEY_BOSS_ANIM_KEYBOSS].setFrame(frame);
mLyt.getLayout()->Animate(0);
mLyt.calc();
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(false);
mAnm[KEY_BOSS_ANIM_KEYBOSS].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterBossKey_c::remove() {
for (int i = 0; i < KEY_BOSS_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
bool dLytMeterBossKey_c::execute() {
mStateMgr.executeState();
if (mPosition != mPanePositions[mPosititionIndex]) {
if (mMovementFrame < 5) {
mPosition = (mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex]) *
cLib::easeOut(++mMovementFrame / 5.0f, 3.0f) +
mPanePositions[mOldPosititionIndex];
} else {
mMovementFrame = 0;
mPosition = mPanePositions[mPosititionIndex];
}
mpPane->SetTranslate(mPosition);
}
for (int i = 0; i < KEY_BOSS_NUM_ANIMS; i++) {
if (mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
return true;
}
bool dLytMeterBossKey_c::draw() {
mLyt.addToDrawList();
return true;
}
void dLytMeterBossKey_c::setPosition(s32 position) {
if (mPosititionIndex == position) {
return;
}
mOldPosititionIndex = mPosititionIndex;
mPosititionIndex = position;
mMovementFrame = 0;
}
static const d2d::LytBrlanMapping brlanMapSmall[] = {
{ "keySmall_00_in.brlan", "G_inOut_00"},
{ "keySmall_00_out.brlan", "G_inOut_00"},
{"keySmall_00_keySmall.brlan", "G_keySmall_00"},
{ "keySmall_00_loop.brlan", "G_loop_00"},
{"keySmall_00_position.brlan", "G_position_00"},
};
#define KEY_SMALL_ANIM_IN 0
#define KEY_SMALL_ANIM_OUT 1
#define KEY_SMALL_ANIM_KEYSMALL 2
#define KEY_SMALL_ANIM_LOOP 3
#define KEY_SMALL_ANIM_POSITION 4
#define KEY_SMALL_NUM_ANIMS 5
void dLytMeterSmallKey_c::initializeState_Wait() {}
void dLytMeterSmallKey_c::executeState_Wait() {}
void dLytMeterSmallKey_c::executeState_Wait() {
if (mShouldBeVisible && dAcItem_c::getSmallKeyCount() != 0) {
mStateMgr.changeState(StateID_On);
}
}
void dLytMeterSmallKey_c::finalizeState_Wait() {}
void dLytMeterSmallKey_c::initializeState_On() {}
void dLytMeterSmallKey_c::executeState_On() {}
void dLytMeterSmallKey_c::initializeState_On() {
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(true);
mAnm[KEY_SMALL_ANIM_IN].setToEnd();
mSavedSmallKeyCount = dAcItem_c::getSmallKeyCount();
if (mSavedSmallKeyCount > 0 && mSavedSmallKeyCount <= 5) {
mAnm[KEY_SMALL_ANIM_KEYSMALL].setFrame(mSavedSmallKeyCount - 1);
}
mAnm[KEY_SMALL_ANIM_IN].setFrame(0.0f);
}
void dLytMeterSmallKey_c::executeState_On() {
if (mAnm[KEY_SMALL_ANIM_IN].isEndReached()) {
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterSmallKey_c::finalizeState_On() {}
void dLytMeterSmallKey_c::initializeState_Active() {}
void dLytMeterSmallKey_c::executeState_Active() {}
void dLytMeterSmallKey_c::executeState_Active() {
if (mSavedSmallKeyCount != dAcItem_c::getSmallKeyCount()) {
mSavedSmallKeyCount = dAcItem_c::getSmallKeyCount();
if (mSavedSmallKeyCount > 0 && mSavedSmallKeyCount <= 5) {
mAnm[KEY_SMALL_ANIM_KEYSMALL].setFrame(mSavedSmallKeyCount - 1);
}
}
if (!mShouldBeVisible || dAcItem_c::getSmallKeyCount() == 0) {
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterSmallKey_c::finalizeState_Active() {}
void dLytMeterSmallKey_c::initializeState_Off() {}
void dLytMeterSmallKey_c::executeState_Off() {}
void dLytMeterSmallKey_c::initializeState_Off() {
mAnm[KEY_SMALL_ANIM_OUT].setAnimEnable(true);
mAnm[KEY_SMALL_ANIM_OUT].setFrame(0.0f);
}
void dLytMeterSmallKey_c::executeState_Off() {
if (mAnm[KEY_SMALL_ANIM_OUT].isEndReached()) {
mAnm[KEY_SMALL_ANIM_OUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterSmallKey_c::finalizeState_Off() {}
bool dLytMeterSmallKey_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("keySmall_00.brlyt", nullptr);
for (int i = 0; i < KEY_SMALL_NUM_ANIMS; i++) {
mAnm[i].init(brlanMapSmall[i].mFile, resAcc, mLyt.getLayout(), brlanMapSmall[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mAnm[KEY_SMALL_ANIM_LOOP].setAnimEnable(true);
mAnm[KEY_SMALL_ANIM_KEYSMALL].setAnimEnable(true);
mpPane = mLyt.findPane("N_keyAll_00");
mAnm[KEY_SMALL_ANIM_POSITION].setAnimEnable(true);
for (int i = 0; i < 4; i++) {
mAnm[KEY_SMALL_ANIM_POSITION].setFrame(i);
mLyt.calc();
mPanePositions[i].copyFrom(mLyt.findPane("N_keyPosition_00")->GetTranslate());
}
mAnm[KEY_SMALL_ANIM_POSITION].setAnimEnable(false);
mPosititionIndex = 1;
mOldPosititionIndex = 1;
mMovementFrame = 0;
mPosition.copyFrom(mPanePositions[mPosititionIndex]);
mShouldBeVisible = 0;
mSavedSmallKeyCount = 0;
mpPane->SetTranslate(mPosition);
mAnm[KEY_SMALL_ANIM_IN].setFrame(0.0f);
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(true);
mLyt.calc();
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterSmallKey_c::remove() {
for (int i = 0; i < KEY_SMALL_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
bool dLytMeterSmallKey_c::execute() {
mStateMgr.executeState();
if (mPosition != mPanePositions[mPosititionIndex]) {
if (mMovementFrame < 5) {
mPosition = (mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex]) *
cLib::easeOut(++mMovementFrame / 5.0f, 3.0f) +
mPanePositions[mOldPosititionIndex];
} else {
mMovementFrame = 0;
mPosition = mPanePositions[mPosititionIndex];
}
mpPane->SetTranslate(mPosition);
}
for (int i = 0; i < KEY_SMALL_NUM_ANIMS; i++) {
if (i != KEY_SMALL_ANIM_KEYSMALL && mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
return true;
}
bool dLytMeterSmallKey_c::draw() {
mLyt.addToDrawList();
return true;
}
void dLytMeterSmallKey_c::setPosition(s32 position) {
if (mPosititionIndex == position) {
return;
}
mOldPosititionIndex = mPosititionIndex;
mPosititionIndex = position;
mMovementFrame = 0;
}