Files

156 lines
5.9 KiB
C++
Raw Permalink Normal View History

2022-10-16 17:41:14 +03:00
#ifndef _CSCRIPTWATER
#define _CSCRIPTWATER
#include "types.h"
2024-09-22 16:58:50 -06:00
#include "MetroidPrime/CFluidPlane.hpp"
2022-11-01 22:57:25 -04:00
#include "MetroidPrime/ScriptObjects/CScriptTrigger.hpp"
2024-09-22 16:58:50 -06:00
#include "MetroidPrime/TGameTypes.hpp"
2022-11-01 22:57:25 -04:00
#include "Kyoto/Math/CFrustumPlanes.hpp"
#include "Kyoto/TToken.hpp"
#include "rstl/list.hpp"
#include "rstl/optional_object.hpp"
#include "rstl/pair.hpp"
2022-10-16 17:41:14 +03:00
#include "rstl/single_ptr.hpp"
2024-09-22 16:58:50 -06:00
#include "rstl/string.hpp"
2022-10-16 17:41:14 +03:00
2024-09-22 16:58:50 -06:00
class CAABox;
class CColor;
class CDamageInfo;
2022-10-16 17:41:14 +03:00
class CFluidPlaneCPU;
2024-09-22 16:58:50 -06:00
class CFluidUVMotion;
2022-11-01 22:57:25 -04:00
class CGenDescription;
2024-09-22 16:58:50 -06:00
class CStateManager;
class CVector3f;
2022-10-16 17:41:14 +03:00
2022-11-01 22:57:25 -04:00
class CScriptWater : public CScriptTrigger {
2022-10-30 15:47:50 -04:00
public:
2024-09-22 16:58:50 -06:00
CScriptWater(CStateManager&, TUniqueId, const rstl::string&, const CEntityInfo&, const CVector3f&,
const CAABox&, const CDamageInfo&, const CVector3f&, uint, bool, bool, uint, uint,
uint, uint, uint, uint, uint, const CVector3f&, float, float, float, bool,
2024-09-22 16:58:50 -06:00
CFluidPlane::EFluidType, bool, float, const CFluidUVMotion&, float, float, float,
float, float, float, float, float, const CColor&, const CColor&, uint, uint, uint,
uint, uint, int, int, int, int, int, float, uint, float, float, float, float,
float, float, float, float, const CColor&, uint, float, float, float, uint, uint,
bool, int, int, const uint*);
2024-09-22 16:58:50 -06:00
// CEntity
~CScriptWater() override;
void Accept(IVisitor& visitor) override;
void Think(float dt, CStateManager& mgr) override;
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
// CActor
void PreRender(CStateManager&, const CFrustumPlanes&) override;
void AddToRenderer(const CFrustumPlanes&, const CStateManager&) const override;
void Render(const CStateManager&) const override;
void CalculateRenderBounds() override;
void Touch(CActor&, CStateManager&) override;
EWeaponCollisionResponseTypes GetCollisionResponseType(const CVector3f&, const CVector3f&,
const CWeaponMode&,
2024-09-30 00:02:23 -06:00
int) const override;
2024-09-22 16:58:50 -06:00
CAABox GetSortingBounds(const CStateManager&) const override;
2022-11-01 22:57:25 -04:00
bool CanRippleAtPoint(const CVector3f&) const;
void UpdateSplashInhabitants(CStateManager&);
void SetupGrid(bool recomputeClipping);
void SetupGridClipping(CStateManager&, int computeVerts);
int GetPatchRenderFlags(int x, int y) const;
int GetPatchDimensionX() const { return x2d0_patchDimX; }
int GetPatchDimensionY() const { return x2d4_patchDimY; }
void SetMorphing(const bool m);
const CScriptWater* GetNextConnectedWater(const CStateManager&) const;
2024-09-22 16:58:50 -06:00
// RenderSurface__12CScriptWaterFv
2022-11-01 22:57:25 -04:00
CFluidPlaneCPU& FluidPlane() {
return reinterpret_cast< CFluidPlaneCPU& >(*x1b4_fluidPlane);
}
const CFluidPlaneCPU& GetFluidPlane() const {
return reinterpret_cast< const CFluidPlaneCPU& >(*x1b4_fluidPlane);
}
2024-09-22 16:58:50 -06:00
// GetWRSurfacePlane__12CScriptWaterCFv
2022-11-01 22:57:25 -04:00
float GetSurfaceZ() const { return GetTriggerBoundsWR().GetMaxPoint().GetZ(); }
2024-09-22 16:58:50 -06:00
const CColor& GetUnderwaterFogColor() const { return x2a8_insideFogColor; }
2024-09-28 13:43:23 -06:00
const rstl::optional_object< TLockedToken< CGenDescription > >& GetVisorRunoffEffect() const {
return x23c_visorRunoffEffect;
}
ushort GetVisorRunoffSfx() const { return x260_visorRunoffSfx; }
const rstl::optional_object< TLockedToken< CGenDescription > >&
GetUnmorphVisorRunoffEffect() const {
return x250_unmorphVisorRunoffEffect;
}
ushort GetUnmorphVisorRunoffSfx() const { return x262_unmorphVisorRunoffSfx; }
2024-09-22 16:58:50 -06:00
// GetFluidType__12CScriptWaterCFv
bool IsMorphing() const { return x2e8_26_morphing; }
float GetMorphFactor() const { return x1f8_morphFactor; }
2024-09-22 16:58:50 -06:00
// GetFrustumPlanes__12CScriptWaterCFv
int GetSplashIndex(float scale) const;
const rstl::optional_object< TLockedToken< CGenDescription > >& GetSplashEffect(float scale) const;
int GetSplashSound(float scale) const;
float GetSplashEffectScale(float scale) const;
const CColor& GetSplashColor() const { return x2a4_splashColor; }
2024-09-22 16:58:50 -06:00
static const float kSplashScales[6];
2022-10-16 17:41:14 +03:00
2022-10-30 15:47:50 -04:00
private:
2022-11-01 22:57:25 -04:00
CFrustumPlanes x150_frustum;
rstl::single_ptr< CFluidPlane > x1b4_fluidPlane;
2022-11-01 22:57:25 -04:00
CVector3f x1b8_positionMorphed;
CVector3f x1c4_extentMorphed;
float x1d0_morphInTime;
CVector3f x1d4_positionOrig;
CVector3f x1e0_extentOrig;
float x1ec_damageOrig;
float x1f0_damageMorphed;
float x1f4_morphOutTime;
float x1f8_morphFactor;
rstl::list< rstl::pair< TUniqueId, bool > > x1fc_waterInhabitants;
float x214_fogBias;
float x218_fogMagnitude;
float x21c_origFogBias;
float x220_origFogMagnitude;
float x224_fogSpeed;
CColor x228_fogColor;
CAssetId x22c_splashParticle1Id;
CAssetId x230_splashParticle2Id;
CAssetId x234_splashParticle3Id;
CAssetId x238_visorRunoffParticleId;
rstl::optional_object< TLockedToken< CGenDescription > > x23c_visorRunoffEffect;
CAssetId x24c_unmorphVisorRunoffParticleId;
rstl::optional_object< TLockedToken< CGenDescription > > x250_unmorphVisorRunoffEffect;
ushort x260_visorRunoffSfx;
ushort x262_unmorphVisorRunoffSfx;
rstl::reserved_vector< rstl::optional_object< TLockedToken< CGenDescription > >, 3 >
x264_splashEffects;
rstl::reserved_vector< ushort, 3 > x298_splashSounds;
CColor x2a4_splashColor;
CColor x2a8_insideFogColor;
float x2ac_alphaInTime;
float x2b0_alphaOutTime;
float x2b4_alphaInRecip;
float x2b8_alphaOutRecip;
float x2bc_alpha;
float x2c0_tileSize;
int x2c4_gridDimX;
int x2c8_gridDimY;
int x2cc_gridCellCount;
int x2d0_patchDimX;
int x2d4_patchDimY;
rstl::single_ptr< bool > x2d8_tileIntersects;
rstl::single_ptr< bool > x2dc_vertIntersects;
2022-11-01 22:57:25 -04:00
// 0: all clear, 1: all intersect, 2: partial intersect
rstl::single_ptr< char > x2e0_patchIntersects;
2022-11-01 22:57:25 -04:00
int x2e4_computedGridCellCount;
bool x2e8_24_b4 : 1;
bool x2e8_25_morphIn : 1;
bool x2e8_26_morphing : 1;
bool x2e8_27_allowRender : 1;
bool x2e8_28_recomputeClipping : 1;
bool x2e8_29_alphaIn : 1;
bool x2e8_30_alphaOut : 1;
2022-10-16 17:41:14 +03:00
};
#endif // _CSCRIPTWATER