#ifndef _CENVFXMANAGER #define _CENVFXMANAGER #include "types.h" #include "MetroidPrime/TGameTypes.hpp" #include "Kyoto/Audio/CSfxHandle.hpp" #include "Kyoto/Math/CAABox.hpp" #include "Kyoto/Math/CVector2i.hpp" #include "Kyoto/Math/CVector3f.hpp" #include "Kyoto/TToken.hpp" #include "rstl/pair.hpp" #include "rstl/reserved_vector.hpp" #include "rstl/vector.hpp" class CGenDescription; class CTexture; enum EPhazonType { kPT_None, kPT_Blue, kPT_Orange }; class CVectorFixed8_8 { private: short x; short y; short z; }; class CEnvFxManagerGrid { private: bool x0_24_blockDirty; CVector2i x4_position; /* 8.8 fixed point */ CVector2i xc_extent; /* 8.8 fixed point */ rstl::pair< bool, float > x14_block; /* Blocked-bool, Z-coordinate */ rstl::vector< CVectorFixed8_8 > x1c_particles; }; class CEnvFxManager { public: CEnvFxManager(); static void Initialize(); void SetFxDensity(int, float); void SetSplashRate(float f) { xb54_baseSplashRate = f; } bool IsSplashActive() const { return x24_enableSplash; } float GetRainMagnitude() const { return x30_fxDensity; } void Cleanup(); private: CAABox x0_particleBounds; CVector3f x18_focusCellPosition; bool x24_enableSplash; float x28_firstSnowForce; int x2c_lastBlockedGridIdx; float x30_fxDensity; float x34_targetFxDensity; float x38_maxDensityDeltaSpeed; bool x3c_snowflakeTextureMipBlanked; TLockedToken< CTexture > x40_txtrEnvGradient; rstl::reserved_vector< CEnvFxManagerGrid, 64 > x4c_grids; int xb50_; // padding? float xb54_baseSplashRate; TLockedToken< CGenDescription > xb58_envRainSplash; bool xb64_; TUniqueId xb68_envRainSplashId; bool xb6a_rainSoundActive; CSfxHandle xb6c_leftRainSound; CSfxHandle xb70_rightRainSound; TLockedToken< CTexture > xb74_txtrSnowFlake; bool xb80_; rstl::reserved_vector< CVector3f, 16 > xb84_snowZDeltas; TLockedToken< CTexture > xc48_underwaterFlake; bool xc54_; }; CHECK_SIZEOF(CEnvFxManager, 0xc58); #endif // _CENVFXMANAGER