1#include "Player/PlayerJudgeDirectRolling.h"
2
3#include "Library/LiveActor/ActorMovementFunction.h"
4#include "Library/LiveActor/ActorPoseUtil.h"
5#include "Library/Math/MathUtil.h"
6
7#include "Player/IPlayerModelChanger.h"
8#include "Player/PlayerCarryKeeper.h"
9#include "Player/PlayerConst.h"
10#include "Player/PlayerCounterForceRun.h"
11#include "Player/PlayerInput.h"
12#include "Util/PlayerCollisionUtil.h"
13
14PlayerJudgeDirectRolling::PlayerJudgeDirectRolling(
15 const al::LiveActor* player, const PlayerConst* pConst, const PlayerInput* input,
16 const IUsePlayerCollision* collider, const IPlayerModelChanger* modelChanger,
17 const PlayerCarryKeeper* carryKeeper, const PlayerCounterForceRun* counterForceRun)
18 : mPlayer(player), mConst(pConst), mInput(input), mCollider(collider),
19 mModelChanger(modelChanger), mCarryKeeper(carryKeeper), mCounterForceRun(counterForceRun) {}
20
21void PlayerJudgeDirectRolling::reset() {
22 mIsJudge = false;
23}
24
25void PlayerJudgeDirectRolling::update() {
26 mIsJudge = false;
27 if (mCounterForceRun->isForceRun() || mCarryKeeper->isCarry() ||
28 !rs::isOnGround(mPlayer, mCollider) || mModelChanger->is2DModel() || !mInput->isHoldSquat())
29 return;
30 sead::Vector3f horizontalSpeed = {0.0f, 0.0f, 0.0f};
31 al::verticalizeVec(out: &horizontalSpeed, vertical: al::getGravity(actor: mPlayer), vec: al::getVelocity(actor: mPlayer));
32 mIsJudge = horizontalSpeed.length() >= mConst->getDashJudgeSpeed();
33}
34