bones_framework/networking/
input.rs

1//! Input traits required by networking. These traits are networking specific, either only used in networking,
2//! or extending other traits from [`crate::input`] for networking.
3
4use crate::input::{Controls, DenseControl, DenseInput};
5
6use super::NetworkInputStatus;
7
8/// Required for use of [`Controls`] in networking.
9pub trait NetworkControls<'a, Dense: DenseInput, Control>: Controls<'a, Control> {
10    /// Update control of player from dense input.
11    ///
12    /// [`NetworkInputStatus`] communicates if input is confirmed, predicted, or from disconnected player.
13    fn network_update(
14        &mut self,
15        player_idx: usize,
16        dense_input: &Dense,
17        status: NetworkInputStatus,
18    );
19
20    /// Get dense control for player.
21    fn get_dense_control(&self, player_idx: usize) -> Dense;
22}
23
24impl<'a, T, Dense, Control> NetworkControls<'a, Dense, Control> for T
25where
26    Dense: DenseInput,
27    Control: DenseControl<Dense>,
28    T: Controls<'a, Control>,
29{
30    // type NetworkControl = Control;
31    fn network_update(
32        &mut self,
33        player_idx: usize,
34        dense_input: &Dense,
35        _status: NetworkInputStatus,
36    ) {
37        self.get_control_mut(player_idx)
38            .update_from_dense(dense_input);
39    }
40
41    fn get_dense_control(&self, player_idx: usize) -> Dense {
42        self.get_control(player_idx).get_dense_input()
43    }
44}