metaforce/Runtime/World/CScriptSteam.cpp

57 lines
2.1 KiB
C++
Raw Normal View History

#include "Runtime/World/CScriptSteam.hpp"
#include "Runtime/CStateManager.hpp"
#include "Runtime/World/CPlayer.hpp"
#include "TCastTo.hpp" // Generated file, do not modify include path
2017-02-27 23:31:14 -08:00
2021-04-10 01:42:06 -07:00
namespace metaforce {
2017-02-27 23:31:14 -08:00
2017-11-12 22:19:18 -08:00
CScriptSteam::CScriptSteam(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CVector3f& pos,
2017-02-27 23:31:14 -08:00
const zeus::CAABox& aabb, const CDamageInfo& dInfo, const zeus::CVector3f& orientedForce,
2018-09-20 11:17:09 -07:00
ETriggerFlags flags, bool active, CAssetId texture, float f1, float f2, float f3, float f4,
bool b1)
2017-02-27 23:31:14 -08:00
: CScriptTrigger(uid, name, info, pos, aabb, dInfo, orientedForce, flags, active, false, false)
2018-09-20 11:17:09 -07:00
, x150_(b1)
, x154_texture(texture)
, x158_(f1)
, x15c_alphaInDur(f2 / f1)
2018-12-07 21:30:43 -08:00
, x160_alphaOutDur(f3 / f1) {
2023-10-17 20:21:00 -07:00
float r3 = std::min(aabb.max.x(), std::min(aabb.max.y(), aabb.max.z()));
x164_ = zeus::close_enough(f4, 0.f) ? r3 : std::min(f4, r3);
2018-12-07 21:30:43 -08:00
x168_ = 1.f / x164_;
2018-09-20 11:17:09 -07:00
}
2018-12-07 21:30:43 -08:00
void CScriptSteam::Accept(IVisitor& visitor) { visitor.Visit(this); }
2018-09-20 11:17:09 -07:00
2018-12-07 21:30:43 -08:00
void CScriptSteam::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) {
if (msg == EScriptObjectMessage::Deactivate) {
2023-10-17 20:21:00 -07:00
mgr.Player()->SetVisorSteam(0.f, x158_, x160_alphaOutDur, CAssetId(), !x150_);
}
2018-09-20 11:17:09 -07:00
2018-12-07 21:30:43 -08:00
CScriptTrigger::AcceptScriptMsg(msg, uid, mgr);
2018-09-20 11:17:09 -07:00
}
2018-12-07 21:30:43 -08:00
void CScriptSteam::Think(float dt, CStateManager& mgr) {
if (!GetActive()) {
2018-12-07 21:30:43 -08:00
return;
}
2018-12-07 21:30:43 -08:00
CScriptTrigger::Think(dt, mgr);
if (x148_28_playerTriggerProc && mgr.GetCameraManager()->GetFluidCounter() == 0) {
const zeus::CVector3f eyePos = mgr.GetPlayer().GetEyePosition();
const zeus::CVector3f posDiff = (GetTranslation() - eyePos);
const float mag = posDiff.magnitude();
const float distance = (mag >= x164_ ? 0.f : std::cos((1.5707964f * mag) * x168_) * x158_);
2023-10-17 20:21:00 -07:00
mgr.Player()->SetVisorSteam(distance, x15c_alphaInDur, x160_alphaOutDur, x154_texture, !x150_);
if (x150_) {
2018-12-07 21:30:43 -08:00
mgr.GetEnvFxManager()->SetSplashRate(2.f * distance);
}
} else {
2023-10-17 20:21:00 -07:00
mgr.Player()->SetVisorSteam(0.f, x15c_alphaInDur, x160_alphaOutDur, CAssetId(), !x150_);
}
2017-02-27 23:31:14 -08:00
}
2021-04-10 01:42:06 -07:00
} // namespace metaforce