diff --git a/src/kart/KartObjectProxy.cpp b/src/kart/KartObjectProxy.cpp index 189e7adc..76dcd029 100644 --- a/src/kart/KartObjectProxy.cpp +++ b/src/kart/KartObjectProxy.cpp @@ -98,7 +98,7 @@ bool KartObjectProxy::isLocal() { return kartState()->on(KART_FLAG_LOCAL); } -bool KartObjectProxy::isCpu() { +bool KartObjectProxy::isCpu() const { return kartState()->on(KART_FLAG_CPU); } @@ -179,6 +179,15 @@ s32 KartObjectProxy::getAppliedHopStickX() { KartModel* KartObjectProxy::kartModel() { return mAccessor->mModel; } +u8 KartObjectProxy::getPlayerIdx() const { return kartSettings()->playerIdx; } + +void KartObjectProxy::getBodyForward(EGG::Vector3f& out) { + const EGG::Matrix34f& pose = kartPhysics()->pose; + out.x = pose.mtx[0][0]; + out.y = pose.mtx[1][0]; + out.z = pose.mtx[2][0]; +} + f32 KartObjectProxy::getVehicleSpeed() { return kartMove()->speed(); } KartAction* KartObjectProxy::kartAction() { return mAccessor->mAction; } @@ -267,6 +276,18 @@ bool KartObjectProxy::isSomeMoveFlagActive() { return kartMove()->flags() & 1 << 2; } +extern "C" void fn_1_806E8(KartObjectProxy* proxy, bool, bool, bool, bool); + +void KartObjectProxy::shouldVanishPlayer(bool vanish) { + fn_1_806E8(this, !vanish, false, true, false); + KartState* state = kartState(); + if (vanish) { + state->set(KART_FLAG_VANISH); + } else { + state->reset(KART_FLAG_VANISH); + } +} + const KartHalfPipe* KartObjectProxy::kartHalfPipe() { return kartMove()->kartHalfPipe(); } diff --git a/src/kart/KartState.hpp b/src/kart/KartState.hpp index 75487981..ad972435 100644 --- a/src/kart/KartState.hpp +++ b/src/kart/KartState.hpp @@ -33,6 +33,7 @@ enum KartFlags { KART_FLAG_HALFPIPE_RAMP_LOCAL = 0x43, KART_FLAG_WHEELIE_ROT = 0x44, KART_FLAG_SKIP_WHEEL_CALC = 0x45, + KART_FLAG_VANISH = 0x53, KART_FLAG_DISABLE_Y_SUS_FORCE = 0x56, KART_FLAG_HALFPIPE_MIDAIR = 0x57, KART_FLAG_COL_INVISIBILITY = 0x59,