1use smallvec::SmallVec;
4use std::fmt;
5use std::sync::atomic::{AtomicU64, Ordering};
6
7#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
12pub struct FieldId(pub u32);
13
14impl fmt::Display for FieldId {
15 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16 write!(f, "{}", self.0)
17 }
18}
19
20impl From<u32> for FieldId {
21 fn from(v: u32) -> Self {
22 Self(v)
23 }
24}
25
26#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
28pub struct SpaceId(pub u32);
29
30impl fmt::Display for SpaceId {
31 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32 write!(f, "{}", self.0)
33 }
34}
35
36impl From<u32> for SpaceId {
37 fn from(v: u32) -> Self {
38 Self(v)
39 }
40}
41
42static SPACE_INSTANCE_COUNTER: AtomicU64 = AtomicU64::new(1);
44
45#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
56pub struct SpaceInstanceId(u64);
57
58impl SpaceInstanceId {
59 #[must_use]
64 pub fn next() -> Self {
65 Self(SPACE_INSTANCE_COUNTER.fetch_add(1, Ordering::Relaxed))
66 }
67}
68
69impl fmt::Display for SpaceInstanceId {
70 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
71 write!(f, "{}", self.0)
72 }
73}
74
75#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
79pub struct TickId(pub u64);
80
81impl fmt::Display for TickId {
82 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
83 write!(f, "{}", self.0)
84 }
85}
86
87impl From<u64> for TickId {
88 fn from(v: u64) -> Self {
89 Self(v)
90 }
91}
92
93#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
98pub struct WorldGenerationId(pub u64);
99
100impl fmt::Display for WorldGenerationId {
101 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
102 write!(f, "{}", self.0)
103 }
104}
105
106impl From<u64> for WorldGenerationId {
107 fn from(v: u64) -> Self {
108 Self(v)
109 }
110}
111
112#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
117pub struct ParameterVersion(pub u64);
118
119impl fmt::Display for ParameterVersion {
120 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
121 write!(f, "{}", self.0)
122 }
123}
124
125impl From<u64> for ParameterVersion {
126 fn from(v: u64) -> Self {
127 Self(v)
128 }
129}
130
131#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
136pub struct ParameterKey(pub u32);
137
138impl fmt::Display for ParameterKey {
139 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
140 write!(f, "{}", self.0)
141 }
142}
143
144impl From<u32> for ParameterKey {
145 fn from(v: u32) -> Self {
146 Self(v)
147 }
148}
149
150pub type Coord = SmallVec<[i32; 4]>;