10class ObjectTwistedWay :
public ObjectDrivable {
13 ~ObjectTwistedWay()
override;
16 void init()
override {
28 void createCollision()
override {}
31 void calcCollisionTransform()
override {}
34 [[nodiscard]] f32 getCollisionRadius()
const override {
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;
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);
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);
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);
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);
108 [[nodiscard]]
bool checkPoleCollision(f32 radius, f32 angle,
const EGG::Vector3f &relPos,
109 EGG::Vector3f &v0, EGG::Vector3f &fnrm, f32 &dist);
111 [[nodiscard]] f32 calcWave(f32 zPercent, u32 t);
116 static constexpr f32 WIDTH = 2000.0f;