Toast Engine
Loading...
Searching...
No Matches
narrow_phase.hpp
Go to the documentation of this file.
1
5
6#pragma once
7
8#include "collision_world.hpp"
9#include "manifold.hpp"
10
11#include <array>
12#include <cstddef>
13#include <cstdint>
14#include <span>
15#include <vector>
16
17namespace physics {
18
19enum class NarrowPhasePairType : uint8_t {
20 sphere_sphere,
21 sphere_box,
22 sphere_capsule,
23 box_box,
24 box_capsule,
25 capsule_capsule,
26 sphere_voxel,
27 box_voxel,
28 capsule_voxel,
29 voxel_voxel,
30 count
31};
32
34 std::vector<Manifold> manifolds;
35 std::array<size_t, static_cast<size_t>(NarrowPhasePairType::count)> pair_candidates = {};
36 std::array<double, static_cast<size_t>(NarrowPhasePairType::count)> pair_time_ms = {};
37 size_t candidate_count = 0;
38 size_t collision_count = 0;
39 size_t rejected_manifold_count = 0;
40 size_t contact_count = 0;
41};
42
44public:
45 [[nodiscard]]
46 auto generateManifolds(CollisionWorldView world, std::span<const BroadPhasePair> candidates) const -> ManifoldQueue;
47
49 void accumulate(std::span<Manifold> manifolds, CollisionWorldView world, ManifoldQueue& queue) const;
50
51private:
52 void collide(CollisionWorldView world, BroadPhasePair pair, std::vector<Manifold>& output) const;
53
54 [[nodiscard]]
55 auto validate(CollisionWorldView world, Manifold& manifold) const -> bool;
56
57 static void flip(Manifold& manifold);
58};
59
60}
Definition narrow_phase.hpp:43
void accumulate(std::span< Manifold > manifolds, CollisionWorldView world, ManifoldQueue &queue) const
Same validate/count/keep-or-reject step generateManifolds runs so a split pair can fold results in to...
Definition narrow_phase.cpp:83
Read-only access to physics data used by collision detection.
TODO: Brief description of the file's purpose.
Definition collision.hpp:24
Definition collision_world.hpp:16
Definition narrow_phase.hpp:33
Definition manifold.hpp:41