Files
botw/src/KingSystem/Physics/System/physShapeCastWithInfo.h
T
2022-03-15 01:20:41 +01:00

53 lines
1.5 KiB
C++

#pragma once
#include "KingSystem/Physics/System/physShapeCast.h"
#include "KingSystem/Physics/System/physSystem.h"
#include "KingSystem/Physics/physDefines.h"
namespace ksys::phys {
class SphereRigidBody;
class SystemGroupHandler;
class ShapeCastWithInfo : public ShapeCast {
SEAD_RTTI_OVERRIDE(ShapeCastWithInfo, ShapeCast)
public:
ShapeCastWithInfo(RigidBody* body, int num_contact_points, Mode mode,
const sead::SafeString& name, LowPriority low_priority);
ShapeCastWithInfo(RigidBody* body, QueryContactPointInfo* contact_point_info, Mode mode);
~ShapeCastWithInfo() override;
bool executeQuery(WeldClosestPoints weld_closest_points) override;
protected:
enum class Status {
_0 = 0,
_1 = 1,
_2 = 2,
_3 = 3,
};
void doCast(const hkpLinearCastInput& input, hkpCdPointCollector& cast_collector,
hkpCdPointCollector* start_collector) override;
Status mStatus = Status::_0;
};
class SphereCast : public ShapeCastWithInfo {
SEAD_RTTI_OVERRIDE(SphereCast, ShapeCastWithInfo)
public:
SphereCast(ContactLayer layer, GroundHit ground_hit, SystemGroupHandler* group_handler,
int num_contact_points, Mode mode, const sead::Vector3f& from, float sphere_radius,
const sead::SafeString& name, LowPriority low_priority);
~SphereCast() override;
void setRadius(float radius);
private:
SphereRigidBody* mSphere;
};
} // namespace ksys::phys