prime/src/MetroidPrime/ScriptObjects/CScriptRipple.cpp

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); }