Toast Engine
Toggle main menu visibility
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
17
namespace
physics {
18
19
enum 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
33
struct
ManifoldQueue
{
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
43
class
NarrowPhase
{
44
public
:
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
51
private
:
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
}
physics::NarrowPhase
Definition
narrow_phase.hpp:43
physics::NarrowPhase::accumulate
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
collision_world.hpp
Read-only access to physics data used by collision detection.
manifold.hpp
TODO: Brief description of the file's purpose.
physics::BroadPhasePair
Definition
collision.hpp:24
physics::CollisionWorldView
Definition
collision_world.hpp:16
physics::ManifoldQueue
Definition
narrow_phase.hpp:33
physics::Manifold
Definition
manifold.hpp:41
engine
src
toast
physics
narrow_phase.hpp
Generated by
1.17.0