mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-08-13 18:19:07 +00:00
65 lines
2.2 KiB
C++
65 lines
2.2 KiB
C++
#include "MetroidPrime/ScriptObjects/CScriptCameraHintTrigger.hpp"
|
|
|
|
#include "MetroidPrime/CActorParameters.hpp"
|
|
|
|
CScriptCameraHintTrigger::CScriptCameraHintTrigger(TUniqueId uid, bool active,
|
|
const rstl::string& name,
|
|
const CEntityInfo& info, const CVector3f& scale,
|
|
const CTransform4f& xf, bool deactivateOnEnter,
|
|
bool deactivateOnExit)
|
|
: CActor(uid, active, name, info, xf, CModelData::CModelDataNull(), CMaterialList(kMT_Trigger),
|
|
CActorParameters::None(), kInvalidUniqueId)
|
|
, xe8_obb(xf, scale)
|
|
, x124_scale(scale)
|
|
, x130_24_deactivateOnEnter(deactivateOnEnter)
|
|
, x130_25_deactivateOnExit(deactivateOnExit)
|
|
, x130_26_playerInside(false)
|
|
, x130_27_playerWasInside(false)
|
|
{}
|
|
|
|
void CScriptCameraHintTrigger::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|
|
|
|
rstl::optional_object< CAABox > CScriptCameraHintTrigger::GetTouchBounds() const {
|
|
return xe8_obb.CalculateAABox(CTransform4f::Identity());
|
|
}
|
|
|
|
void CScriptCameraHintTrigger::Touch(CActor& other, CStateManager& mgr) {
|
|
if (TCastToConstPtr< CPlayer >(other)) {
|
|
rstl::optional_object< CAABox > bounds = other.GetTouchBounds();
|
|
if (bounds.valid()) {
|
|
COBBox otherObb = COBBox::FromAABox(*bounds, CTransform4f::Identity());
|
|
x130_26_playerInside = xe8_obb.OBBIntersectsBox(otherObb);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CScriptCameraHintTrigger::Think(float dt, CStateManager& mgr) {
|
|
if (!GetActive()) {
|
|
return;
|
|
}
|
|
|
|
if (x130_26_playerInside && !x130_27_playerWasInside) {
|
|
x130_27_playerWasInside = true;
|
|
SendScriptMsgs(kSS_Entered, mgr, kSM_None);
|
|
if (x130_24_deactivateOnEnter) {
|
|
mgr.SendScriptMsg(this, kInvalidUniqueId, kSM_Deactivate);
|
|
}
|
|
}
|
|
|
|
if (!x130_26_playerInside && x130_27_playerWasInside) {
|
|
x130_27_playerWasInside = false;
|
|
SendScriptMsgs(kSS_Exited, mgr, kSM_None);
|
|
if (x130_25_deactivateOnExit) {
|
|
mgr.SendScriptMsg(this, kInvalidUniqueId, kSM_Deactivate);
|
|
}
|
|
}
|
|
|
|
if (x130_26_playerInside) {
|
|
SendScriptMsgs(kSS_Inside, mgr, kSM_None);
|
|
}
|
|
|
|
x130_26_playerInside = false;
|
|
}
|
|
|
|
CScriptCameraHintTrigger::~CScriptCameraHintTrigger() {}
|