Skip to main content

khora_data/physics/
collision.rs

1// Copyright 2025 eraflo
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15//! Broadphase collision-pair scratch.
16//!
17//! Plain data (never an ECS component, to keep it out of the editor scene
18//! tree and off the structural-mutation path) meant to live as an
19//! `Arc<Mutex<CollisionPairs>>` [`Resource`](khora_core::Resources). It has
20//! no consumer today — the experimental native broadphase/solver lanes that
21//! used it were removed — but is kept as a reusable serializable type.
22
23use bincode::{Decode, Encode};
24use khora_core::ecs::entity::EntityId;
25use serde::{Deserialize, Serialize};
26
27/// A pair of entities that are potentially colliding.
28#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Encode, Decode)]
29pub struct CollisionPair {
30    /// The first entity in the pair.
31    pub entity_a: EntityId,
32    /// The second entity in the pair.
33    pub entity_b: EntityId,
34}
35
36/// Sink of potential collision pairs identified during broadphase.
37///
38/// Intended to live in [`khora_core::Resources`] as
39/// `Arc<Mutex<CollisionPairs>>`: a broadphase pass overwrites the inner
40/// `pairs` vector each frame and a resolution pass reads it.
41#[derive(Debug, Clone, Default, Serialize, Deserialize)]
42pub struct CollisionPairs {
43    /// List of potential collision pairs detected this frame.
44    pub pairs: Vec<CollisionPair>,
45}