mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-10-23 16:55:47 +00:00
42 lines
1.5 KiB
C++
42 lines
1.5 KiB
C++
#include "MetroidPrime/ScriptObjects/CScriptCameraShaker.hpp"
|
|
|
|
#include "MetroidPrime/CGameArea.hpp"
|
|
#include "MetroidPrime/CStateManager.hpp"
|
|
#include "MetroidPrime/CWorld.hpp"
|
|
#include "MetroidPrime/Cameras/CCameraManager.hpp"
|
|
|
|
|
|
CScriptCameraShaker::CScriptCameraShaker(TUniqueId uid, const rstl::string& name,
|
|
const CEntityInfo& info, bool active,
|
|
const CCameraShakeData& shakeData)
|
|
: CEntity(uid, info, active, name), x34_shakeData(shakeData) {}
|
|
|
|
void CScriptCameraShaker::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId,
|
|
CStateManager& stateMgr) {
|
|
switch (msg) {
|
|
case kSM_Action: {
|
|
if (GetActive() && GetCurrentAreaId() != kInvalidAreaId) {
|
|
const CGameArea& area = stateMgr.GetWorld()->GetAreaAlways(GetCurrentAreaId());
|
|
CGameArea::EOcclusionState occState =
|
|
area.IsLoaded() ? area.GetOcclusionState() : CGameArea::kOS_Occluded;
|
|
if (occState != CGameArea::kOS_Occluded) {
|
|
x34_shakeData.SetShakerId(stateMgr.CameraManager()->AddCameraShaker(x34_shakeData, false));
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case kSM_Deactivate: {
|
|
if (GetActive())
|
|
stateMgr.CameraManager()->RemoveCameraShaker(x34_shakeData.GetShakerId());
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
CEntity::AcceptScriptMsg(msg, objId, stateMgr);
|
|
}
|
|
|
|
void CScriptCameraShaker::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|
|
|
|
CScriptCameraShaker::~CScriptCameraShaker() {}
|