use serde::{Deserialize, Serialize};
use ts_rs::TS;
use super::base_types::Linear3D;
use super::primitives::{CenterMode, EasingType, SdfPrimitive};
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct NavigationState {
#[serde(default)]
pub bubble: Option<BubbleNavigationState>,
}
#[derive(Copy, Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct BubbleNavigationState {
#[serde(default)]
pub center: Option<Linear3D>,
#[serde(default)]
pub velocity_zone_width: Option<f32>,
#[serde(default)]
pub collision_extra_inflate: Option<f32>,
}
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct NavigationStatusInfo {
#[serde(default)]
pub mode: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct NavigationFullResponse {
#[serde(default)]
pub config: Option<BubbleNavigationSettings>,
#[serde(default)]
pub state: Option<BubbleNavigationState>,
#[serde(default)]
pub status: Option<NavigationStatusInfo>,
}
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct NavigationConfigure {
pub mode: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub bubble: Option<BubbleNavigationSettings>,
}
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct BubbleNavigationSettings {
#[serde(skip_serializing_if = "Option::is_none")]
pub center: Option<Linear3D>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shape: Option<SdfPrimitive>,
#[serde(skip_serializing_if = "Option::is_none")]
pub velocity_zone_width: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_velocity: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub velocity_ease: Option<EasingType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reset_velocity_on_entry: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bump_width: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bump_stiffness: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spring_inner: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spring_surface: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spring_outer: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wall_stiffness: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub damping_inner: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub damping_surface: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub damping_outer: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rotation_enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub scale_enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub center_mode: Option<CenterMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub center_drift_speed: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub workspace_bounded: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub workspace_transition_speed: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub workspace_transition_ease: Option<EasingType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_at_collision: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub collision_threshold: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub collision_inflate_scale: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_boundary_enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_boundary: Option<SdfPrimitive>,
}