mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-29 12:04:09 +00:00
483 lines
16 KiB
C++
483 lines
16 KiB
C++
#include "Player/PlayerInput.h"
|
|
|
|
#include "Library/Controller/InputFunction.h"
|
|
#include "Library/Controller/JoyPadAccelPoseAnalyzer.h"
|
|
#include "Library/LiveActor/LiveActor.h"
|
|
#include "Library/Math/MathUtil.h"
|
|
|
|
#include "Player/PlayerFunction.h"
|
|
#include "Player/PlayerInputFunction.h"
|
|
#include "Util/ActorDimensionUtil.h"
|
|
|
|
bool PlayerInput::isEnableCarry() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
|
|
return PlayerInputFunction::isHoldAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCarryStart() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
|
|
return PlayerInputFunction::isTriggerAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCarryRelease() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
|
|
if (PlayerInputFunction::isTriggerAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor)))
|
|
return true;
|
|
|
|
if (mIsDisableInput)
|
|
return false;
|
|
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerSwingActionMario() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCarryReleaseBySwing() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!PlayerInputFunction::isTriggerAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor))) {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!mJoyPadAccelPoseAnalyzer1->isSwingAnyHand())
|
|
return false;
|
|
}
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerAction() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isTriggerAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerJump() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
auto* dimension = mDimension;
|
|
if (dimension && rs::is2D(dimension) && rs::isIn2DArea(dimension)) {
|
|
if (!mIsDisableInput && mJoyPadAccelPoseAnalyzer1->isSwingAnyHand())
|
|
return true;
|
|
}
|
|
return PlayerInputFunction::isTriggerJump(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerHipDrop() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isTriggerSubAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerHeadSliding() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (PlayerInputFunction::isTriggerAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor)))
|
|
return true;
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerPaddle() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isTriggerJump(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerRolling(bool a1) const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!PlayerInputFunction::isHoldSubAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor)) &&
|
|
!a1)
|
|
return false;
|
|
if (PlayerInputFunction::isTriggerAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor)))
|
|
return true;
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerRollingRestartSwing() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerRollingCancelHipDrop(bool a1) const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!PlayerInputFunction::isHoldSubAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor)) &&
|
|
!a1)
|
|
return false;
|
|
if (PlayerInputFunction::isTriggerAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor)))
|
|
return true;
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerHackAction() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isTriggerAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerHackJump() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isTriggerJump(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerHackSwing() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerHackEnd() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
u32 inputPort = PlayerFunction::getPlayerInputPort(mLiveActor);
|
|
return PlayerInputFunction::isTriggerSubAction(mLiveActor, inputPort);
|
|
}
|
|
|
|
bool PlayerInput::isTriggerHackSeparateJump() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
s32 inputPort = al::getPlayerControllerPort(1);
|
|
return PlayerInputFunction::isTriggerJump(mLiveActor, inputPort);
|
|
}
|
|
|
|
bool PlayerInput::isTriggerSeparateCapJangoHelp() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
s32 inputPort = al::getPlayerControllerPort(1);
|
|
return PlayerInputFunction::isTriggerAction(mLiveActor, inputPort) ||
|
|
PlayerInputFunction::isTriggerJump(mLiveActor, inputPort) ||
|
|
PlayerInputFunction::isTriggerSubAction(mLiveActor, inputPort);
|
|
}
|
|
|
|
bool PlayerInput::isHoldHackSeparateJump() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
s32 inputPort = al::getPlayerControllerPort(1);
|
|
return PlayerInputFunction::isHoldJump(mLiveActor, inputPort);
|
|
}
|
|
|
|
bool PlayerInput::isTriggerGetOff() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isTriggerSubAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isHoldAction() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isHoldAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isHoldJump() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
auto* dimension = mDimension;
|
|
if (dimension && rs::is2D(dimension) && rs::isIn2DArea(dimension) && _88 > 0)
|
|
return true;
|
|
return PlayerInputFunction::isHoldJump(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isHoldHipDrop() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isHoldSubAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerStartTalk() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isTriggerTalk(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerStartWorldWarp() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isTriggerStartWorldWarp(
|
|
mLiveActor, PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCancelWorldWarp() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isTriggerCancelWorldWarp(
|
|
mLiveActor, PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerSpinCap() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
u32 inputPort = PlayerFunction::getPlayerInputPort(mLiveActor);
|
|
if (PlayerInputFunction::isTriggerAction(mLiveActor, inputPort))
|
|
return true;
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerToggleStayCap() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
s32 inputPort = al::getPlayerControllerPort(1);
|
|
return PlayerInputFunction::isTriggerAction(mLiveActor, inputPort);
|
|
}
|
|
|
|
bool PlayerInput::isTriggerSpinAttackSeparate() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
if (!mIsDisableInput && mJoyPadAccelPoseAnalyzer1->isSwingAnyHand())
|
|
return true;
|
|
return PlayerInputFunction::isTriggerAction(mLiveActor, al::getPlayerControllerPort(0));
|
|
}
|
|
|
|
s32 PlayerInput::getSeparatePlay1P() {
|
|
return al::getPlayerControllerPort(0);
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCapReturn() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!rs::isSeparatePlay(mLiveActor)) {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
u32 inputPort = PlayerFunction::getPlayerInputPort(mLiveActor);
|
|
if (PlayerInputFunction::isTriggerAction(mLiveActor, inputPort))
|
|
return true;
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
if (mIsDisableInput || !rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
s32 inputPort = al::getPlayerControllerPort(1);
|
|
if (PlayerInputFunction::isTriggerAction(mLiveActor, inputPort))
|
|
return true;
|
|
if (mIsDisableInput || !rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer2->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCapAttackSeparate() const {
|
|
if (mIsDisableInput || !rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
s32 inputPort = al::getPlayerControllerPort(1);
|
|
if (PlayerInputFunction::isTriggerAction(mLiveActor, inputPort))
|
|
return true;
|
|
if (mIsDisableInput || !rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer2->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerSwingActionCap() const {
|
|
if (mIsDisableInput || !rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer2->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCapSingleHandThrow() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCapDoubleHandThrow() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingDoubleHandSameDir();
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCapSeparateJump() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
s32 inputPort = al::getPlayerControllerPort(1);
|
|
return PlayerInputFunction::isTriggerJump(mLiveActor, inputPort);
|
|
}
|
|
|
|
bool PlayerInput::isTriggerCapSeparateHipDrop() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
s32 inputPort = al::getPlayerControllerPort(1);
|
|
return PlayerInputFunction::isTriggerSubAction(mLiveActor, inputPort);
|
|
}
|
|
|
|
bool PlayerInput::isTriggerSwingPoleClimbFast() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isHoldPoleClimbDown() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isHoldSubAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerAppendCapAttack(bool a1) const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (!rs::isSeparatePlay(mLiveActor) || a1) {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer1->isSwingAnyHand();
|
|
}
|
|
if (mIsDisableInput || !rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
return mJoyPadAccelPoseAnalyzer2->isSwingAnyHand();
|
|
}
|
|
|
|
bool PlayerInput::isHoldSpinCap() const {
|
|
if (mIsDisableInput || rs::isSeparatePlay(mLiveActor))
|
|
return false;
|
|
return PlayerInputFunction::isHoldAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isHoldCapAction() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
if (rs::isSeparatePlay(mLiveActor))
|
|
return !PlayerInputFunction::isTriggerAction(mLiveActor, al::getPlayerControllerPort(1));
|
|
return PlayerInputFunction::isHoldAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isHoldPoleClimbFast() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isHoldAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isHoldWallCatchMoveFast() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isHoldAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isHoldHackAction() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isHoldAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isHoldHackJump() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isHoldJump(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isTriggerChange2D() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
u32 inputPort = PlayerFunction::getPlayerInputPort(mLiveActor);
|
|
return al::isPadTriggerZL(inputPort) || al::isPadTriggerZR(inputPort);
|
|
}
|
|
|
|
bool PlayerInput::isTriggerChange3D() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
u32 inputPort = PlayerFunction::getPlayerInputPort(mLiveActor);
|
|
return al::isPadTriggerZL(inputPort) || al::isPadTriggerZR(inputPort);
|
|
}
|
|
|
|
bool PlayerInput::isReleaseJump() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isReleaseJump(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isReleaseHackAction() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isReleaseAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isReleaseHackJump() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isReleaseJump(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isEnableDashInput() const {
|
|
if (mIsDisableInput)
|
|
return false;
|
|
return PlayerInputFunction::isHoldAction(mLiveActor,
|
|
PlayerFunction::getPlayerInputPort(mLiveActor));
|
|
}
|
|
|
|
bool PlayerInput::isThrowTypeSpiral(const sead::Vector2f& a1) const {
|
|
if (al::isNearZero(a1, 0.001))
|
|
return false;
|
|
f32 absX = (a1.x > 0 ? a1.x : -a1.x);
|
|
f32 absY = (a1.y > 0 ? a1.y : -a1.y);
|
|
return absX > absY;
|
|
}
|
|
|
|
bool PlayerInput::isThrowTypeRolling(const sead::Vector2f& a1) const {
|
|
if (al::isNearZero(a1, 0.001))
|
|
return !al::isNearZero(a1.y, 0.001);
|
|
f32 absX = (a1.x > 0 ? a1.x : -a1.x);
|
|
f32 absY = (a1.y > 0 ? a1.y : -a1.y);
|
|
return !(absX > absY) && !al::isNearZero(a1.y, 0.001);
|
|
}
|