mirror of
https://github.com/projectPiki/pikmin2.git
synced 2024-11-23 05:20:06 +00:00
Broke my promise and cleaned
This commit is contained in:
parent
d005c004cd
commit
a868cf6a32
@ -51,6 +51,20 @@ struct CNode {
|
|||||||
setName(name);
|
setName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline CNode* getParent() const { return mParent; }
|
||||||
|
inline CNode* getChild() const { return mChild; }
|
||||||
|
inline CNode* getNext() const { return mNext; }
|
||||||
|
inline CNode* getPrev() const { return mPrev; }
|
||||||
|
inline const char* getName() const { return mName; }
|
||||||
|
|
||||||
|
inline bool isChild() const { return mParent != nullptr; }
|
||||||
|
inline bool isRoot() const { return mParent == nullptr; }
|
||||||
|
|
||||||
|
inline void setParent(CNode* parent) { mParent = parent; }
|
||||||
|
inline void setChild(CNode* child) { mChild = child; }
|
||||||
|
inline void setNext(CNode* next) { mNext = next; }
|
||||||
|
inline void setPrev(CNode* prev) { mPrev = prev; }
|
||||||
|
|
||||||
// _00 vtbl
|
// _00 vtbl
|
||||||
CNode* mNext; // _04
|
CNode* mNext; // _04
|
||||||
CNode* mPrev; // _08
|
CNode* mPrev; // _08
|
||||||
|
@ -41,7 +41,7 @@ enum J3DAnmAttr { J3DAA_UNKNOWN_0 = 0, J3DAA_UNKNOWN_1 = 1, J3DAA_UNKNOWN_2 = 2,
|
|||||||
struct J3DAnmBase {
|
struct J3DAnmBase {
|
||||||
inline J3DAnmBase()
|
inline J3DAnmBase()
|
||||||
: mAttribute(0)
|
: mAttribute(0)
|
||||||
, _05(0)
|
, mUnused(0)
|
||||||
, mTotalFrameCount(0)
|
, mTotalFrameCount(0)
|
||||||
, mCurrentFrame(0.0f)
|
, mCurrentFrame(0.0f)
|
||||||
{
|
{
|
||||||
@ -51,13 +51,13 @@ struct J3DAnmBase {
|
|||||||
virtual J3DAnmKind getKind() const = 0; // _0C
|
virtual J3DAnmKind getKind() const = 0; // _0C
|
||||||
|
|
||||||
u8 getAttribute() const { return mAttribute; }
|
u8 getAttribute() const { return mAttribute; }
|
||||||
s16 getFrameMax() const { return mTotalFrameCount; }
|
s16 getTotalFrameCount() const { return mTotalFrameCount; }
|
||||||
f32 getFrame() const { return mCurrentFrame; }
|
f32 getFrame() const { return mCurrentFrame; }
|
||||||
void setFrame(f32 frame) { mCurrentFrame = frame; }
|
void setFrame(f32 frame) { mCurrentFrame = frame; }
|
||||||
|
|
||||||
// _00 = VTBL
|
// _00 = VTBL
|
||||||
u8 mAttribute; // _04
|
u8 mAttribute; // _04
|
||||||
u8 _05; // _05
|
u8 mUnused; // _05
|
||||||
s16 mTotalFrameCount; // _06
|
s16 mTotalFrameCount; // _06
|
||||||
f32 mCurrentFrame; // _08
|
f32 mCurrentFrame; // _08
|
||||||
};
|
};
|
||||||
|
@ -17,7 +17,7 @@ struct J3DMtxCalc {
|
|||||||
virtual J3DAnmTransform* getAnmTransform() { return nullptr; } // _10
|
virtual J3DAnmTransform* getAnmTransform() { return nullptr; } // _10
|
||||||
virtual void setAnmTransform(u8, J3DAnmTransform*) { } // _14
|
virtual void setAnmTransform(u8, J3DAnmTransform*) { } // _14
|
||||||
virtual J3DAnmTransform* getAnmTransform(u8) { return nullptr; } // _18
|
virtual J3DAnmTransform* getAnmTransform(u8) { return nullptr; } // _18
|
||||||
virtual void setWeight(u8, f32) { } // _1C
|
virtual void setWeight(u8 index, f32 weight) { } // _1C
|
||||||
virtual f32 getWeight(u8) const { return 0.0f; } // _20
|
virtual f32 getWeight(u8) const { return 0.0f; } // _20
|
||||||
virtual void init(const Vec&, const Mtx&) = 0; // _24
|
virtual void init(const Vec&, const Mtx&) = 0; // _24
|
||||||
virtual void calc() = 0; // _28
|
virtual void calc() = 0; // _28
|
||||||
|
@ -10,6 +10,13 @@ namespace Sys {
|
|||||||
* @size{0xC}
|
* @size{0xC}
|
||||||
*/
|
*/
|
||||||
struct MatBaseAnimator {
|
struct MatBaseAnimator {
|
||||||
|
enum State {
|
||||||
|
Playing = 0,
|
||||||
|
AtStart = 1,
|
||||||
|
AtEnd = 2,
|
||||||
|
NoAnimation = 0x8000,
|
||||||
|
};
|
||||||
|
|
||||||
MatBaseAnimator();
|
MatBaseAnimator();
|
||||||
|
|
||||||
virtual void start(MatBaseAnimation* animation); // _08
|
virtual void start(MatBaseAnimation* animation); // _08
|
||||||
@ -29,16 +36,16 @@ struct MatBaseAnimator {
|
|||||||
{
|
{
|
||||||
int state;
|
int state;
|
||||||
if (!mAnimation) {
|
if (!mAnimation) {
|
||||||
state = 0x8000;
|
state = NoAnimation;
|
||||||
} else {
|
} else {
|
||||||
state = 0;
|
state = Playing;
|
||||||
mCurrFrame -= rate;
|
mCurrFrame -= rate;
|
||||||
if (mCurrFrame < 0.0f) {
|
if (mCurrFrame < 0.0f) {
|
||||||
mCurrFrame = 0.0f;
|
mCurrFrame = 0.0f;
|
||||||
state = 1;
|
state = AtStart;
|
||||||
} else if (mCurrFrame >= mAnimation->getFrameMax()) {
|
} else if (mCurrFrame >= mAnimation->getFrameMax()) {
|
||||||
mCurrFrame = mAnimation->getFrameMax();
|
mCurrFrame = mAnimation->getFrameMax();
|
||||||
state = 2;
|
state = AtEnd;
|
||||||
}
|
}
|
||||||
mAnimation->getAnmBase()->setFrame(mCurrFrame);
|
mAnimation->getAnmBase()->setFrame(mCurrFrame);
|
||||||
}
|
}
|
||||||
@ -66,7 +73,7 @@ struct MatRepeatAnimator : public MatBaseAnimator {
|
|||||||
virtual void onStart(); // _0C
|
virtual void onStart(); // _0C
|
||||||
virtual void do_animate(f32); // _10
|
virtual void do_animate(f32); // _10
|
||||||
|
|
||||||
u8 _0C; // _0C
|
u8 mStarted; // _0C
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Sys
|
} // namespace Sys
|
||||||
|
@ -39,7 +39,7 @@ struct Animator : public BaseAnimator {
|
|||||||
{
|
{
|
||||||
return (mAnimInfo != nullptr) ? mAnimInfo->mCalc : nullptr;
|
return (mAnimInfo != nullptr) ? mAnimInfo->mCalc : nullptr;
|
||||||
}
|
}
|
||||||
virtual void animate(f32); // _0C
|
virtual void animate(f32 speed); // _0C
|
||||||
|
|
||||||
void startAnim(int animID, MotionListener* listener);
|
void startAnim(int animID, MotionListener* listener);
|
||||||
void startExAnim(AnimInfo* info);
|
void startExAnim(AnimInfo* info);
|
||||||
|
@ -36,6 +36,10 @@ struct KeyEvent : public CNode {
|
|||||||
virtual ~KeyEvent() { } // _08 (weak)
|
virtual ~KeyEvent() { } // _08 (weak)
|
||||||
|
|
||||||
inline int getFrame() const { return mFrame; }
|
inline int getFrame() const { return mFrame; }
|
||||||
|
inline int getType() const { return mType; }
|
||||||
|
inline s16 getAnimIdx() const { return mAnimIdx; }
|
||||||
|
|
||||||
|
inline bool isEnd() const { return mType == KEYEVENT_END; }
|
||||||
|
|
||||||
int mFrame; // _18
|
int mFrame; // _18
|
||||||
u32 mType; // _1C
|
u32 mType; // _1C
|
||||||
|
@ -55,7 +55,7 @@ J3DUMtxAnmCacheTableBase::~J3DUMtxAnmCacheTableBase()
|
|||||||
J3DUMtxAnmCacheTable::J3DUMtxAnmCacheTable(J3DModel* model, J3DAnmTransform* transform)
|
J3DUMtxAnmCacheTable::J3DUMtxAnmCacheTable(J3DModel* model, J3DAnmTransform* transform)
|
||||||
{
|
{
|
||||||
int jointCount = model->mModelData->getJointNum();
|
int jointCount = model->mModelData->getJointNum();
|
||||||
int frameCount = transform->getFrameMax();
|
int frameCount = transform->getTotalFrameCount();
|
||||||
|
|
||||||
mAnimationFrame = 0;
|
mAnimationFrame = 0;
|
||||||
mJointCount = jointCount;
|
mJointCount = jointCount;
|
||||||
|
@ -35,7 +35,7 @@ void MatBaseAnimation::attachResource(void* resource, J3DModelData* modelData)
|
|||||||
f32 MatBaseAnimation::getFrameMax()
|
f32 MatBaseAnimation::getFrameMax()
|
||||||
{
|
{
|
||||||
P2ASSERTLINE(57, getAnmBase());
|
P2ASSERTLINE(57, getAnmBase());
|
||||||
return getAnmBase()->getFrameMax();
|
return getAnmBase()->getTotalFrameCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -151,16 +151,16 @@ int MatBaseAnimator::forward(f32 rate)
|
|||||||
{
|
{
|
||||||
int state;
|
int state;
|
||||||
if (!mAnimation) {
|
if (!mAnimation) {
|
||||||
state = 0x8000;
|
state = NoAnimation;
|
||||||
} else {
|
} else {
|
||||||
state = 0;
|
state = Playing;
|
||||||
mCurrFrame += rate;
|
mCurrFrame += rate;
|
||||||
if (mCurrFrame < 0.0f) {
|
if (mCurrFrame < 0.0f) {
|
||||||
mCurrFrame = 0.0f;
|
mCurrFrame = 0.0f;
|
||||||
state = 1;
|
state = AtStart;
|
||||||
} else if (mCurrFrame >= mAnimation->getFrameMax()) {
|
} else if (mCurrFrame >= mAnimation->getFrameMax()) {
|
||||||
mCurrFrame = mAnimation->getFrameMax();
|
mCurrFrame = mAnimation->getFrameMax();
|
||||||
state = 2;
|
state = AtEnd;
|
||||||
}
|
}
|
||||||
mAnimation->getAnmBase()->setFrame(mCurrFrame);
|
mAnimation->getAnmBase()->setFrame(mCurrFrame);
|
||||||
}
|
}
|
||||||
@ -210,7 +210,7 @@ void MatLoopAnimator::do_animate(f32 rate)
|
|||||||
{
|
{
|
||||||
u32 state = forward(rate);
|
u32 state = forward(rate);
|
||||||
|
|
||||||
if (state == 2) {
|
if (state == MatBaseAnimator::AtEnd) {
|
||||||
mCurrFrame = 0.0f;
|
mCurrFrame = 0.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -219,7 +219,7 @@ void MatLoopAnimator::do_animate(f32 rate)
|
|||||||
* @note Address: 0x80434778
|
* @note Address: 0x80434778
|
||||||
* @note Size: 0xC
|
* @note Size: 0xC
|
||||||
*/
|
*/
|
||||||
void MatRepeatAnimator::onStart() { _0C = 1; }
|
void MatRepeatAnimator::onStart() { mStarted = true; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @note Address: 0x80434784
|
* @note Address: 0x80434784
|
||||||
@ -227,17 +227,15 @@ void MatRepeatAnimator::onStart() { _0C = 1; }
|
|||||||
*/
|
*/
|
||||||
void MatRepeatAnimator::do_animate(f32 rate)
|
void MatRepeatAnimator::do_animate(f32 rate)
|
||||||
{
|
{
|
||||||
if (_0C) {
|
if (mStarted) {
|
||||||
u32 state = forward(rate);
|
u32 state = forward(rate);
|
||||||
|
if (state == MatBaseAnimator::AtEnd) {
|
||||||
if (state == 2) {
|
mStarted = false;
|
||||||
_0C = false;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
u32 state = backward(rate);
|
u32 state = backward(rate);
|
||||||
|
if (state == MatBaseAnimator::AtStart) {
|
||||||
if (state == 1) {
|
mStarted = true;
|
||||||
_0C = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,7 @@ void Animator::startAnim(int animID, MotionListener* listener)
|
|||||||
mAnimMgr->dump();
|
mAnimMgr->dump();
|
||||||
JUT_PANICLINE(220, "go to hell !\n");
|
JUT_PANICLINE(220, "go to hell !\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
mTimer = 0.0f;
|
mTimer = 0.0f;
|
||||||
mCurAnimKey = mAnimInfo->getLowestAnimKey(0.0f);
|
mCurAnimKey = mAnimInfo->getLowestAnimKey(0.0f);
|
||||||
if (listener != nullptr) {
|
if (listener != nullptr) {
|
||||||
@ -98,15 +99,16 @@ void Animator::setCurrFrame(f32 timer)
|
|||||||
*/
|
*/
|
||||||
void Animator::setFrameByKeyType(u32 id)
|
void Animator::setFrameByKeyType(u32 id)
|
||||||
{
|
{
|
||||||
JUT_ASSERTLINE(300, !(mFlags & Unk80), "ExMotionErr::setFrameByKeyType(%d)\n", id);
|
JUT_ASSERTLINE(300, !isFlag(Unk80), "ExMotionErr::setFrameByKeyType(%d)\n", id);
|
||||||
|
|
||||||
if (id == KEYEVENT_END) {
|
if (id == KEYEVENT_END) {
|
||||||
setCurrFrame(mAnimInfo->mAnm->mTotalFrameCount - 1.0f);
|
setCurrFrame(mAnimInfo->mAnm->getTotalFrameCount() - 1.0f);
|
||||||
} else {
|
return;
|
||||||
KeyEvent* evt = mAnimInfo->getAnimKeyByType(id);
|
}
|
||||||
if (evt) {
|
|
||||||
setCurrFrame(evt->mFrame);
|
KeyEvent* evt = mAnimInfo->getAnimKeyByType(id);
|
||||||
}
|
if (evt) {
|
||||||
|
setCurrFrame(evt->mFrame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +119,7 @@ void Animator::setFrameByKeyType(u32 id)
|
|||||||
void Animator::setLastFrame()
|
void Animator::setLastFrame()
|
||||||
{
|
{
|
||||||
if (mAnimInfo) {
|
if (mAnimInfo) {
|
||||||
setCurrFrame(mAnimInfo->mAnm->mTotalFrameCount - 1.0f);
|
setCurrFrame(mAnimInfo->mAnm->getTotalFrameCount() - 1.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,16 +127,16 @@ void Animator::setLastFrame()
|
|||||||
* @note Address: 0x80428F78
|
* @note Address: 0x80428F78
|
||||||
* @note Size: 0x2AC
|
* @note Size: 0x2AC
|
||||||
*/
|
*/
|
||||||
void Animator::animate(f32 deltaTime)
|
void Animator::animate(f32 speed)
|
||||||
{
|
{
|
||||||
if (!mAnimInfo) {
|
if (!mAnimInfo) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mTimer += deltaTime;
|
mTimer += speed;
|
||||||
|
|
||||||
bool found = false;
|
bool loopEndFound = false;
|
||||||
while (!found && mCurAnimKey && mCurAnimKey->mFrame < (int)mTimer) {
|
while (!loopEndFound && mCurAnimKey && mCurAnimKey->getFrame() < (int)mTimer) {
|
||||||
onKeyEventTrigger(mCurAnimKey);
|
onKeyEventTrigger(mCurAnimKey);
|
||||||
|
|
||||||
SysShape::KeyEvent* currentEv = mCurAnimKey;
|
SysShape::KeyEvent* currentEv = mCurAnimKey;
|
||||||
@ -147,13 +149,13 @@ void Animator::animate(f32 deltaTime)
|
|||||||
if (!isFlag(AnimFinishMotion)) {
|
if (!isFlag(AnimFinishMotion)) {
|
||||||
KeyEvent* start = mAnimInfo->getLastLoopStart(currentEv);
|
KeyEvent* start = mAnimInfo->getLastLoopStart(currentEv);
|
||||||
if (start) {
|
if (start) {
|
||||||
mTimer = start->mFrame;
|
mTimer = start->getFrame();
|
||||||
} else {
|
} else {
|
||||||
mTimer = 0.0f;
|
mTimer = 0.0f;
|
||||||
JUT_PANICLINE(369, "mismatch LOOP_START - LOOP_END\n");
|
JUT_PANICLINE(369, "mismatch LOOP_START - LOOP_END\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
found = true;
|
loopEndFound = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,17 +163,17 @@ void Animator::animate(f32 deltaTime)
|
|||||||
mCurAnimKey = (KeyEvent*)mCurAnimKey->mNext;
|
mCurAnimKey = (KeyEvent*)mCurAnimKey->mNext;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found) {
|
if (loopEndFound) {
|
||||||
mCurAnimKey = mAnimInfo->getLowestAnimKey(mTimer);
|
mCurAnimKey = mAnimInfo->getLowestAnimKey(mTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
int time = mAnimInfo->mAnm->getFrameMax();
|
s32 time = mAnimInfo->mAnm->getTotalFrameCount();
|
||||||
if (mTimer >= time) {
|
if (mTimer >= time) {
|
||||||
mTimer = time - 1.0f;
|
mTimer = time - 1.0f;
|
||||||
|
|
||||||
if (mListener && !isFlag(AnimCompleted)) {
|
if (mListener && !isFlag(AnimCompleted)) {
|
||||||
KeyEvent event;
|
KeyEvent event;
|
||||||
event.mFrame = (f32)mAnimInfo->mAnm->getFrameMax();
|
event.mFrame = (f32)mAnimInfo->mAnm->getTotalFrameCount();
|
||||||
event.mType = KEYEVENT_END;
|
event.mType = KEYEVENT_END;
|
||||||
event.mAnimIdx = mAnimInfo->mId;
|
event.mAnimIdx = mAnimInfo->mId;
|
||||||
setFlag(AnimCompleted);
|
setFlag(AnimCompleted);
|
||||||
|
Loading…
Reference in New Issue
Block a user