A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectDrivable.hh
1#pragma once
2
3#include "game/field/CourseColMgr.hh"
4#include "game/field/ObjectCollisionBase.hh"
5#include "game/field/obj/ObjectBase.hh"
6
7namespace Field {
8
9class ObjectDrivable : public ObjectBase {
10public:
12 ~ObjectDrivable() override;
13
14 void load() override;
15
17 [[nodiscard]] f32 getCollisionRadius() const override {
18 return 5000.0f;
19 }
20
21 virtual void initCollision() {}
22 virtual void loadAABB(f32 radius);
23
24 [[nodiscard]] virtual bool checkPointPartial(const EGG::Vector3f &pos,
25 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
26 KCLTypeMask *maskOut) = 0;
27 [[nodiscard]] virtual bool checkPointPartialPush(const EGG::Vector3f &pos,
28 const EGG::Vector3f &prevPos, KCLTypeMask flags, CollisionInfoPartial *info,
29 KCLTypeMask *maskOut) = 0;
30 [[nodiscard]] virtual bool checkPointFull(const EGG::Vector3f &pos,
31 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
32 KCLTypeMask *maskOut) = 0;
33 [[nodiscard]] virtual bool checkPointFullPush(const EGG::Vector3f &pos,
34 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
35 KCLTypeMask *maskOut) = 0;
36
37 [[nodiscard]] virtual bool checkSpherePartial(f32 radius, const EGG::Vector3f &pos,
38 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
39 KCLTypeMask *maskOut, u32 timeOffset) = 0;
40 [[nodiscard]] virtual bool checkSpherePartialPush(f32 radius, const EGG::Vector3f &pos,
41 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
42 KCLTypeMask *maskOut, u32 timeOffset) = 0;
43 [[nodiscard]] virtual bool checkSphereFull(f32 radius, const EGG::Vector3f &pos,
44 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
45 KCLTypeMask *maskOut, u32 timeOffset) = 0;
46 [[nodiscard]] virtual bool checkSphereFullPush(f32 radius, const EGG::Vector3f &pos,
47 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
48 KCLTypeMask *maskOut, u32 timeOffset) = 0;
49
50 virtual void narrScLocal(f32 /*radius*/, const EGG::Vector3f & /*pos*/, KCLTypeMask /*mask*/,
51 u32 /*timeOffset*/) {}
52
53 [[nodiscard]] virtual bool checkPointCachedPartial(const EGG::Vector3f &pos,
54 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
55 KCLTypeMask *maskOut) = 0;
56 [[nodiscard]] virtual bool checkPointCachedPartialPush(const EGG::Vector3f &pos,
57 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
58 KCLTypeMask *maskOut) = 0;
59 [[nodiscard]] virtual bool checkPointCachedFull(const EGG::Vector3f &pos,
60 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
61 KCLTypeMask *maskOut) = 0;
62 [[nodiscard]] virtual bool checkPointCachedFullPush(const EGG::Vector3f &pos,
63 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
64 KCLTypeMask *maskOut) = 0;
65
66 [[nodiscard]] virtual bool checkSphereCachedPartial(f32 radius, const EGG::Vector3f &pos,
67 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
68 KCLTypeMask *maskOut, u32 timeOffset) = 0;
69 [[nodiscard]] virtual bool checkSphereCachedPartialPush(f32 radius, const EGG::Vector3f &pos,
70 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
71 KCLTypeMask *maskOut, u32 timeOffset) = 0;
72 [[nodiscard]] virtual bool checkSphereCachedFull(f32 radius, const EGG::Vector3f &pos,
73 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
74 KCLTypeMask *maskOut, u32 timeOffset) = 0;
75 [[nodiscard]] virtual bool checkSphereCachedFullPush(f32 radius, const EGG::Vector3f &pos,
76 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
77 KCLTypeMask *maskOut, u32 timeOffset) = 0;
78};
79
80} // namespace Field
Pertains to collision.
A 3D float vector.
Definition Vector.hh:87