mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-10-24 10:50:30 +00:00
45 lines
1.5 KiB
C++
45 lines
1.5 KiB
C++
#include "MetroidPrime/ScriptObjects/CScriptRipple.hpp"
|
|
|
|
#include "MetroidPrime/CFluidPlaneCPU.hpp"
|
|
#include "MetroidPrime/CStateManager.hpp"
|
|
#include "MetroidPrime/ScriptObjects/CScriptWater.hpp"
|
|
|
|
CScriptRipple::CScriptRipple(TUniqueId uid, const rstl::string& name, const CEntityInfo& info,
|
|
const CVector3f& vec, bool active, float f1)
|
|
: CEntity(uid, info, active, name), x34_magnitude(f1 >= 0.f ? f1 : 0.5f), x38_center(vec) {}
|
|
|
|
CScriptRipple::~CScriptRipple() {}
|
|
|
|
void CScriptRipple::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) {
|
|
switch (msg) {
|
|
case (kSM_Play): {
|
|
if (!GetActive()) {
|
|
return;
|
|
}
|
|
|
|
rstl::vector< SConnection >::const_iterator conn = GetConnectionList().begin();
|
|
for (; conn != GetConnectionList().end(); ++conn) {
|
|
if (conn->x0_state != kSS_Active || conn->x4_msg != kSM_Next) {
|
|
continue;
|
|
}
|
|
|
|
const CStateManager::TIdListResult& search = mgr.GetIdListForScript(conn->x8_objId);
|
|
if (search.first != search.second) {
|
|
if (CScriptWater* water =
|
|
TCastToPtr< CScriptWater >(mgr.ObjectById(search.first->second))) {
|
|
water->FluidPlane().AddRipple(x34_magnitude, GetUniqueId(), x38_center, *water, mgr);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
CEntity::AcceptScriptMsg(msg, uid, mgr);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CScriptRipple::Think(float, CStateManager&) override {}
|
|
|
|
void CScriptRipple::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|