A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectTwistedWay.hh
1#pragma once
2
3#include "game/field/obj/ObjectDrivable.hh"
4
5namespace Field {
6
11public:
13 ~ObjectTwistedWay() override;
14
16 void init() override {
17 m_introTimer = 1000;
18 }
19
20 void calc() override;
21
23 [[nodiscard]] u32 loadFlags() const override {
24 return 1;
25 }
26
28 void createCollision() override {}
29
31 void calcCollisionTransform() override {}
32
34 [[nodiscard]] f32 getCollisionRadius() const override {
35 return HALF_DEPTH;
36 }
37
38 [[nodiscard]] bool checkPointPartial(const EGG::Vector3f &v0, const EGG::Vector3f &v1,
39 KCLTypeMask flags, CollisionInfoPartial *pInfo, KCLTypeMask *pFlagsOut) override;
40 [[nodiscard]] bool checkPointPartialPush(const EGG::Vector3f &v0, const EGG::Vector3f &v1,
41 KCLTypeMask flags, CollisionInfoPartial *pInfo, KCLTypeMask *pFlagsOut) override;
42 [[nodiscard]] bool checkPointFull(const EGG::Vector3f &v0, const EGG::Vector3f &v1,
43 KCLTypeMask flags, CollisionInfo *pInfo, KCLTypeMask *pFlagsOut) override;
44 [[nodiscard]] bool checkPointFullPush(const EGG::Vector3f &v0, const EGG::Vector3f &v1,
45 KCLTypeMask flags, CollisionInfo *pInfo, KCLTypeMask *pFlagsOut) override;
46 [[nodiscard]] bool checkSpherePartial(f32 radius, const EGG::Vector3f &v0,
47 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfoPartial *pInfo,
48 KCLTypeMask *pFlagsOut, u32 timeOffset) override;
49 [[nodiscard]] bool checkSpherePartialPush(f32 radius, const EGG::Vector3f &v0,
50 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfoPartial *pInfo,
51 KCLTypeMask *pFlagsOut, u32 timeOffset) override;
52 [[nodiscard]] bool checkSphereFull(f32 radius, const EGG::Vector3f &v0, const EGG::Vector3f &v1,
53 KCLTypeMask flags, CollisionInfo *pInfo, KCLTypeMask *pFlagsOut,
54 u32 timeOffset) override;
55 [[nodiscard]] bool checkSphereFullPush(f32 radius, const EGG::Vector3f &v0,
56 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfo *pInfo,
57 KCLTypeMask *pFlagsOut, u32 timeOffset) override;
58 [[nodiscard]] bool checkPointCachedPartial(const EGG::Vector3f &v0, const EGG::Vector3f &v1,
59 KCLTypeMask flags, CollisionInfoPartial *pInfo, KCLTypeMask *pFlagsOut) override;
60 [[nodiscard]] bool checkPointCachedPartialPush(const EGG::Vector3f &v0, const EGG::Vector3f &v1,
61 KCLTypeMask flags, CollisionInfoPartial *pInfo, KCLTypeMask *pFlagsOut) override;
62 [[nodiscard]] bool checkPointCachedFull(const EGG::Vector3f &v0, const EGG::Vector3f &v1,
63 KCLTypeMask flags, CollisionInfo *pInfo, KCLTypeMask *pFlagsOut) override;
64 [[nodiscard]] bool checkPointCachedFullPush(const EGG::Vector3f &v0, const EGG::Vector3f &v1,
65 KCLTypeMask flags, CollisionInfo *pInfo, KCLTypeMask *pFlagsOut) override;
66 [[nodiscard]] bool checkSphereCachedPartial(f32 radius, const EGG::Vector3f &v0,
67 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfoPartial *pInfo,
68 KCLTypeMask *pFlagsOut, u32 timeOffset) override;
69 [[nodiscard]] bool checkSphereCachedPartialPush(f32 radius, const EGG::Vector3f &v0,
70 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfoPartial *pInfo,
71 KCLTypeMask *pFlagsOut, u32 timeOffset) override;
72 [[nodiscard]] bool checkSphereCachedFull(f32 radius, const EGG::Vector3f &v0,
73 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfo *pInfo,
74 KCLTypeMask *pFlagsOut, u32 timeOffset) override;
75 [[nodiscard]] bool checkSphereCachedFullPush(f32 radius, const EGG::Vector3f &v0,
76 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfo *pInfo,
77 KCLTypeMask *pFlagsOut, u32 timeOffset) override;
78
79private:
80 [[nodiscard]] bool checkSpherePartialImpl(f32 radius, const EGG::Vector3f &v0,
81 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfoPartial *pInfo,
82 KCLTypeMask *pFlagsOut, u32 timeOffset);
83 [[nodiscard]] bool checkSpherePartialPushImpl(f32 radius, const EGG::Vector3f &v0,
84 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfoPartial *pInfo,
85 KCLTypeMask *pFlagsOut, u32 timeOffset);
86 [[nodiscard]] bool checkSphereFullImpl(f32 radius, const EGG::Vector3f &v0,
87 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfo *pInfo,
88 KCLTypeMask *pFlagsOut, u32 timeOffset);
89 [[nodiscard]] bool checkSphereFullPushImpl(f32 radius, const EGG::Vector3f &v0,
90 const EGG::Vector3f &v1, KCLTypeMask flags, CollisionInfo *pInfo,
91 KCLTypeMask *pFlagsOut, u32 timeOffset);
92
93 template <typename T>
94 requires std::is_same_v<T, CollisionInfo> || std::is_same_v<T, CollisionInfoPartial>
95 [[nodiscard]] bool checkSphereImpl(f32 radius, const EGG::Vector3f &v0, const EGG::Vector3f &v1,
96 KCLTypeMask flags, T *pInfo, KCLTypeMask *pFlagsOut, u32 timeOffset, bool push);
97
98 template <typename T>
99 requires std::is_same_v<T, CollisionInfo> || std::is_same_v<T, CollisionInfoPartial>
100 [[nodiscard]] bool checkWallCollision(f32 angle, f32 radius, u32 t, const EGG::Vector3f &relPos,
101 T *pInfo, KCLTypeMask *pFlagsOut, bool push);
102
103 template <typename T>
104 requires std::is_same_v<T, CollisionInfo> || std::is_same_v<T, CollisionInfoPartial>
105 [[nodiscard]] bool checkFloorCollision(f32 angle, f32 radius, const EGG::Vector3f &relPos,
106 T *pInfo, KCLTypeMask *pFlagsOut, bool push);
107
108 [[nodiscard]] bool checkPoleCollision(f32 radius, f32 angle, const EGG::Vector3f &relPos,
109 EGG::Vector3f &v0, EGG::Vector3f &fnrm, f32 &dist);
110
111 [[nodiscard]] f32 calcWave(f32 zPercent, u32 t);
112
113 u32 m_introTimer;
114
115 static constexpr s32 PERIOD_LENGTH = 120;
116 static constexpr f32 WIDTH = 2000.0f;
117 static constexpr f32 HALF_DEPTH = 7500.0f;
118};
119
120} // namespace Field
The wavy road in Bowser's Castle.
static constexpr s32 PERIOD_LENGTH
Framecount of full oscillation.
bool checkSphereImpl(f32 radius, const EGG::Vector3f &v0, const EGG::Vector3f &v1, KCLTypeMask flags, T *pInfo, KCLTypeMask *pFlagsOut, u32 timeOffset, bool push)
Helper function which contains frequently re-used code. Behavior branches depending on whether it is ...
static constexpr f32 HALF_DEPTH
Half the length of the wavy road.
Pertains to collision.
A 3D float vector.
Definition Vector.hh:88