1use crate::simulation::{Input, State};
2use crate::simulation_controller::GameContext;
3use borger_plugin_sdk::TickID;
4use borger_plugin_sdk::diff_ser::DiffSerializer;
5use borger_plugin_sdk::multiplayer_tradeoff::{Immediate, WaitForConsensus};
6use borger_plugin_sdk::primitive::usize32;
7
8pub(crate) mod multiplayer_tradeoff;
9pub(crate) mod scope;
10
11#[cfg_attr(not(any(feature = "server", feature = "client")), doc(hidden))]
14pub mod simulation_controller;
15
16#[cfg_attr(not(any(feature = "server", feature = "client")), doc(hidden))]
20pub mod thread_comms;
21
22pub(crate) mod tick;
24
25mod handwritten {
26 pub(crate) mod constructors;
27 pub(crate) mod diff_des;
28 pub(crate) mod diff_ser;
29 pub(crate) mod simulation;
30 pub(crate) mod snapshot_serdes;
31 pub(crate) mod untracked;
32
33 #[cfg(feature = "client")]
34 pub(crate) mod presentation_collect;
35 #[cfg(feature = "client")]
36 pub(crate) mod presentation_output;
37
38 pub(crate) mod plugin_exports;
40}
41
42#[allow(unused, dead_code)]
43mod generated {
44 pub(crate) mod constructors;
45 pub(crate) mod diff_des;
46 pub(crate) mod diff_ser;
47 pub(crate) mod simulation;
48 pub(crate) mod snapshot_serdes;
49 pub(crate) mod untracked;
56
57 #[cfg(feature = "client")]
58 pub(crate) mod presentation_collect;
59 #[cfg(feature = "client")]
60 pub(crate) mod presentation_output;
61
62 #[cfg(any(feature = "server", feature = "client"))]
63 pub(crate) mod plugin_exports;
64}
65
66#[cfg_attr(not(any(feature = "server", feature = "client")), doc(hidden))]
68pub mod simulation {
69 pub use super::generated::simulation::*;
70 pub use super::handwritten::simulation::*;
71}
72
73pub(crate) mod diff_ser {
78 pub use super::handwritten::diff_ser::*;
79
80 #[cfg(feature = "client")]
81 pub use super::generated::diff_ser::*;
82}
83
84pub(crate) mod diff_des {
92 pub use super::handwritten::diff_des::*;
93
94 #[cfg(feature = "server")]
95 pub use super::generated::diff_des::*;
96}
97
98pub(crate) mod snapshot_serdes {
107 pub use super::handwritten::snapshot_serdes::*;
108}
109
110#[cfg(feature = "client")]
115pub mod presentation_collect {
116 pub use super::generated::presentation_collect::*;
117 pub use super::handwritten::presentation_collect::*;
118}
119
120#[cfg(feature = "client")]
123pub mod presentation_output {
124 pub use super::generated::presentation_output::*;
125 pub use super::handwritten::presentation_output::*;
126}
127
128pub mod plugins {
130 pub use super::handwritten::plugin_exports::*;
131
132 #[cfg(any(feature = "server", feature = "client"))]
133 #[allow(unused)]
134 pub use super::generated::plugin_exports::*;
135}
136
137pub mod prelude {
139 pub use crate::SimulationInitOptions;
140 pub use crate::simulation::*;
141 pub use crate::simulation_controller::GameContext;
142 pub use crate::tick::TickInfo;
143 pub use borger_plugin_sdk::TickID;
144 pub use borger_plugin_sdk::diff_ser::DiffSerializer;
145 pub use borger_plugin_sdk::multiplayer_tradeoff::{
146 AnyTradeOff, Immediate, ImmediateOrWaitForServer, WaitForConsensus, WaitForServer,
147 };
148 pub use borger_plugin_sdk::primitive::{isize32, usize32};
149 pub use borger_plugin_sdk::traits::Interpolate;
150 pub use borger_procmac::server;
151 pub use log::{debug, error, info, warn};
152
153 #[doc(inline)]
154 pub use crate::multiplayer_tradeoff; }
156
157pub struct SimulationInitOptions {
158 pub sim_dt: f32,
162
163 pub init_static_level_geom: Option<fn(&mut State)>,
165 pub simulation_loop: fn(&mut GameContext<Immediate>),
166
167 pub input_merge: fn(&Input, &Input) -> Input,
169 pub input_validate: fn(&Input) -> Input,
170 pub input_server_predict_late: fn(
171 &Input,
172 &State,
173 usize32,
174 bool,
175 ) -> Input,
176 pub input_client_predict_late:
177 fn(&Input, &State, usize32) -> Input,
178
179 pub on_server_start: fn(&mut State, &mut DiffSerializer<WaitForConsensus>), pub on_client_connect: fn(
182 &mut State,
183 usize32,
184 TickID,
185 &mut DiffSerializer<WaitForConsensus>,
186 ),
187 pub on_client_disconnect: fn(
188 &mut State,
189 usize32,
190 TickID,
191 &mut DiffSerializer<WaitForConsensus>,
192 ),
193}