2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 05:07:43 +00:00

CCameraShakeData: Make classes and structs constexpr where applicable

Same behavior, but allows eliminating file-scope initializers needing to
be run on program start.
This commit is contained in:
Lioncash
2020-04-02 21:13:33 -04:00
parent f1e28a1290
commit d240e40a17
4 changed files with 150 additions and 109 deletions

View File

@@ -27,22 +27,6 @@ CCameraShakerComponent CCameraShakerComponent::LoadNewCameraShakerComponent(CInp
return {useModulation != 0, am, fm};
}
CCameraShakeData::CCameraShakeData(float duration, float sfxDist, u32 flags, const zeus::CVector3f& sfxPos,
const CCameraShakerComponent& shaker1, const CCameraShakerComponent& shaker2,
const CCameraShakerComponent& shaker3)
: x0_duration(duration)
, x8_shakerX(shaker1)
, x44_shakerY(shaker2)
, x80_shakerZ(shaker3)
, xc0_flags(flags)
, xc4_sfxPos(sfxPos)
, xd0_sfxDist(sfxDist) {}
CCameraShakeData::CCameraShakeData(float duration, float magnitude)
: CCameraShakeData(duration, 100.f, 0, zeus::skZero3f, CCameraShakerComponent{}, CCameraShakerComponent{},
CCameraShakerComponent{1, SCameraShakePoint{0, 0.25f * duration, 0.f, 0.75f * duration, magnitude},
SCameraShakePoint{1, 0.f, 0.f, 0.5f * duration, 2.f}}) {}
CCameraShakeData::CCameraShakeData(CInputStream& in) {
in.readUint32Big();
in.readFloatBig();
@@ -56,66 +40,6 @@ CCameraShakeData::CCameraShakeData(CInputStream& in) {
BuildProjectileCameraShake(0.5f, 0.75f);
}
CCameraShakeData CCameraShakeData::BuildLandingCameraShakeData(float duration, float magnitude) {
return {duration,
100.f,
0,
zeus::skZero3f,
CCameraShakerComponent(1, SCameraShakePoint(0, 0.15f * duration, 0.f, 0.85f * duration, magnitude),
SCameraShakePoint(1, 0.f, 0.f, 0.4f * duration, 1.5f)),
CCameraShakerComponent(),
CCameraShakerComponent(1, SCameraShakePoint(0, 0.25f * duration, 0.f, 0.75f * duration, magnitude),
SCameraShakePoint(1, 0.f, 0.f, 0.5f * duration, 2.f))};
}
CCameraShakeData CCameraShakeData::BuildProjectileCameraShake(float duration, float magnitude) {
return {duration,
100.f,
0,
zeus::skZero3f,
CCameraShakerComponent(1, SCameraShakePoint(0, 0.f, 0.f, duration, magnitude),
SCameraShakePoint(1, 0.f, 0.f, 0.5f * duration, 3.f)),
CCameraShakerComponent(),
CCameraShakerComponent()};
}
CCameraShakeData CCameraShakeData::BuildMissileCameraShake(float duration, float magnitude, float sfxDistance,
const zeus::CVector3f& sfxPos) {
CCameraShakeData ret(duration, magnitude);
ret.SetSfxPositionAndDistance(sfxPos, sfxDistance);
return ret;
}
CCameraShakeData CCameraShakeData::BuildPhazonCameraShakeData(float duration, float magnitude) {
return {duration,
100.f,
0,
zeus::skZero3f,
CCameraShakerComponent(1, SCameraShakePoint(0, 0.15f * duration, 0.f, 0.25f * duration, magnitude),
SCameraShakePoint(1, 0.f, 0.f, 0.4f * duration, 0.3f)),
CCameraShakerComponent(),
CCameraShakerComponent(1, SCameraShakePoint(0, 0.25f * duration, 0.f, 0.25f * duration, magnitude),
SCameraShakePoint(1, 0.f, 0.f, 0.5f * duration, 0.5f))};
}
CCameraShakeData CCameraShakeData::BuildPatternedExplodeShakeData(float duration, float magnitude) {
return {duration,
100.f,
0,
zeus::skZero3f,
CCameraShakerComponent(1, SCameraShakePoint(0, 0.25f * duration, 0.f, 0.75f * duration, magnitude),
SCameraShakePoint(1, 0.f, 0.f, 0.5f * duration, 2.0f)),
CCameraShakerComponent(),
CCameraShakerComponent()};
}
CCameraShakeData CCameraShakeData::BuildPatternedExplodeShakeData(const zeus::CVector3f& pos, float duration,
float magnitude, float distance) {
CCameraShakeData shakeData = CCameraShakeData::BuildPatternedExplodeShakeData(duration, magnitude);
shakeData.SetSfxPositionAndDistance(pos, distance);
return shakeData;
}
void SCameraShakePoint::Update(float curTime) {
float offTimePoint = xc_attackTime + x10_sustainTime;
float factor = 1.f;
@@ -198,13 +122,18 @@ CCameraShakeData CCameraShakeData::LoadCameraShakeData(CInputStream& in) {
return {duration, 100.f, 0, zeus::skZero3f, shakerX, shakerY, shakerZ};
}
const CCameraShakeData CCameraShakeData::skChargedShotCameraShakeData = {
const CCameraShakeData CCameraShakeData::skChargedShotCameraShakeData{
0.3f,
100.f,
0,
zeus::skZero3f,
CCameraShakerComponent(),
CCameraShakerComponent(1, {0, 0.f, 0.f, 0.3f, -1.f}, {1, 0.f, 0.f, 0.05f, 0.3f}),
CCameraShakerComponent()};
CCameraShakerComponent{},
CCameraShakerComponent{
true,
{false, 0.f, 0.f, 0.3f, -1.f},
{true, 0.f, 0.f, 0.05f, 0.3f},
},
CCameraShakerComponent{},
};
} // namespace urde