A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectPsea.cc
1#include "ObjectPsea.hh"
2
3#include "game/field/ObjectDirector.hh"
4
5namespace Field {
6
8ObjectPsea::ObjectPsea(const System::MapdataGeoObj &params)
9 : ObjectCollidable(params), m_period(F_TAU / static_cast<f32>(CYCLE_DURATION)) {
10 constexpr EGG::Vector3f POS_OFFSET = EGG::Vector3f(0.0f, 6.75f, 0.0f) * 96.0f;
11 constexpr EGG::Vector3f EXTRA_OFFSET = EGG::Vector3f(0.0f, 1.0f, 0.0f);
12
13 m_frame = 0;
14 m_initPosY = (m_pos + POS_OFFSET + EXTRA_OFFSET).y;
15
16 auto *objDir = ObjectDirector::Instance();
17 ASSERT(!objDir->psea());
18 objDir->setPsea(this);
19}
20
22ObjectPsea::~ObjectPsea() = default;
23
25void ObjectPsea::calc() {
26 constexpr f32 POS_OFFSET = 9590.399f;
27 constexpr f32 AMPLITUDE = 140.0f;
28
29 f32 sin = EGG::Mathf::sin(m_period * static_cast<f32>(m_frame));
30
31 if (CYCLE_DURATION < m_frame++) {
32 m_frame = 0;
33 }
34
35 m_pos.y = m_initPosY + AMPLITUDE * sin + POS_OFFSET;
36 m_flags.setBit(eFlags::Position);
37}
38
39} // namespace Field
static f32 sin(f32 x)
Definition Math.hh:37
Pertains to collision.
A 3D float vector.
Definition Vector.hh:88