1use crate::diff_ser::DiffSerializer;
2use crate::multiplayer_tradeoff::{Immediate, WaitForConsensus};
3use crate::networked_types::primitive::usize32;
4use crate::simulation::{Input, State};
5use crate::simulation_controller::GameContext;
6use crate::tick::TickID;
7
8pub mod multiplayer_tradeoff;
9pub mod physics;
10
11pub mod simulation_controller;
14
15#[cfg_attr(not(any(feature = "server", feature = "client")), doc(hidden))]
19pub mod thread_comms;
20
21pub mod tick;
23
24pub mod networked_types;
26
27mod misc;
30pub(crate) use misc::*;
31
32mod handwritten {
33 pub(crate) mod constructors;
34 pub(crate) mod diff_des;
35 pub(crate) mod diff_ser;
36 pub(crate) mod interpolation;
37 pub(crate) mod simulation;
38 pub(crate) mod snapshot_serdes;
39 pub(crate) mod untracked;
40
41 #[cfg(feature = "client")]
42 pub(crate) mod presentation;
43}
44
45#[allow(unused, dead_code)]
46mod generated {
47 pub(crate) mod constructors;
48 pub(crate) mod diff_des;
49 pub(crate) mod diff_ser;
50 pub(crate) mod interpolation;
51 pub(crate) mod simulation;
52 pub(crate) mod snapshot_serdes;
53 pub(crate) mod untracked;
54
55 #[cfg(feature = "client")]
56 pub(crate) mod presentation;
57}
58
59#[cfg_attr(not(any(feature = "server", feature = "client")), doc(hidden))]
61pub mod simulation {
62 pub use super::generated::simulation::*;
63 pub use super::handwritten::simulation::*;
64}
65
66pub(crate) mod constructors {
68 pub use super::handwritten::constructors::*;
69}
70
71pub mod diff_ser {
76 pub use super::handwritten::diff_ser::*;
77
78 #[cfg(feature = "client")]
79 pub(crate) use super::generated::diff_ser::*;
80}
81
82pub(crate) mod diff_des {
90 pub use super::handwritten::diff_des::*;
91
92 #[cfg(feature = "server")]
93 pub use super::generated::diff_des::*;
94}
95
96pub(crate) mod snapshot_serdes {
105 pub use super::handwritten::snapshot_serdes::*;
106}
107
108pub(crate) mod untracked {
115 pub use super::handwritten::untracked::*;
116}
117
118#[cfg(feature = "client")]
123pub mod presentation {
124 pub use super::generated::presentation::*;
125 pub use super::handwritten::presentation::*;
126}
127
128pub mod interpolation {
130 #[cfg(feature = "client")]
131 pub use super::generated::interpolation::*;
132
133 pub use super::handwritten::interpolation::*;
134}
135
136pub mod prelude {
138 pub use crate::SimulationInitOptions;
139 pub use crate::diff_ser::DiffSerializer;
140 pub use crate::multiplayer_tradeoff; pub use crate::multiplayer_tradeoff::*;
142 pub use crate::networked_types::primitive::usize32;
143 pub use crate::simulation::*;
144 pub use crate::simulation_controller::GameContext;
145 pub use crate::tick::{TickID, TickInfo};
146 pub use borger_procmac::server;
147 pub use log::{debug, error, info, warn};
148}
149
150pub struct SimulationInitOptions {
151 pub init_static_level_geom: Option<fn(&mut State)>,
153 pub simulation_loop: fn(&mut GameContext<Immediate>),
154
155 pub input_merge: fn(&Input, &Input) -> Input,
157 pub input_validate: fn(&Input) -> Input,
158 pub input_server_predict_late: fn(
159 &Input,
160 &State,
161 usize32,
162 bool,
163 ) -> Input,
164 pub input_client_predict_late:
165 fn(&Input, &State, usize32) -> Input,
166
167 pub on_server_start: fn(&mut State, &mut DiffSerializer<WaitForConsensus>), pub on_client_connect: fn(
170 &mut State,
171 usize32,
172 TickID,
173 &mut DiffSerializer<WaitForConsensus>,
174 ),
175 pub on_client_disconnect: fn(
176 &mut State,
177 usize32,
178 TickID,
179 &mut DiffSerializer<WaitForConsensus>,
180 ),
181}