update to cursor work (#45)

This commit is contained in:
robojumper
2024-10-26 04:03:54 +02:00
committed by GitHub
parent 5995604387
commit 532afc7b2a
6 changed files with 189 additions and 92 deletions
+144 -58
View File
@@ -1,15 +1,15 @@
#include "d/lyt/d_lyt_common_arrow.h"
#include "d/d_cs_base.h"
#include "d/lyt/d_structd.h"
#include "rvl/MTX/mtx.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
STATE_DEFINE(dLytCommonArrow_c, None);
STATE_DEFINE(dLytCommonArrow_c, In);
STATE_DEFINE(dLytCommonArrow_c, Wait);
STATE_DEFINE(dLytCommonArrow_c, Out);
f32 arrow_fs[0x20];
static const d2d::LytBrlanMapping brlanMap[] = {
{ "commonArrow_00_in.brlan", "G_inOut_00"},
{ "commonArrow_00_loop.brlan", "G_loop_00"},
@@ -22,6 +22,19 @@ static const d2d::LytBrlanMapping brlanMap[] = {
{ "commonArrow_00_out.brlan", "G_inOut_00"},
};
#define ANIM_IN 0
#define ANIM_LOOP 1
#define ANIM_TYPE 2
#define ANIM_ONOFF_L 3
#define ANIM_ONOFF_R 4
#define ANIM_DECIDE_OFFSET 5
#define ANIM_DECIDE_L 5
#define ANIM_DECIDE_R 6
#define ANIM_INPUT 7
#define ANIM_OUT 8
dLytCommonArrow_c::dLytCommonArrow_c() : mStateMgr(*this, sStateID::null) {}
bool dLytCommonArrow_c::init() {
@@ -31,22 +44,22 @@ bool dLytCommonArrow_c::init() {
mLytBase.mPriority = 0x86;
for (int i = 0; i < 9; i++) {
field_0x440[i].init(brlanMap[i].mFile, &mResAcc, mLytBase.getLayout(), brlanMap[i].mName);
mAnmGroups[i].init(brlanMap[i].mFile, &mResAcc, mLytBase.getLayout(), brlanMap[i].mName);
}
field_0x680.fn_80065E70(mLytBase.getLayout()->GetRootPane(), 1, 0, 0);
d2d::dLytStructDList::sInstance->appendToList2(&field_0x680);
field_0x6A8 = mLytBase.findBounding("B_arrowL_00");
field_0x6AC = mLytBase.findBounding("B_arrowR_00");
mStructD.fn_80065E70(mLytBase.getLayout()->GetRootPane(), 1, 0, 0);
d2d::dLytStructDList::sInstance->appendToList2(&mStructD);
mBoundingL = mLytBase.findBounding("B_arrowL_00");
mBoundingR = mLytBase.findBounding("B_arrowR_00");
mStateMgr.changeState(StateID_None);
setState(0);
return true;
}
bool dLytCommonArrow_c::fn_80168490() {
d2d::dLytStructDList::sInstance->removeFromList2(&field_0x680);
d2d::dLytStructDList::sInstance->removeFromList2(&mStructD);
mLytBase.unbindAnims();
for (int i = 0; i < 9; i++) {
field_0x440[i].afterUnbind();
mAnmGroups[i].afterUnbind();
}
return true;
}
@@ -54,11 +67,11 @@ bool dLytCommonArrow_c::fn_80168490() {
bool dLytCommonArrow_c::fn_80168500() {
mStateMgr.executeState();
if (!mStateMgr.getStateID()->isEqual(StateID_None)) {
field_0x440[1].play();
mAnmGroups[ANIM_LOOP].play();
}
mLytBase.calc();
field_0x680.field_0x22 = 0;
field_0x680.fn_80065F70();
mStructD.field_0x22 = 0;
mStructD.fn_80065F70();
field_0x6BC = field_0x6B8;
return true;
}
@@ -71,7 +84,7 @@ bool dLytCommonArrow_c::addToDrawList() {
}
void dLytCommonArrow_c::setState(s32 state) {
field_0x6B0 = state;
mType = state;
if (state == 0) {
mLytBase.mPriority = 0x86;
} else {
@@ -79,24 +92,25 @@ void dLytCommonArrow_c::setState(s32 state) {
}
}
void dLytCommonArrow_c::fn_80168640(f32 *arg) {
// TODO
mLytBase.getLayout()->GetRootPane()->SetTranslate(nw4r::math::VEC3(arg[0], arg[1], 0.0f));
void dLytCommonArrow_c::setTranslate(const Vec *arg) {
nw4r::math::VEC3 v(*arg);
v.z = 0.0f;
mLytBase.getLayout()->GetRootPane()->SetTranslate(v);
}
bool dLytCommonArrow_c::fn_80168680() {
bool dLytCommonArrow_c::requestIn() {
if (!mStateMgr.getStateID()->isEqual(StateID_None)) {
return false;
}
field_0x6C8 = 1;
mInRequested = 1;
return true;
}
bool dLytCommonArrow_c::fn_801686F0() {
bool dLytCommonArrow_c::requestOut() {
if (!mStateMgr.getStateID()->isEqual(StateID_Wait)) {
return false;
}
field_0x6C9 = 1;
mOutRequested = 1;
return true;
}
@@ -108,13 +122,13 @@ bool dLytCommonArrow_c::fn_80168760() {
return false;
}
void dLytCommonArrow_c::fn_80168790(s32 idx, f32 frame) {
d2d::AnmGroup_c *s = &field_0x440[idx];
void dLytCommonArrow_c::displayElement(s32 idx, f32 frame) {
d2d::AnmGroup_c *s = &mAnmGroups[idx];
s->setFrameAndControlThings(frame);
}
void dLytCommonArrow_c::fn_80168800(s32 idx) {
field_0x440[idx].unbind();
mAnmGroups[idx].unbind();
}
void dLytCommonArrow_c::fn_80168810(d2d::AnmGroup_c *ctrl) {
@@ -127,50 +141,73 @@ void dLytCommonArrow_c::fn_80168810(d2d::AnmGroup_c *ctrl) {
}
}
void dLytCommonArrow_c::fn_80168880() {}
extern "C" u8 lbl_80572D10;
void dLytCommonArrow_c::fn_80168880() {
int i = -1;
if (lbl_80572D10 == 0) {
field_0x6B4 = 2;
return;
}
d2d::dLytStructD *thing = dCsBase_c::sInstance->getUnk();
if (thing != nullptr && thing->getType() == 'lyt ') {
if (thing->field_0x24 == mBoundingL) {
i = 0;
} else if (thing->field_0x24 == mBoundingR) {
i = 1;
}
}
if (i >= 0) {
field_0x6B4 = i;
} else {
field_0x6B4 = 2;
}
}
void dLytCommonArrow_c::initializeState_None() {
mLytBase.unbindAnims();
field_0x6C8 = 0;
field_0x6C9 = 0;
mInRequested = 0;
mOutRequested = 0;
field_0x6CA = 0;
field_0x6CB = 0;
field_0x6B4 = 2;
field_0x6B8 = 2;
field_0x6BC = 2;
field_0x6C0 = 2;
field_0x6C4 = 0;
fn_80168790(0, 0.0f);
mTimer = 0;
displayElement(ANIM_IN, 0.0f);
field_0x6CC = 1;
}
void dLytCommonArrow_c::executeState_None() {
if (field_0x6C8 == 1) {
if (mInRequested == 1) {
mStateMgr.changeState(StateID_In);
}
}
void dLytCommonArrow_c::finalizeState_None() {
field_0x6C8 = 0;
fn_80168790(1, 0.0f);
mInRequested = 0;
displayElement(ANIM_LOOP, 0.0f);
}
void dLytCommonArrow_c::initializeState_In() {
field_0x6C4 = 0;
mTimer = 0;
field_0x6CB = 1;
f32 tmp = 0.0f;
if (field_0x6B0 == 1) {
tmp = 1.0f;
f32 anmType = 0.0f;
if (mType == 1) {
anmType = 1.0f;
}
fn_80168790(2, tmp);
fn_80168790(3, 0.0f);
fn_80168790(4, 0.0f);
fn_80168790(7, 0.0f);
displayElement(ANIM_TYPE, anmType);
displayElement(ANIM_ONOFF_L, 0.0f);
displayElement(ANIM_ONOFF_R, 0.0f);
displayElement(ANIM_INPUT, 0.0f);
}
void dLytCommonArrow_c::executeState_In() {
switch (field_0x6C4) {
switch (mTimer) {
case 0: {
d2d::AnmGroup_c *s = &field_0x440[0];
d2d::AnmGroup_c *s = &mAnmGroups[ANIM_IN];
if (s->isEndReached() == 1) {
field_0x6C4 += 1;
mTimer += 1;
field_0x6CA = 1;
} else {
s->play();
@@ -183,43 +220,92 @@ void dLytCommonArrow_c::executeState_In() {
}
}
void dLytCommonArrow_c::finalizeState_In() {
fn_80168800(0);
fn_80168800(ANIM_IN);
}
void dLytCommonArrow_c::initializeState_Wait() {
field_0x6C4 = 0;
mTimer = 0;
}
extern "C" void SmallSoundManager__playSound(void *, u32);
extern "C" void *SOUND_EFFECT_SOUND_MGR;
void dLytCommonArrow_c::executeState_Wait() {
if (field_0x6C9 == 1) {
if (mOutRequested == 1) {
mStateMgr.changeState(StateID_Out);
return;
}
fn_80168880();
if (field_0x6B8 == 0) {
field_0x440[3].play();
fn_80168810(&field_0x440[4]);
d2d::AnmGroup_c &g = mAnmGroups[ANIM_ONOFF_L];
g.play();
fn_80168810(&mAnmGroups[ANIM_ONOFF_R]);
} else if (field_0x6B8 == 1) {
field_0x440[4].play();
fn_80168810(&field_0x440[3]);
d2d::AnmGroup_c &g = mAnmGroups[ANIM_ONOFF_R];
g.play();
fn_80168810(&mAnmGroups[ANIM_ONOFF_L]);
} else {
fn_80168810(&field_0x440[3]);
fn_80168810(&field_0x440[4]);
fn_80168810(&mAnmGroups[ANIM_ONOFF_L]);
fn_80168810(&mAnmGroups[ANIM_ONOFF_R]);
}
d2d::AnmGroup_c &g2 = mAnmGroups[ANIM_INPUT];
if (field_0x6CC != 0) {
fn_80168810(&g2);
} else {
g2.play();
}
switch (mTimer) {
case 0:
if (field_0x6C0 != 2) {
displayElement(field_0x6C0 + ANIM_DECIDE_OFFSET, 0.0f);
if (field_0x6C0 == 0) {
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x142D);
} else {
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x142E);
}
mTimer++;
}
break;
case 1: {
d2d::AnmGroup_c &g = mAnmGroups[field_0x6C0 + ANIM_DECIDE_OFFSET];
if (g.isEndReached() == true) {
mTimer++;
field_0x6CA = 1;
}
g.play();
} break;
case 2:
fn_80168800(field_0x6C0 + ANIM_DECIDE_OFFSET);
mTimer = 0;
field_0x6CA = 0;
field_0x6C0 = 2;
break;
}
if (field_0x6BC != field_0x6B8 && field_0x6B8 != 2) {
if (field_0x6B8 == 0) {
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x142B);
} else {
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x142C);
}
}
}
void dLytCommonArrow_c::finalizeState_Wait() {}
void dLytCommonArrow_c::initializeState_Out() {
field_0x6C4 = 0;
fn_80168790(8, 0.0f);
field_0x6C9 = 0;
mTimer = 0;
displayElement(ANIM_OUT, 0.0f);
mOutRequested = 0;
}
void dLytCommonArrow_c::executeState_Out() {
switch (field_0x6C4) {
switch (mTimer) {
case 0: {
d2d::AnmGroup_c *s = &field_0x440[8];
d2d::AnmGroup_c *s = &mAnmGroups[ANIM_OUT];
if (s->isEndReached() == 1) {
field_0x6C4 = 1;
mTimer = 1;
field_0x6CA = 1;
}
s->play();