/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use euclid::RigidTransform3D;
use crate::{InputId, Joint};
#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "ipc", derive(serde::Serialize, serde::Deserialize))]
/// A stand-in type for "the space isn't statically known since
/// it comes from client side code"
pub struct ApiSpace;
#[derive(Clone, Copy, Debug, PartialEq)]
#[cfg_attr(feature = "ipc", derive(serde::Serialize, serde::Deserialize))]
pub enum BaseSpace {
Local,
Floor,
Viewer,
BoundedFloor,
TargetRay(InputId),
Grip(InputId),
Joint(InputId, Joint),
}
#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "ipc", derive(serde::Serialize, serde::Deserialize))]
pub struct Space {
pub base: BaseSpace,
pub offset: RigidTransform3D<f32, ApiSpace, ApiSpace>,
}