mirror of https://github.com/AxioDL/metaforce.git
46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
#include "Runtime/World/CRippleManager.hpp"
|
|
|
|
namespace metaforce {
|
|
|
|
CRippleManager::CRippleManager(int maxRipples, float alpha) : x14_alpha(alpha) { Init(maxRipples); }
|
|
|
|
void CRippleManager::Init(int maxRipples) {
|
|
x4_ripples.resize(maxRipples, CRipple(kInvalidUniqueId, zeus::skZero3f, 0.f));
|
|
for (CRipple& r : x4_ripples)
|
|
r.SetTime(9999.f);
|
|
}
|
|
|
|
void CRippleManager::Update(float dt) {
|
|
for (CRipple& ripple : x4_ripples) {
|
|
ripple.SetTime(ripple.GetTime() + dt);
|
|
if (ripple.GetTime() > 9999.f)
|
|
ripple.SetTime(9999.f);
|
|
}
|
|
}
|
|
|
|
float CRippleManager::GetLastRippleDeltaTime(TUniqueId rippler) const {
|
|
float res = 9999.f;
|
|
for (const CRipple& r : x4_ripples)
|
|
if (r.GetUniqueId() == rippler)
|
|
if (r.GetTime() < res)
|
|
res = r.GetTime();
|
|
return res;
|
|
}
|
|
|
|
void CRippleManager::AddRipple(const CRipple& ripple) {
|
|
float maxTime = 0.f;
|
|
auto oldestRipple = x4_ripples.end();
|
|
for (auto it = x4_ripples.begin(); it != x4_ripples.end(); ++it)
|
|
if (it->GetTime() > maxTime) {
|
|
oldestRipple = it;
|
|
maxTime = it->GetTime();
|
|
}
|
|
|
|
if (oldestRipple != x4_ripples.end()) {
|
|
*oldestRipple = ripple;
|
|
x0_maxTimeFalloff = std::max(x0_maxTimeFalloff, ripple.GetTimeFalloff());
|
|
}
|
|
}
|
|
|
|
} // namespace metaforce
|