OdysseyDecomp/src/Player/PlayerInput.cpp
2025-05-29 21:42:49 +02:00

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);
}