OdysseyDecomp/lib/al/Library/Movement/WheelMovement.cpp
2025-04-05 13:28:03 +02:00

43 lines
1.4 KiB
C++

#include "Library/Movement/WheelMovement.h"
#include "Library/LiveActor/LiveActor.h"
#include "Library/Math/MathUtil.h"
#include "Library/Placement/PlacementFunction.h"
#include "Library/Rail/RailUtil.h"
namespace al {
WheelMovement::WheelMovement(LiveActor* actor, const ActorInitInfo& info)
: NerveExecutor("車輪動作計算") {
tryGetArg((s32*)&mRotateAxis, info, "RotateAxis");
tryGetArg(&mRotateAccel, info, "RotateAccel");
tryGetArg(&mMoveEndDegree, info, "MoveEndDegree");
tryGetArg(&mNoRotateWidth, info, "NoRotateWidth");
getQuat(&_20, info);
_10 = _20;
sead::Vector3f localRotateAxis = sead::Vector3f::ex;
calcQuatLocalAxis(&localRotateAxis, _20, (s32)mRotateAxis);
mMoveDir.setCross(localRotateAxis, sead::Vector3f::ey);
if (isNearZero(mMoveDir))
mMoveDir = sead::Vector3f::ez;
if (isExistRail(actor)) {
setSyncRailToNearestPos(actor);
_64 = true;
mIsRailPlusDir = isRailPlusDir(actor, mMoveDir);
f32 railProgress = getRailCoord(actor) / getRailTotalLength(actor);
_5c = railProgress;
_60 = railProgress;
if (mIsRailPlusDir)
_44 = railProgress * mMoveEndDegree;
else
_44 = -(railProgress * mMoveEndDegree);
rotateQuatLocalDirDegree(&_10, _20, (s32)mRotateAxis, modf(_44 + 360.0f, 360.0f) + 0.0f);
}
}
} // namespace al