A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectWoodboxW.cc
1#include "ObjectWoodboxW.hh"
2
3#include "game/field/obj/ObjectWoodboxWSub.hh"
4
5namespace Kinoko::Field {
6
8ObjectWoodboxW::ObjectWoodboxW(const System::MapdataGeoObj &params) : ObjectCollidable(params) {
9 constexpr u16 DEFAULT_BOX_COUNT = 5;
10
11 ObjectCollidable::init();
12
13 u16 boxCount = params.setting(6);
14
15 if (boxCount == 0) {
16 boxCount = DEFAULT_BOX_COUNT;
17 }
18
19 m_boxes = owning_span<ObjectWoodboxWSub *>(boxCount);
20
21 for (auto *&box : m_boxes) {
22 box = new ObjectWoodboxWSub(params);
23 box->load();
24 }
25}
26
28ObjectWoodboxW::~ObjectWoodboxW() = default;
29
31void ObjectWoodboxW::init() {
32 ASSERT(m_mapObj);
33 u32 frames = m_mapObj->setting(4);
34 if (frames == 0) {
35 frames = m_mapObj->setting(5);
36 }
37
38 m_framesUntilSpawn = frames;
39 m_nextBoxIdx = 0;
40}
41
43void ObjectWoodboxW::calc() {
44 if (--m_framesUntilSpawn >= 1) {
45 return;
46 }
47
48 ASSERT(m_mapObj);
49 m_framesUntilSpawn = m_mapObj->setting(5);
50 m_boxes[m_nextBoxIdx]->enableCollision();
51 m_nextBoxIdx = (m_nextBoxIdx + 1) % m_boxes.size();
52}
53
54} // namespace Kinoko::Field
Pertains to collision.