use serde::{Deserialize, Serialize};
use std::fmt::Debug;
use std::hash::Hash;
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(bound = "InputData: Serialize + for<'de2> Deserialize<'de2>")]
pub struct SequencedClientInput<InputData: Clone + Debug> {
pub sequence_number: u64,
pub input_data: InputData,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(bound = "
PlayerStateData: Serialize + for<'de2> Deserialize<'de2>,
ServerTimeType: Serialize + for<'de2> Deserialize<'de2>
")]
pub struct AuthoritativeStateUpdate<PlayerStateData: Clone + Debug, ServerTimeType: Clone + Debug + Default> {
pub last_processed_input_seq: u64,
pub authoritative_player_state: PlayerStateData,
pub server_time_at_state: ServerTimeType,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(bound = "
ActionData: Serialize + for<'de2> Deserialize<'de2>,
ClientTimeType: Serialize + for<'de2> Deserialize<'de2>
")]
pub struct TimestampedClientAction<ActionData: Clone + Debug, ClientTimeType: Clone + Debug + Default> {
pub client_action_time: ClientTimeType,
pub action_data: ActionData,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(bound = "
EntityKey: Serialize + for<'de2> Deserialize<'de2>,
ServerTimeType: Serialize + for<'de2> Deserialize<'de2>,
V3: Serialize + for<'de2> Deserialize<'de2>,
Q: Serialize + for<'de2> Deserialize<'de2>
")]
pub struct RemoteEntitySnapshot<EntityKey, ServerTimeType, V3, Q>
where
EntityKey: Clone + Debug + Eq + Hash,
ServerTimeType: Clone + Debug + Default,
V3: Clone + Debug + Default,
Q: Clone + Debug + Default,
{
pub entity_id: EntityKey,
pub server_time: ServerTimeType,
pub position: V3,
pub rotation: Q,
pub linear_velocity: Option<V3>,
pub angular_velocity: Option<Q>,
}