Add CRainSplashGenerator

Former-commit-id: cfe395c7f4
This commit is contained in:
Henrique Gemignani Passos Lima
2023-01-08 00:59:28 +02:00
parent 294f5eff70
commit f796d03e40
6 changed files with 313 additions and 34 deletions

View File

@@ -10,6 +10,8 @@
class CVector3f;
class CStateManager;
class CTransform4f;
class SSkinningWorkspace;
class CRainSplashGenerator {
struct SSplashLine {
@@ -21,20 +23,34 @@ class CRainSplashGenerator {
uchar x14_;
uchar x15_length;
bool x16_active : 1;
SSplashLine();
SSplashLine()
: x0_t(0.0f)
, x4_xEnd(0.0f)
, x8_yEnd(0.0f)
, xc_speed(4.0f)
, x10_zParabolaHeight(0.015625f) // 1/64?
, x14_(3)
, x15_length(1)
, x16_active(true) {}
void Update(float dt, CStateManager& mgr);
void Draw(float alpha, float dt, const CVector3f& pos);
void SetActive() { x16_active = true; }
void Draw(float alpha, float dt, const CVector3f& pos) const;
void SetActive();
};
struct SRainSplash {
rstl::reserved_vector< SSplashLine, 4 > x0_lines;
CVector3f x64_pos;
float x70_;
SRainSplash();
SRainSplash(const SRainSplash&);
void operator=(const SRainSplash&);
void Update(float dt, CStateManager& mgr);
bool IsActive() const;
void Draw(float alpha, float dt, const CVector3f& pos);
void Draw(float alpha, float dt, const CVector3f& pos) const;
void SetPoint(const CVector3f& pos);
};
@@ -43,8 +59,9 @@ public:
float alpha);
~CRainSplashGenerator() {}
bool IsRaining() const { return x48_25_raining; }
void Update(float dt, CStateManager& mgr);
void Draw(const CTransform4f& xf) const;
void GeneratePoints(const CVector3f* vertices, const CVector3f* normals, int count);
@@ -57,13 +74,20 @@ private:
float x28_dt;
float x2c_minZ;
float x30_alpha;
uint x34_curPoint;
uint x38_queueTail;
uint x3c_queueHead;
uint x40_queueSize;
uint x44_genRate;
int x34_curPoint;
int x38_queueTail;
int x3c_queueHead;
int x40_queueSize;
int x44_genRate;
bool x48_24 : 1;
bool x48_25_raining : 1;
void UpdateRainSplashRange(CStateManager& mgr, int start, int end, float dt);
void UpdateRainSplashes(CStateManager& mgr, float magnitude, float dt);
void AddPoint(const CVector3f& pos);
void DoDraw(const CTransform4f& xf) const;
int GetNextBestPt(int, const CVector3f*, const CVector3f*, int, CRandom16&, float);
};
CHECK_SIZEOF(CRainSplashGenerator, 0x4c)