diff --git a/include/d/a/obj/d_a_obj_paint.h b/include/d/a/obj/d_a_obj_paint.h index 815b2919..a8b0f643 100644 --- a/include/d/a/obj/d_a_obj_paint.h +++ b/include/d/a/obj/d_a_obj_paint.h @@ -12,6 +12,11 @@ class dAcOpaint_c : public dAcObjBase_c { public: + enum Subtype { + Batreaux = 0, + Groose = 1, + }; + dAcOpaint_c() : mStateMgr(*this, sStateID::null) {} virtual ~dAcOpaint_c() {} @@ -35,12 +40,12 @@ private: /* 0x568 */ STATE_MGR_DECLARE(dAcOpaint_c); /* 0x5A4 */ mAng mRotationZRelated; /* 0x5A6 */ mAng mRotationZOffset; - /* 0x5A8 */ s8 field_0x5A8; + /* 0x5A8 */ s8 mPaintingOffsetTimer; /* 0x5A9 */ u8 mSubtype; - /* 0x5AA */ bool field_0x5AA; + /* 0x5AA */ bool mPaintingSwayed; - static mAng rotationZRelated0; - static mAng rotationZRelated1; + static mAng rotationZRelatedBatreaux; + static mAng rotationZRelatedGroose; static const f32 lbl_613_rodata_2C; }; diff --git a/src/REL/d/a/obj/d_a_obj_paint.cpp b/src/REL/d/a/obj/d_a_obj_paint.cpp index 370f8993..dee3a119 100644 --- a/src/REL/d/a/obj/d_a_obj_paint.cpp +++ b/src/REL/d/a/obj/d_a_obj_paint.cpp @@ -10,15 +10,14 @@ #include "m/m_vec.h" #include "nw4r/g3d/res/g3d_resfile.h" #include "nw4r/g3d/res/g3d_resmdl.h" -#include "rvl/MTX/mtx.h" #include "toBeSorted/arc_managers/oarc_manager.h" SPECIAL_ACTOR_PROFILE(OBJ_PAINT, dAcOpaint_c, fProfile::OBJ_PAINT, 0x163, 0, 0); STATE_DEFINE(dAcOpaint_c, Wait); -mAng dAcOpaint_c::rotationZRelated0 = mAng::d2s(35.0025f); -mAng dAcOpaint_c::rotationZRelated1 = mAng::d2s(40.0015f); +mAng dAcOpaint_c::rotationZRelatedBatreaux = mAng::d2s(35.0025f); +mAng dAcOpaint_c::rotationZRelatedGroose = mAng::d2s(40.0015f); bool dAcOpaint_c::createHeap() { const char *oarcName = getOarcName(); @@ -36,15 +35,15 @@ bool dAcOpaint_c::createHeap() { int dAcOpaint_c::create() { if (getFromParams(0, 3) == 0) { - mSubtype = 0; + mSubtype = Batreaux; } else { - mSubtype = 1; + mSubtype = Groose; } dAcObjBase_c::updateMatrix(); CREATE_ALLOCATOR(dAcOpaint_c); mMdl.setLocalMtx(mWorldMtx); dBgS::GetInstance()->Regist(&mBgW, this); - field_0x5AA = false; + mPaintingSwayed = false; mStateMgr.changeState(StateID_Wait); return SUCCEEDED; } @@ -75,19 +74,19 @@ void dAcOpaint_c::executeState_Wait() { mVec3_c deltaPosition = dAcPy_c::GetLink()->mPosition - mPosition; f32 distance = deltaPosition.absXZ(); if (1000.f - distance > 0.f) { - if (distance < _a + 700.f && !field_0x5AA) { - if (mSubtype == 0) { - mRotationZRelated = rotationZRelated0; + if (distance < _a + 700.f && !mPaintingSwayed) { + if (mSubtype == Batreaux) { + mRotationZRelated = rotationZRelatedBatreaux; } else { - mRotationZRelated = rotationZRelated1; + mRotationZRelated = rotationZRelatedGroose; } - field_0x5AA = true; + mPaintingSwayed = true; startSound(SE_Paint_LOOSE); } - field_0x5A8 = 3; + mPaintingOffsetTimer = 3; mPosition.y += 10.f; - if (field_0x5AA) { + if (mPaintingSwayed) { mRotationZOffset = mAng(0x100); } } @@ -98,10 +97,10 @@ void dAcOpaint_c::executeState_Wait() { mRotation.z = mRotation.z + mRotationZOffset; - if (field_0x5A8 > 0) { - field_0x5A8--; - } else if (field_0x5A8 != -1) { - field_0x5A8 = 0xFF; + if (mPaintingOffsetTimer > 0) { + mPaintingOffsetTimer--; + } else if (mPaintingOffsetTimer != -1) { + mPaintingOffsetTimer = -1; mPosition.y -= 10.f; } } @@ -109,16 +108,20 @@ void dAcOpaint_c::executeState_Wait() { void dAcOpaint_c::finalizeState_Wait() {} void dAcOpaint_c::updateMatrix() { - PSMTXTrans(mWorldMtx, mPosition.x, mPosition.y, mPosition.z); + mWorldMtx.transS(mPosition); mWorldMtx.XrotM(mRotation.x); mWorldMtx.YrotM(mRotation.y); + mMtx_c mtx; - PSMTXTrans(mtx, 100.0f, 100.0f, 0.0f); - PSMTXConcat(mWorldMtx, mtx, mWorldMtx); + mtx.transS(100.0f, 100.0f, 0.0f); + + mWorldMtx += mtx; mWorldMtx.ZrotM(mRotation.z); + mMtx_c mtx2; - PSMTXTrans(mtx2, -100.0f, -100.0f, 0.0f); - PSMTXConcat(mWorldMtx, mtx2, mWorldMtx); + mtx2.transS(-100.0f, -100.0f, 0.0f); + mWorldMtx += mtx2; + mMdl.setLocalMtx(mWorldMtx); } @@ -130,8 +133,8 @@ const char *dAcOpaint_c::getOarcName() { const char *dAcOpaint_c::getModelName() { switch (mSubtype) { - case 0: return "PaintA"; - case 1: return "PaintB"; - default: return nullptr; + case Batreaux: return "PaintA"; + case Groose: return "PaintB"; + default: return nullptr; } }