1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use super::{ffi, Value, ValueConverter, ValueConverterTrait, WorldData};
pub type PlayerId = ffi::PlayerId;
#[must_use]
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
pub struct PlayerIdSet {
set: WorldData,
}
impl PlayerIdSet {
pub fn new(players: &[PlayerId], exclusive: bool) -> Self {
let flags = if exclusive {
ffi::PlayerIdSetFlags::EXCLUSIVE
} else {
ffi::PlayerIdSetFlags::empty()
};
Self {
set: WorldData::create_struct(
ffi::CreateDataType::PlayerIdSet,
&ffi::PlayerIdSet {
player_ids_ptr: players.as_ptr() as u32,
num_player_ids: players.len() as u32,
flags,
reserved: [0; 4],
},
),
}
}
pub fn including(players: &[PlayerId]) -> Self {
Self::new(players, false)
}
pub fn excluding(players: &[PlayerId]) -> Self {
Self::new(players, true)
}
}
impl ValueConverterTrait<PlayerIdSet> for ValueConverter {
fn into_value(v: PlayerIdSet) -> Value {
<Self as ValueConverterTrait<WorldData>>::into_value(v.set)
}
fn from_value(v: &Value) -> PlayerIdSet {
PlayerIdSet {
set: <Self as ValueConverterTrait<WorldData>>::from_value(v),
}
}
}