mirror of
https://github.com/zeldaret/ss
synced 2026-06-11 05:08:16 -04:00
d_lyt_note OK (#129)
This commit is contained in:
@@ -409,10 +409,10 @@ d/lyt/d_lyt_msg_window_select_btn.cpp:
|
||||
.ctors start:0x804DB73C end:0x804DB740
|
||||
|
||||
d/lyt/d_lyt_msg_window_base.cpp:
|
||||
.text start:0x80120A20 end:0x80120A98
|
||||
.text start:0x80120A20 end:0x80121068
|
||||
|
||||
d/lyt/d_lyt_msg_window_talk.cpp:
|
||||
.text start:0x80120AA0 end:0x801223C8
|
||||
.text start:0x80121070 end:0x801223C8
|
||||
.ctors start:0x804DB740 end:0x804DB744
|
||||
|
||||
d/lyt/d_lyt_msg_window_link.cpp:
|
||||
|
||||
@@ -8190,11 +8190,11 @@ executeState_Out__10dLytNote_cFv = .text:0x80149260; // type:function size:0x100
|
||||
finalizeState_Out__10dLytNote_cFv = .text:0x80149360; // type:function size:0x4
|
||||
build__10dLytNote_cFPQ23d2d10ResAccIf_c = .text:0x80149370; // type:function size:0x144
|
||||
remove__10dLytNote_cFv = .text:0x801494C0; // type:function size:0x50
|
||||
execute__10dLytNote_cFv = .text:0x80149510; // type:function size:0x124
|
||||
fn_80149640 = .text:0x80149640; // type:function size:0x10
|
||||
fn_80149650 = .text:0x80149650; // type:function size:0x10
|
||||
execute__10dLytNote_cFUc = .text:0x80149510; // type:function size:0x124
|
||||
getStateID__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80149640; // type:function size:0x10
|
||||
executeState__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80149650; // type:function size:0x10
|
||||
draw__10dLytNote_cFv = .text:0x80149660; // type:function size:0x8
|
||||
fn_80149670 = .text:0x80149670; // type:function size:0x8C
|
||||
setTransform__10dLytNote_cFRQ34nw4r3lyt4Pane = .text:0x80149670; // type:function size:0x8C
|
||||
getField0x260__10dLytNote_cCFv = .text:0x80149700; // type:function size:0x8
|
||||
setFrame__10dLytNote_cFf = .text:0x80149710; // type:function size:0x58
|
||||
finalizeState__25sFStateID_c<10dLytNote_c>CFR10dLytNote_c = .text:0x80149770; // type:function size:0x30
|
||||
|
||||
+1
-1
@@ -417,7 +417,7 @@ config.libs = [
|
||||
Object(NonMatching, "d/lyt/d_lyt_auto_explain.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_map_capture.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_map.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_note.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_note.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_battery.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_area_caption.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_wipe.cpp"),
|
||||
|
||||
@@ -201,6 +201,10 @@ struct AnmGroupBase_c {
|
||||
syncAnmFrame();
|
||||
}
|
||||
|
||||
inline f32 getEndFrameRaw() const {
|
||||
return mpFrameCtrl->getEndFrameRaw();
|
||||
}
|
||||
|
||||
inline f32 getFrame() const {
|
||||
return mpFrameCtrl->getFrame();
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
// size 0x27C
|
||||
class dLytNote_c {
|
||||
@@ -13,9 +12,11 @@ public:
|
||||
|
||||
bool build(d2d::ResAccIf_c *);
|
||||
bool remove();
|
||||
void execute();
|
||||
void execute(u8 alpha);
|
||||
void draw();
|
||||
|
||||
void setTransform(nw4r::lyt::Pane &p);
|
||||
|
||||
f32 getField0x260() const;
|
||||
void setFrame(f32);
|
||||
|
||||
@@ -25,15 +26,15 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytNote_c, Move);
|
||||
STATE_FUNC_DECLARE(dLytNote_c, Out);
|
||||
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytNote_c);
|
||||
/* 0x004 */ STATE_MGR_DECLARE(dLytNote_c);
|
||||
/* 0x040 */ d2d::LytBase_c mLyt;
|
||||
/* 0x0D0 */ d2d::AnmGroup_c mAnmGroups[6];
|
||||
/* 0x250 */ nw4r::lyt::Pane *mpPane;
|
||||
/* 0x254 */ mVec3_c mTranslate;
|
||||
/* 0x260 */ f32 field_0x260;
|
||||
/* 0x264 */ u32 field_0x264;
|
||||
/* 0x268 */ s32 field_0x268;
|
||||
/* 0x26C */ u32 field_0x26C;
|
||||
/* 0x264 */ s32 mOutAnim;
|
||||
/* 0x268 */ s32 mInAnim;
|
||||
/* 0x26C */ s32 field_0x26C;
|
||||
/* 0x270 */ u8 field_0x270;
|
||||
/* 0x271 */ u8 field_0x271;
|
||||
/* 0x272 */ u8 field_0x272;
|
||||
|
||||
@@ -105,6 +105,10 @@ public:
|
||||
return f >= end ? 0.0f : f;
|
||||
}
|
||||
|
||||
inline f32 getEndFrameRaw() const {
|
||||
return mEndFrame;
|
||||
}
|
||||
|
||||
private:
|
||||
inline bool notLooping() const {
|
||||
return (mFlags & FLAG_NO_LOOP) != 0;
|
||||
|
||||
@@ -160,7 +160,7 @@ public:
|
||||
protected:
|
||||
Pane *mpParent; // at 0x0C
|
||||
ut::LinkList<Pane, 4> mChildList; // at 0x10
|
||||
ut::LinkList<AnimationLink, 0> mAnimList; // at 0x1C;
|
||||
ut::LinkList<AnimationLink, 0> mAnimList; // at 0x1C
|
||||
Material *mpMaterial; // at 0x28
|
||||
math::VEC3 mTranslate; // at 0x2C
|
||||
math::VEC3 mRotate; // at 0x38
|
||||
|
||||
+146
-33
@@ -1,34 +1,15 @@
|
||||
#include "d/lyt/d_lyt_note.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "nw4r/math/math_types.h"
|
||||
|
||||
STATE_DEFINE(dLytNote_c, Wait);
|
||||
STATE_DEFINE(dLytNote_c, In);
|
||||
STATE_DEFINE(dLytNote_c, Move);
|
||||
STATE_DEFINE(dLytNote_c, Out);
|
||||
|
||||
void dLytNote_c::initializeState_Wait() {
|
||||
field_0x273 = 0;
|
||||
}
|
||||
void dLytNote_c::executeState_Wait() {
|
||||
if (field_0x270 != 0) {
|
||||
mStateMgr.changeState(StateID_In);
|
||||
}
|
||||
}
|
||||
void dLytNote_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytNote_c::initializeState_In() {}
|
||||
void dLytNote_c::executeState_In() {}
|
||||
void dLytNote_c::finalizeState_In() {}
|
||||
|
||||
void dLytNote_c::initializeState_Move() {
|
||||
field_0x273 = 1;
|
||||
}
|
||||
void dLytNote_c::executeState_Move() {}
|
||||
void dLytNote_c::finalizeState_Move() {}
|
||||
|
||||
void dLytNote_c::initializeState_Out() {}
|
||||
void dLytNote_c::executeState_Out() {}
|
||||
void dLytNote_c::finalizeState_Out() {}
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "suiryuScore_00_noteGet.brlan", "G_mark_00"},
|
||||
{ "suiryuScore_00_noteGetLoop.brlan", "G_mark_00"},
|
||||
@@ -44,6 +25,116 @@ static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
#define NOTE_ANIM_LOST 3
|
||||
#define NOTE_ANIM_FIX 4
|
||||
#define NOTE_ANIM_COLOR 5
|
||||
#define NOTE_ANIM_INVALID 6
|
||||
|
||||
void dLytNote_c::initializeState_Wait() {
|
||||
field_0x273 = 0;
|
||||
}
|
||||
|
||||
void dLytNote_c::executeState_Wait() {
|
||||
if (field_0x270 != 0) {
|
||||
mStateMgr.changeState(StateID_In);
|
||||
}
|
||||
}
|
||||
|
||||
void dLytNote_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytNote_c::initializeState_In() {
|
||||
field_0x274 = 0;
|
||||
mpPane->SetVisible(true);
|
||||
mAnmGroups[NOTE_ANIM_GET].setAnimEnable(true);
|
||||
mAnmGroups[NOTE_ANIM_GET].setFrame(0.0f);
|
||||
}
|
||||
|
||||
void dLytNote_c::executeState_In() {
|
||||
if (field_0x270 == 0) {
|
||||
mAnmGroups[NOTE_ANIM_GET].setToEnd();
|
||||
mAnmGroups[NOTE_ANIM_GET].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Out);
|
||||
} else if (mAnmGroups[NOTE_ANIM_GET].isEndReached()) {
|
||||
mAnmGroups[NOTE_ANIM_GET].setAnimEnable(false);
|
||||
field_0x260 = 0.0f;
|
||||
mInAnim = NOTE_ANIM_GET_LOOP;
|
||||
mAnmGroups[mInAnim].setAnimEnable(true);
|
||||
mAnmGroups[mInAnim].setFrame(0.0f);
|
||||
mStateMgr.changeState(StateID_Move);
|
||||
}
|
||||
|
||||
if (mAnmGroups[NOTE_ANIM_GET].isFlag2()) {
|
||||
mAnmGroups[NOTE_ANIM_GET].play();
|
||||
}
|
||||
}
|
||||
|
||||
void dLytNote_c::finalizeState_In() {}
|
||||
|
||||
void dLytNote_c::initializeState_Move() {
|
||||
field_0x273 = 1;
|
||||
}
|
||||
|
||||
void dLytNote_c::executeState_Move() {
|
||||
if (field_0x270 == 0) {
|
||||
mAnmGroups[mInAnim].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Out);
|
||||
} else if (field_0x272 != 0 && mInAnim == NOTE_ANIM_GET_LOOP) {
|
||||
mAnmGroups[mInAnim].setAnimEnable(false);
|
||||
field_0x260 = 0.0f;
|
||||
mInAnim = NOTE_ANIM_LOST_LOOP;
|
||||
// Maybe an inline?
|
||||
f32 progress = mAnmGroups[mInAnim].getEndFrameRaw();
|
||||
f32 nul = 0.0f;
|
||||
if (nul >= progress) {
|
||||
field_0x260 = nul - progress;
|
||||
}
|
||||
mAnmGroups[mInAnim].setFrame(field_0x260);
|
||||
mAnmGroups[mInAnim].setAnimEnable(true);
|
||||
} else {
|
||||
if (field_0x272 == 0 && mInAnim == NOTE_ANIM_LOST_LOOP) {
|
||||
mAnmGroups[mInAnim].setAnimEnable(false);
|
||||
field_0x260 = 0.0f;
|
||||
mInAnim = NOTE_ANIM_GET_LOOP;
|
||||
// Maybe an inline?
|
||||
f32 progress = mAnmGroups[mInAnim].getEndFrameRaw();
|
||||
f32 nul = 0.0f;
|
||||
if (nul >= progress) {
|
||||
field_0x260 = nul - progress;
|
||||
}
|
||||
mAnmGroups[mInAnim].setFrame(field_0x260);
|
||||
mAnmGroups[mInAnim].setAnimEnable(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dLytNote_c::finalizeState_Move() {}
|
||||
|
||||
void dLytNote_c::initializeState_Out() {
|
||||
mInAnim = NOTE_ANIM_INVALID;
|
||||
field_0x273 = 0;
|
||||
if (field_0x271) {
|
||||
mOutAnim = NOTE_ANIM_FIX;
|
||||
} else {
|
||||
mOutAnim = NOTE_ANIM_LOST;
|
||||
}
|
||||
mAnmGroups[mOutAnim].setAnimEnable(true);
|
||||
mAnmGroups[mOutAnim].setFrame(0.0f);
|
||||
}
|
||||
|
||||
void dLytNote_c::executeState_Out() {
|
||||
if (field_0x274 != 0) {
|
||||
mAnmGroups[mOutAnim].setToEnd();
|
||||
}
|
||||
|
||||
if (mAnmGroups[mOutAnim].isEndReached()) {
|
||||
mAnmGroups[mOutAnim].setAnimEnable(false);
|
||||
mpPane->SetVisible(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
if (mAnmGroups[mOutAnim].isFlag2()) {
|
||||
mAnmGroups[mOutAnim].play();
|
||||
}
|
||||
}
|
||||
|
||||
void dLytNote_c::finalizeState_Out() {}
|
||||
|
||||
bool dLytNote_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
@@ -59,11 +150,10 @@ bool dLytNote_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
static const char *sPaneName = "N_inOutAll_00";
|
||||
mpPane = mLyt.findPane(sPaneName);
|
||||
mpPane->SetVisible(false);
|
||||
// FPR Regswap
|
||||
const nw4r::math::VEC3 &translate = mpPane->GetTranslate();
|
||||
mTranslate.set(translate.x, translate.y, translate.z);
|
||||
field_0x268 = 6;
|
||||
field_0x264 = 4;
|
||||
mTranslate.copyFrom(translate);
|
||||
mInAnim = NOTE_ANIM_INVALID;
|
||||
mOutAnim = NOTE_ANIM_FIX;
|
||||
field_0x260 = 0.0f;
|
||||
field_0x270 = 0;
|
||||
field_0x271 = 0;
|
||||
@@ -83,22 +173,45 @@ bool dLytNote_c::remove() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void dLytNote_c::execute() {
|
||||
// TODO
|
||||
void dLytNote_c::execute(u8 alpha) {
|
||||
mStateMgr.executeState();
|
||||
if (*mStateMgr.getStateID() != StateID_Wait) {
|
||||
mpPane->SetTranslate(mTranslate);
|
||||
mAnmGroups[NOTE_ANIM_COLOR].setFrame(field_0x26C);
|
||||
mpPane->SetAlpha(alpha);
|
||||
mLyt.calc();
|
||||
}
|
||||
|
||||
if (mInAnim != NOTE_ANIM_INVALID) {
|
||||
field_0x260 += 1.0f;
|
||||
f32 nextFrame = mAnmGroups[mInAnim].getEndFrameRaw();
|
||||
if (field_0x260 >= nextFrame) {
|
||||
field_0x260 -= nextFrame;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dLytNote_c::draw() {
|
||||
mLyt.addToDrawList();
|
||||
}
|
||||
|
||||
void dLytNote_c::setTransform(nw4r::lyt::Pane &p) {
|
||||
// Cool, full on struct copy here
|
||||
nw4r::math::MTX34 myMtx = p.GetGlobalMtx();
|
||||
mTranslate.x = myMtx.m[0][3];
|
||||
mTranslate.y = myMtx.m[1][3];
|
||||
mTranslate.z = 0.0f;
|
||||
}
|
||||
|
||||
f32 dLytNote_c::getField0x260() const {
|
||||
return field_0x260;
|
||||
}
|
||||
|
||||
void dLytNote_c::setFrame(f32 arg) {
|
||||
if (field_0x268 != 6) {
|
||||
// mysterious frsp here
|
||||
if (mInAnim != 6) {
|
||||
field_0x260 = arg;
|
||||
mAnmGroups[field_0x268].setFrame(arg);
|
||||
// ???
|
||||
f32 newArg = (f64)arg;
|
||||
mAnmGroups[mInAnim].setFrame(newArg);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user