mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-12-21 12:59:10 +00:00
68
src/MetroidPrime/ScriptObjects/CScriptCameraPitchVolume.cpp
Normal file
68
src/MetroidPrime/ScriptObjects/CScriptCameraPitchVolume.cpp
Normal file
@@ -0,0 +1,68 @@
|
||||
#include "MetroidPrime/ScriptObjects/CScriptCameraPitchVolume.hpp"
|
||||
|
||||
#include "MetroidPrime/CActorParameters.hpp"
|
||||
#include "MetroidPrime/CStateManager.hpp"
|
||||
#include "MetroidPrime/Cameras/CCameraManager.hpp"
|
||||
#include "MetroidPrime/Cameras/CFirstPersonCamera.hpp"
|
||||
#include "MetroidPrime/Player/CPlayer.hpp"
|
||||
|
||||
const CVector3f CScriptCameraPitchVolume::skScaleFactor(0.5f, 0.5f, 0.5f);
|
||||
|
||||
CScriptCameraPitchVolume::CScriptCameraPitchVolume(TUniqueId uid, bool active,
|
||||
const rstl::string& name,
|
||||
const CEntityInfo& info, const CVector3f& scale,
|
||||
const CTransform4f& xf, const CRelAngle& upPitch,
|
||||
const CRelAngle& downPitch,
|
||||
float maxInterpDistance)
|
||||
: CActor(uid, active, name, info, xf, CModelData::CModelDataNull(), CMaterialList(kMT_Trigger),
|
||||
CActorParameters::None(), kInvalidUniqueId)
|
||||
, xe8_obbox(xf, CVector3f::ByElementMultiply(scale, skScaleFactor))
|
||||
, x124_upPitch(upPitch)
|
||||
, x128_downPitch(downPitch)
|
||||
, x12c_scale(CVector3f::ByElementMultiply(scale, skScaleFactor))
|
||||
, x138_maxInterpDistance(maxInterpDistance)
|
||||
, x13c_24_entered(false)
|
||||
, x13c_25_occupied(false) {}
|
||||
|
||||
void CScriptCameraPitchVolume::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|
||||
|
||||
rstl::optional_object< CAABox > CScriptCameraPitchVolume::GetTouchBounds() const {
|
||||
return xe8_obbox.CalculateAABox(CTransform4f::Identity());
|
||||
}
|
||||
|
||||
void CScriptCameraPitchVolume::Touch(CActor& act, CStateManager& mgr) {
|
||||
if (const CPlayer* player = TCastToConstPtr< CPlayer >(act)) {
|
||||
rstl::optional_object< CAABox > box = act.GetTouchBounds();
|
||||
if (box) {
|
||||
COBBox box2(COBBox::FromAABox(*box, CTransform4f::Identity()));
|
||||
x13c_24_entered = xe8_obbox.OBBIntersectsBox(box2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CScriptCameraPitchVolume::Think(float, CStateManager& mgr) {
|
||||
if (!GetActive()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (x13c_24_entered && !x13c_25_occupied) {
|
||||
Entered(mgr);
|
||||
}
|
||||
if (!x13c_24_entered && x13c_25_occupied) {
|
||||
Exited(mgr);
|
||||
}
|
||||
|
||||
x13c_24_entered = false;
|
||||
}
|
||||
|
||||
void CScriptCameraPitchVolume::Entered(CStateManager& mgr) {
|
||||
x13c_25_occupied = true;
|
||||
mgr.CameraManager()->FirstPersonCamera()->SetScriptPitchId(GetUniqueId());
|
||||
}
|
||||
|
||||
void CScriptCameraPitchVolume::Exited(CStateManager& mgr) {
|
||||
x13c_25_occupied = false;
|
||||
mgr.CameraManager()->FirstPersonCamera()->SetScriptPitchId(kInvalidUniqueId);
|
||||
}
|
||||
|
||||
CScriptCameraPitchVolume::~CScriptCameraPitchVolume() {}
|
||||
Reference in New Issue
Block a user