Files

126 lines
3.1 KiB
C++
Raw Permalink Normal View History

2024-01-27 16:30:04 -05:00
#include "Game/Player/MarioAnimator.hpp"
#include "Game/Animation/XanimeResource.hpp"
#include "Game/Player/MarioActor.hpp"
2024-01-27 16:30:04 -05:00
#include "Game/Animation/XanimePlayer.hpp"
#include "Game/Player/MarioAnimatorData.hpp"
2024-01-27 16:30:04 -05:00
MarioAnimator::MarioAnimator(MarioActor *actor) : MarioModule(actor)
{
2024-01-27 16:30:04 -05:00
init();
}
void MarioAnimator::init()
{
2024-01-27 16:30:04 -05:00
XanimeSwapTable *luigiAnimations = nullptr;
if (gIsLuigi) {
luigiAnimations = luigiAnimeSwapTable;
}
mResourceTable = new XanimeResourceTable(MR::getResourceHolder(mActor), marioAnimeTable, marioAnimeAuxTable, marioAnimeOfsTable, &singleAnimeTable[0].parent, &doubleAnimeTable[0].parent, &tripleAnimeTable[0].parent, &quadAnimeTable[0].parent, luigiAnimations);
2024-01-27 16:30:04 -05:00
_14 = 0;
_15 = 0;
_16 = 1;
_18 = 0.0f;
_1C = 0.0f;
_20 = 0.0f;
_24 = 1.0f;
2024-01-27 16:30:04 -05:00
PSMTXIdentity(_28.toMtxPtr());
PSMTXIdentity(_7C.toMtxPtr());
PSMTXIdentity(_AC.toMtxPtr());
_58 = 0.0f;
_5C = 0.0f;
2024-01-27 16:30:04 -05:00
_60.zero();
2024-04-14 16:40:43 -04:00
_6C = false;
2024-01-27 16:30:04 -05:00
_10C = 0;
_10D = 0;
2024-04-14 16:40:43 -04:00
mUpperDefaultSet = false;
2024-04-14 21:16:11 -04:00
mCurrBck = nullptr;
_118 = 0.0f;
_70 = 0.0f;
2024-01-27 16:30:04 -05:00
_74 = 0;
_78 = 0;
_110 = 0.0f;
2024-01-27 16:30:04 -05:00
initCallbackTable();
2024-04-14 16:40:43 -04:00
mXanimePlayer = new XanimePlayer(MR::getJ3DModel(mActor), mResourceTable);
2024-04-14 16:40:43 -04:00
changeDefault("Šî–{");
change("Šî–{");
2024-01-27 16:30:04 -05:00
2024-04-14 16:40:43 -04:00
mXanimePlayer->getCore()->enableJointTransform(MR::getJ3DModelData(mActor));
2024-01-27 16:30:04 -05:00
2024-04-14 16:40:43 -04:00
mActor->mModelManager->mXanimePlayer = mXanimePlayer;
mXanimePlayerUpper = new XanimePlayer(MR::getJ3DModel(mActor), mResourceTable, mXanimePlayer);
changeDefaultUpper("Šî–{");
2024-04-14 16:40:43 -04:00
mXanimePlayerUpper->changeAnimation("Šî–{");
mXanimePlayerUpper->mCore->shareJointTransform(mXanimePlayer->mCore);
PSMTXCopy(MR::tmpMtxRotYRad(3.14159274101f), _DC.toMtxPtr());
2024-01-27 16:30:04 -05:00
}
2024-04-14 13:47:31 -04:00
bool MarioAnimator::isAnimationStop() const
{
2024-04-14 16:40:43 -04:00
return mXanimePlayer->mCurrentAnimation == mXanimePlayer->mDefaultAnimation;
}
2024-04-14 21:20:09 -04:00
void MarioAnimator::change(const char *name)
{
2024-04-14 21:20:09 -04:00
if (mActor->_B90) {
return;
}
2024-04-14 21:20:09 -04:00
if (!isTeresaClear()) {
2024-04-14 16:40:43 -04:00
mXanimePlayer->changeAnimation(name);
}
2024-04-14 16:40:43 -04:00
const char *bck = mXanimePlayer->getCurrentBckName();
2024-04-14 21:20:09 -04:00
if (bck) {
2024-04-14 16:40:43 -04:00
const XanimeGroupInfo *info = mXanimePlayer->mCurrentAnimation;
2024-04-14 21:20:09 -04:00
if (info->_18 == 2) {
f32 arg1 = info->_14, arg2 = info->_10;
getPlayer()->startBas(bck, false, arg1, arg2);
}
else {
getPlayer()->startBas(bck, false, 0.0f, 0.0f);
}
mActor->setBlink(bck);
}
else {
getPlayer()->startBas(nullptr, false, 0.0f, 0.0f);
mActor->setBlink(nullptr);
}
mActor->changeSpecialModeAnimation(name);
mCurrBck = bck;
entryCallback(name);
2024-04-14 13:47:31 -04:00
}
2024-04-14 16:40:43 -04:00
2024-04-14 21:20:09 -04:00
void MarioAnimator::changeUpper(const char *name)
{
2024-04-14 16:40:43 -04:00
mXanimePlayerUpper->changeAnimation(name);
_6C = true;
}
2024-04-14 21:20:09 -04:00
void MarioAnimator::changeDefault(const char *name)
{
2024-04-14 16:40:43 -04:00
getPlayer()->startBas(nullptr, false, 0.0f, 0.0f);
mXanimePlayer->setDefaultAnimation(name);
}
2024-04-14 21:20:09 -04:00
void MarioAnimator::changeDefaultUpper(const char *name)
{
if (name) {
2024-04-14 16:40:43 -04:00
mUpperDefaultSet = true;
mXanimePlayerUpper->setDefaultAnimation(name);
}
else {
mUpperDefaultSet = false;
}
}