A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectBelt.hh
1#pragma once
2
3#include "game/field/obj/ObjectDrivable.hh"
4
5namespace Field {
6
8class ObjectBelt : public ObjectDrivable {
9public:
10 ObjectBelt(const System::MapdataGeoObj &params);
11 ~ObjectBelt() override;
12
14 [[nodiscard]] u32 loadFlags() const override {
15 return 1;
16 }
17
19 void createCollision() override {}
20
22 void calcCollisionTransform() override {}
23
25 [[nodiscard]] f32 getCollisionRadius() const override {
26 return 25000.0f;
27 }
28
30 [[nodiscard]] bool checkPointPartial(const EGG::Vector3f & /*pos*/,
31 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/,
32 CollisionInfoPartial * /*info*/, KCLTypeMask * /*maskOut*/) override {
33 return false;
34 }
35
37 [[nodiscard]] bool checkPointPartialPush(const EGG::Vector3f & /*pos*/,
38 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/,
39 CollisionInfoPartial * /*info*/, KCLTypeMask * /*maskOut*/) override {
40 return false;
41 }
42
44 [[nodiscard]] bool checkPointFull(const EGG::Vector3f & /*pos*/,
45 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/, CollisionInfo * /*info*/,
46 KCLTypeMask * /*maskOut*/) override {
47 return false;
48 }
49
51 [[nodiscard]] bool checkPointFullPush(const EGG::Vector3f &pos, const EGG::Vector3f &prevPos,
52 KCLTypeMask mask, CollisionInfo *info, KCLTypeMask *maskOut) override {
53 return calcCollision(pos, prevPos, mask, info, maskOut, 0);
54 }
55
57 [[nodiscard]] bool checkSpherePartial(f32 /*radius*/, const EGG::Vector3f & /*pos*/,
58 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/,
59 CollisionInfoPartial * /*info*/, KCLTypeMask * /*maskOut*/,
60 u32 /*timeOffset*/) override {
61 return false;
62 }
63
65 [[nodiscard]] bool checkSpherePartialPush(f32 /*radius*/, const EGG::Vector3f & /*pos*/,
66 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/,
67 CollisionInfoPartial * /*info*/, KCLTypeMask * /*maskOut*/,
68 u32 /*timeOffset*/) override {
69 return false;
70 }
71
73 [[nodiscard]] bool checkSphereFull(f32 /*radius*/, const EGG::Vector3f & /*pos*/,
74 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/, CollisionInfo * /*info*/,
75 KCLTypeMask * /*maskOut*/, u32 /*timeOffset*/) override {
76 return false;
77 }
78
80 [[nodiscard]] bool checkSphereFullPush(f32 /*radius*/, const EGG::Vector3f &pos,
81 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
82 KCLTypeMask *maskOut, u32 timeOffset) override {
83 return calcCollision(pos, prevPos, mask, info, maskOut, timeOffset);
84 }
85
87 [[nodiscard]] bool checkPointCachedPartial(const EGG::Vector3f & /*pos*/,
88 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/,
89 CollisionInfoPartial * /*info*/, KCLTypeMask * /*maskOut*/) override {
90 return false;
91 }
92
94 [[nodiscard]] bool checkPointCachedPartialPush(const EGG::Vector3f & /*pos*/,
95 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/,
96 CollisionInfoPartial * /*info*/, KCLTypeMask * /*maskOut*/) override {
97 return false;
98 }
99
101 [[nodiscard]] bool checkPointCachedFull(const EGG::Vector3f & /*pos*/,
102 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/, CollisionInfo * /*info*/,
103 KCLTypeMask * /*maskOut*/) override {
104 return false;
105 }
106
108 [[nodiscard]] bool checkPointCachedFullPush(const EGG::Vector3f &pos,
109 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
110 KCLTypeMask *maskOut) override {
111 return calcCollision(pos, prevPos, mask, info, maskOut, 0);
112 }
113
115 [[nodiscard]] bool checkSphereCachedPartial(f32 /*radius*/, const EGG::Vector3f & /*pos*/,
116 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/,
117 CollisionInfoPartial * /*info*/, KCLTypeMask * /*maskOut*/,
118 u32 /*timeOffset*/) override {
119 return false;
120 }
121
123 [[nodiscard]] bool checkSphereCachedPartialPush(f32 /*radius*/, const EGG::Vector3f & /*pos*/,
124 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/,
125 CollisionInfoPartial * /*info*/, KCLTypeMask * /*maskOut*/,
126 u32 /*timeOffset*/) override {
127 return false;
128 }
129
131 [[nodiscard]] bool checkSphereCachedFull(f32 /*radius*/, const EGG::Vector3f & /*pos*/,
132 const EGG::Vector3f & /*prevPos*/, KCLTypeMask /*mask*/, CollisionInfo * /*info*/,
133 KCLTypeMask * /*maskOut*/, u32 /*timeOffset*/) override {
134 return false;
135 }
136
138 [[nodiscard]] bool checkSphereCachedFullPush(f32 /*radius*/, const EGG::Vector3f &pos,
139 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
140 KCLTypeMask *maskOut, u32 timeOffset) override {
141 return calcCollision(pos, prevPos, mask, info, maskOut, timeOffset);
142 }
143
144 [[nodiscard]] virtual EGG::Vector3f calcRoadVelocity(u32 variant, const EGG::Vector3f &pos,
145 u32 timeOffset) const = 0;
146
147 [[nodiscard]] virtual bool isMoving(u32 variant, const EGG::Vector3f &pos) const = 0;
148
149protected:
150 f32 m_roadVel;
151
152private:
153 [[nodiscard]] virtual bool calcCollision(const EGG::Vector3f &v0, const EGG::Vector3f &v1,
154 KCLTypeMask mask, CollisionInfo *info, KCLTypeMask *maskOut, u32 timeOffset);
155};
156
157} // namespace Field
The base class for a conveyer belt which induces road velocity.
Definition ObjectBelt.hh:8
Pertains to collision.
A 3D float vector.
Definition Vector.hh:87