naia_shared/world/component/
component_update.rs

1use naia_serde::{BitReader, OwnedBitReader, SerdeErr};
2
3use crate::{
4    world::component::component_kinds::ComponentKind, ComponentKinds,
5    LocalEntityAndGlobalEntityConverter, RemoteEntity,
6};
7
8pub struct ComponentUpdate {
9    pub kind: ComponentKind,
10    buffer: OwnedBitReader,
11}
12
13impl ComponentUpdate {
14    pub fn new(kind: ComponentKind, buffer: OwnedBitReader) -> Self {
15        Self { kind, buffer }
16    }
17
18    pub fn reader(&self) -> BitReader {
19        self.buffer.borrow()
20    }
21
22    pub(crate) fn split_into_waiting_and_ready(
23        self,
24        converter: &dyn LocalEntityAndGlobalEntityConverter,
25        component_kinds: &ComponentKinds,
26    ) -> Result<
27        (
28            Option<Vec<(RemoteEntity, ComponentFieldUpdate)>>,
29            Option<Self>,
30        ),
31        SerdeErr,
32    > {
33        let kind = self.kind;
34        component_kinds.split_update(converter, &kind, self)
35    }
36}
37
38pub struct ComponentFieldUpdate {
39    id: u8,
40    buffer: OwnedBitReader,
41}
42
43impl ComponentFieldUpdate {
44    pub fn new(id: u8, buffer: OwnedBitReader) -> Self {
45        Self { id, buffer }
46    }
47
48    pub fn field_id(&self) -> u8 {
49        self.id
50    }
51
52    pub fn reader(&self) -> BitReader {
53        self.buffer.borrow()
54    }
55}