9#ifndef AVARA3D_PHYSICS_PROXY_PHYSICSWORLDPROXY_H
10#define AVARA3D_PHYSICS_PROXY_PHYSICSWORLDPROXY_H
17#include "a3d/physics/PhysicsContact.h"
18#include "a3d/physics/PhysicsWorld.h"
19#include "a3d/scene/HitTestResult.h"
20#include "a3d/scene/Scene.h"
31 class PhysicsWorldProxy {
36 enum class ContactEventType : uint8_t {
43 ContactEventType type;
44 PhysicsContact contact;
47 using ContactEvents = std::vector<ContactEvent>;
51 explicit PhysicsWorldProxy(PhysicsWorld& world);
53 PhysicsWorldProxy(
const PhysicsWorldProxy&) =
delete;
54 PhysicsWorldProxy& operator=(
const PhysicsWorldProxy&) =
delete;
56 PhysicsWorldProxy(PhysicsWorldProxy&&) =
delete;
57 PhysicsWorldProxy& operator=(PhysicsWorldProxy&&) =
delete;
59 virtual ~PhysicsWorldProxy();
63 virtual void add(PhysicsBody& body) = 0;
64 virtual void remove(PhysicsBody& body) = 0;
66 virtual math::vec3 gravity()
const = 0;
67 virtual void gravity(
const math::vec3& gravity) = 0;
69 virtual const ContactEvents& step(
double deltaTime, Profiler& profiler) = 0;
71 virtual std::optional<PhysicsContact> contactTest(
const PhysicsBody& bodyA,
72 const PhysicsBody& bodyB)
const = 0;
73 virtual std::vector<PhysicsContact> contactTest(
const PhysicsBody& body)
const = 0;
74 virtual std::vector<HitTestResult> rayTest(
const math::vec3& from,
76 HitTestSearchMode searchMode)
const = 0;
78 virtual std::vector<PhysicsContact> convexSweepTest(
const PhysicsShape& shape,
79 const math::mat4& fromMat,
80 const math::mat4& toMat,
81 HitTestSearchMode searchMode)
const = 0;
83 virtual PhysicsWorld::Inventory inventory()
const = 0;
85 virtual void appendDebugLines(std::vector<Line>& out,
Scene::DebugOptions debugOptions) = 0;
DebugOptions
Scene-wide debug visualization options.