mirror of https://github.com/PrimeDecomp/prime.git
104 lines
2.8 KiB
C++
104 lines
2.8 KiB
C++
#ifndef _CACTOR_HPP
|
|
#define _CACTOR_HPP
|
|
|
|
#include "types.h"
|
|
|
|
#include "Collision/CMaterialFilter.hpp"
|
|
#include "Collision/CMaterialList.hpp"
|
|
|
|
#include "MetroidPrime/CEntity.hpp"
|
|
#include "MetroidPrime/CModelFlags.hpp"
|
|
#include "MetroidPrime/CSfxHandle.hpp"
|
|
|
|
#include "Kyoto/Graphics/CColor.hpp"
|
|
#include "Kyoto/Math/CAABox.hpp"
|
|
#include "Kyoto/Math/CTransform4f.hpp"
|
|
#include "Kyoto/Math/CQuaternion.hpp"
|
|
#include "Kyoto/TToken.hpp"
|
|
|
|
#include "rstl/pair.hpp"
|
|
#include "rstl/reserved_vector.hpp"
|
|
#include "rstl/single_ptr.hpp"
|
|
|
|
class CActorLights;
|
|
class CActorParameters;
|
|
class CModelData;
|
|
class CScannableObjectInfo;
|
|
class CSimpleShadow;
|
|
|
|
// TODO move
|
|
struct SAdvancementDeltas {
|
|
CVector3f x0_posDelta;
|
|
CQuaternion xc_rotDelta;
|
|
};
|
|
CHECK_SIZEOF(SAdvancementDeltas, 0x1c)
|
|
|
|
class CActor : public CEntity {
|
|
public:
|
|
enum EThermalFlags {
|
|
kTF_None = 0,
|
|
kTF_Cold = 1,
|
|
kTF_Hot = 2,
|
|
};
|
|
|
|
CActor(TUniqueId uid, bool active, const rstl::string& name, const CEntityInfo& info, const CTransform4f& xf, const CModelData& mData,
|
|
const CMaterialList& list, const CActorParameters& params, TUniqueId nextDrawNode);
|
|
~CActor();
|
|
|
|
SAdvancementDeltas UpdateAnimation(float dt, CStateManager& mgr, bool advTree);
|
|
|
|
void UpdateSfxEmitters();
|
|
void RemoveEmitter();
|
|
|
|
const CTransform4f& GetTransform() const { return x34_transform; }
|
|
|
|
protected:
|
|
CTransform4f x34_transform;
|
|
rstl::single_ptr< CModelData > x64_modelData;
|
|
CMaterialList x68_material;
|
|
CMaterialFilter x70_materialFilter;
|
|
TSfxId x88_sfxId;
|
|
CSfxHandle x8c_loopingSfxHandle;
|
|
rstl::single_ptr< CActorLights > x90_actorLights;
|
|
rstl::single_ptr< CSimpleShadow > x94_simpleShadow;
|
|
rstl::single_ptr< TCachedToken< CScannableObjectInfo > > x98_scanObjectInfo;
|
|
CAABox x9c_renderBounds;
|
|
CModelFlags xb4_drawFlags;
|
|
f32 xbc_time;
|
|
u32 xc0_pitchBend;
|
|
TUniqueId xc4_fluidId;
|
|
TUniqueId xc6_nextDrawNode;
|
|
s32 xc8_drawnToken;
|
|
s32 xcc_addedToken;
|
|
f32 xd0_damageMag;
|
|
u8 xd4_maxVol;
|
|
rstl::reserved_vector< CSfxHandle, 2 > xd8_nonLoopingSfxHandles;
|
|
u32 xe4_24_nextNonLoopingSfxHandle : 3;
|
|
u32 xe4_27_notInSortedLists : 1;
|
|
u32 xe4_28_transformDirty : 1;
|
|
u32 xe4_29_actorLightsDirty : 1;
|
|
u32 xe4_30_outOfFrustum : 1;
|
|
u32 xe4_31_calculateLighting : 1;
|
|
u32 xe5_24_shadowEnabled : 1;
|
|
u32 xe5_25_shadowDirty : 1;
|
|
u32 xe5_26_muted : 1;
|
|
u32 xe5_27_useInSortedLists : 1;
|
|
u32 xe5_28_callTouch : 1;
|
|
u32 xe5_29_globalTimeProvider : 1;
|
|
u32 xe5_30_renderUnsorted : 1;
|
|
u32 xe5_31_pointGeneratorParticles : 1;
|
|
u32 xe6_24_fluidCounter : 3;
|
|
EThermalFlags xe6_27_thermalVisorFlags : 2;
|
|
u32 xe6_29_renderParticleDBInside : 1;
|
|
u32 xe6_30_enablePitchBend : 1;
|
|
u32 xe6_31_targetableVisorFlags : 4;
|
|
u32 xe7_27_enableRender : 1;
|
|
u32 xe7_28_worldLightingDirty : 1;
|
|
u32 xe7_29_drawEnabled : 1;
|
|
u32 xe7_30_doTargetDistanceTest : 1;
|
|
u32 xe7_31_targetable : 1;
|
|
};
|
|
CHECK_SIZEOF(CActor, 0xe8)
|
|
|
|
#endif
|