2022-08-22 03:21:39 +00:00
|
|
|
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize)]
|
|
|
|
pub struct ViewDistances {
|
|
|
|
pub terrain: u32,
|
|
|
|
/// Server will clamp this to `terrain` if it is larger.
|
|
|
|
///
|
|
|
|
/// NOTE: Importantly, the server still loads entities in the `terrain` view
|
|
|
|
/// distance (at least currently, please update this if you change it!),
|
|
|
|
/// but the syncing to the client is done based on the entity view
|
|
|
|
/// distance.
|
|
|
|
pub entity: u32,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ViewDistances {
|
|
|
|
/// Clamps the terrain view distance to an optional max and clamps the
|
|
|
|
/// entity view distance to the resulting terrain view distance.
|
2022-08-23 04:46:52 +00:00
|
|
|
///
|
|
|
|
/// Also ensures both are at a minimum of 1 (unless the provided max is 0).
|
2022-08-22 03:21:39 +00:00
|
|
|
pub fn clamp(self, max: Option<u32>) -> Self {
|
2022-08-23 04:46:52 +00:00
|
|
|
let terrain = self.terrain.max(1).min(max.unwrap_or(u32::MAX));
|
2022-08-22 03:21:39 +00:00
|
|
|
Self {
|
|
|
|
terrain,
|
2022-08-23 04:46:52 +00:00
|
|
|
entity: self.entity.max(1).min(terrain),
|
2022-08-22 03:21:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|