Kinoko
A reimplementation of Mario Kart Wii's physics engine in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
ObjectHighwayManager.cc
1
#include "ObjectHighwayManager.hh"
2
3
#include "game/field/ObjectDirector.hh"
4
#include "game/field/obj/ObjectCarTGE.hh"
5
6
namespace
Kinoko::Field
{
7
9
ObjectHighwayManager::ObjectHighwayManager()
10
:
ObjectCollidable
(
"HighwayManager"
, EGG::Vector3f::zero, EGG::Vector3f::ez,
11
EGG::Vector3f::unit) {
12
size_t
carCount = 0;
13
auto
*objDir = ObjectDirector::Instance();
14
15
for
(
auto
*
const
&obj : objDir->managedObjects()) {
16
const
char
*objName = obj->getName();
17
18
if
((strcmp(objName,
"car_body"
) == 0) || (strcmp(objName,
"kart_truck"
) == 0)) {
19
++carCount;
20
}
21
}
22
23
m_cars = owning_span<ObjectCarTGE *>(carCount);
24
size_t
idx = 0;
25
26
for
(
auto
*&obj : objDir->managedObjects()) {
27
const
char
*objName = obj->getName();
28
29
if
((strcmp(objName,
"car_body"
) == 0) || (strcmp(objName,
"kart_truck"
) == 0)) {
30
auto
*carObj =
reinterpret_cast<
ObjectCarTGE *
>
(obj);
31
m_cars[idx++] = carObj;
32
carObj->setHighwayManager(
this
);
33
}
34
}
35
}
36
38
ObjectHighwayManager::~ObjectHighwayManager() =
default
;
39
41
void
ObjectHighwayManager::init() {
42
m_squashTimer = SQUASH_MAX;
43
}
44
46
void
ObjectHighwayManager::calc() {
47
calcSquash();
48
}
49
51
void
ObjectHighwayManager::calcSquash() {
52
constexpr
u32 SQUASH_INVULNERABILITY = 200;
53
54
bool
vulnerable = m_squashTimer >= SQUASH_INVULNERABILITY;
55
56
for
(
auto
*&obj : m_cars) {
57
if
(obj->squashed() && vulnerable) {
58
m_squashTimer = 0;
59
}
60
61
obj->reset();
62
}
63
64
m_squashTimer = std::min<u32>(m_squashTimer + 1, SQUASH_MAX);
65
}
66
67
}
// namespace Kinoko::Field
Kinoko::Field::ObjectCollidable
Definition
ObjectCollidable.hh:18
Kinoko::Field
Pertains to collision.
Definition
BoxColManager.cc:10
game
field
obj
ObjectHighwayManager.cc
Made by
Malleo
. Logo by
vabold
. Website generated by
Doxygen
1.17.0