prime/include/MetroidPrime/CActor.hpp

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