Files
ss/src/d/d_player_act.cpp
T
2025-09-16 22:32:06 -04:00

128 lines
3.6 KiB
C++

#include "d/d_player_act.h"
#include "common.h"
#include "d/a/d_a_item.h"
#include "d/a/d_a_itembase.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_base.h"
#include "m/m_angle.h"
#include "m/m_color.h"
#include "m/m_vec.h"
#include "toBeSorted/event_manager.h"
mVec3_c daPlayerActBase_c::sPos1(mVec3_c::Zero);
mVec3_c daPlayerActBase_c::sPos2(mVec3_c::Zero);
mAng daPlayerActBase_c::sRot1(0);
mAng daPlayerActBase_c::sRot2(0);
const f32 daPlayerActBase_c::sPushRelatedConstant = 75.0f;
int daPlayerActBase_c::preExecute() {
if (dAcObjBase_c::preExecute() == NOT_READY) {
return NOT_READY;
}
someFlags_0x350 = 0;
someFlags_0x354 = 0;
return SUCCEEDED;
}
void daPlayerActBase_c::postExecute(MAIN_STATE_e state) {
if (state != CANCELED) {
someFlags_0x358 = 0;
mForceOrPreventActionFlags = 0;
}
dAcObjBase_c::postExecute(state);
}
bool daPlayerActBase_c::isInEvent() {
return EventManager::isInEvent();
}
bool daPlayerActBase_c::isAttackingLeft() const {
return mAttackDirection == ATTACK_SPIN_LEFT || mAttackDirection == ATTACK_SWING_LEFT;
}
bool daPlayerActBase_c::isAttackingRight() const {
return mAttackDirection == ATTACK_SPIN_RIGHT || mAttackDirection == ATTACK_SWING_RIGHT;
}
bool daPlayerActBase_c::isAttackingDown() const {
return mAttackDirection == ATTACK_SWING_DOWN || mAttackDirection == ATTACK_SPIN_DOWN ||
mAttackDirection == ATTACK_JUMP_SLASH;
}
bool daPlayerActBase_c::isAttackingUp() const {
return mAttackDirection == ATTACK_SPIN_UP || mAttackDirection == ATTACK_SWING_UP;
}
bool daPlayerActBase_c::isAttackingStab() const {
return mAttackDirection == ATTACK_STAB;
}
bool daPlayerActBase_c::isAttackingSpinHorizontal() const {
return mAttackDirection == ATTACK_SPIN_LEFT || mAttackDirection == ATTACK_SPIN_RIGHT;
}
bool daPlayerActBase_c::isAttackingSpinVertical() const {
return mAttackDirection == ATTACK_SPIN_DOWN || mAttackDirection == ATTACK_SPIN_UP;
}
void daPlayerActBase_c::setBonkRelatedAnimFlag(bool b) {
if (b) {
field_0x360 |= 2;
} else {
field_0x360 |= 1;
}
}
void daPlayerActBase_c::setPosRot(const mVec3_c *pos, const mAng3_c *rot, bool force, UNKWORD, UNKWORD) {
if (isInEvent() || force) {
mStts.ClrCcMove();
if (pos != nullptr) {
mPosition = *pos;
mOldPosition = mPosition;
mVelocity.y = 0.0f;
}
if (rot != nullptr) {
mRotation = *rot;
mAngle.y = mRotation.y;
}
}
}
void daPlayerActBase_c::setPosYRot(const mVec3_c &pos, mAng rot, bool force, UNKWORD a4, UNKWORD a5) {
mAng3_c ang(0, rot, 0);
setPosRot(&pos, &ang, force, a4, a5);
}
void daPlayerActBase_c::setTransform(const mMtx_c &mtx, bool force, UNKWORD a4, UNKWORD a5) {
mVec3_c translate;
mtx.getTranslation(translate);
mAng3_c rot;
mtx.toRot(rot);
setPosRot(&translate, &rot, force, a4, a5);
}
extern "C" bool fn_80213090(dAcEnBase_c *);
bool daPlayerActBase_c::someTargetedActorCheck() const {
return fn_80213090(getTargetedActor1());
}
mAng daPlayerActBase_c::fn_8005BA90() {
return dAcPy_c::LINK2->fn_8023B520();
}
mAng daPlayerActBase_c::fn_8005BAA0() {
return dAcPy_c::LINK2->fn_8023B590();
}
const mColor &daPlayerActBase_c::getEarringsColor() {
static const mColor sNoFireshieldEarrings = mColor(45, 80, 127, 255);
static const mColor sFireshieldEarrings = mColor(222, 57, 20, 255);
if (dAcItem_c::hasItem(ITEM_FIRESHIELD_EARRINGS)) {
return sFireshieldEarrings;
} else {
return sNoFireshieldEarrings;
}
}