| 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 | |
| 14 | PlayerJudgeDirectRolling::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 | |
| 21 | void PlayerJudgeDirectRolling::reset() { |
| 22 | mIsJudge = false; |
| 23 | } |
| 24 | |
| 25 | void 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 | |