mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
View distances small fixes and improvement:
* Properly set view_distance field in Client when sending it to the server in request_character/request_spectator. * Removed invalid check I had included in Client::set_view_distance * ViewDistances::clamp now clamps min to 1 for both types of view distance.
This commit is contained in:
parent
e626519ec0
commit
4126194a5c
@ -884,7 +884,12 @@ impl Client {
|
||||
}
|
||||
|
||||
/// Request a state transition to `ClientState::Character`.
|
||||
pub fn request_character(&mut self, character_id: CharacterId, view_distances: common::ViewDistances) {
|
||||
pub fn request_character(
|
||||
&mut self,
|
||||
character_id: CharacterId,
|
||||
view_distances: common::ViewDistances,
|
||||
) {
|
||||
let view_distances = self.set_view_distances_local(view_distances);
|
||||
self.send_msg(ClientGeneral::Character(character_id, view_distances));
|
||||
|
||||
// Assume we are in_game unless server tells us otherwise
|
||||
@ -893,6 +898,7 @@ impl Client {
|
||||
|
||||
/// Request a state transition to `ClientState::Spectate`.
|
||||
pub fn request_spectate(&mut self, view_distances: common::ViewDistances) {
|
||||
let view_distances = self.set_view_distances_local(view_distances);
|
||||
self.send_msg(ClientGeneral::Spectate(view_distances));
|
||||
|
||||
self.presence = Some(PresenceKind::Spectator);
|
||||
@ -948,14 +954,26 @@ impl Client {
|
||||
}
|
||||
|
||||
pub fn set_view_distances(&mut self, view_distances: common::ViewDistances) {
|
||||
if self.server_view_distance_limit.map_or(true, |limit| view_distances.terrain >= limit) {
|
||||
let view_distances = common::ViewDistances {
|
||||
terrain: view_distances.terrain.max(1).min(MAX_SELECTABLE_VIEW_DISTANCE),
|
||||
entity: view_distances.entity,
|
||||
};
|
||||
self.view_distance = Some(view_distances.terrain);
|
||||
self.send_msg(ClientGeneral::SetViewDistance(view_distances));
|
||||
}
|
||||
let view_distances = self.set_view_distances_local(view_distances);
|
||||
self.send_msg(ClientGeneral::SetViewDistance(view_distances));
|
||||
}
|
||||
|
||||
/// Clamps provided view distances, locally sets the terrain view distance
|
||||
/// in the client's properties and returns the clamped values for the
|
||||
/// caller to send to the server.
|
||||
fn set_view_distances_local(
|
||||
&mut self,
|
||||
view_distances: common::ViewDistances,
|
||||
) -> common::ViewDistances {
|
||||
let view_distances = common::ViewDistances {
|
||||
terrain: view_distances
|
||||
.terrain
|
||||
.max(1)
|
||||
.min(MAX_SELECTABLE_VIEW_DISTANCE),
|
||||
entity: view_distances.entity.max(1),
|
||||
};
|
||||
self.view_distance = Some(view_distances.terrain);
|
||||
view_distances
|
||||
}
|
||||
|
||||
pub fn set_lod_distance(&mut self, lod_distance: u32) {
|
||||
|
@ -13,11 +13,13 @@ pub struct ViewDistances {
|
||||
impl ViewDistances {
|
||||
/// Clamps the terrain view distance to an optional max and clamps the
|
||||
/// entity view distance to the resulting terrain view distance.
|
||||
///
|
||||
/// Also ensures both are at a minimum of 1 (unless the provided max is 0).
|
||||
pub fn clamp(self, max: Option<u32>) -> Self {
|
||||
let terrain = max.unwrap_or(u32::MAX).min(self.terrain);
|
||||
let terrain = self.terrain.max(1).min(max.unwrap_or(u32::MAX));
|
||||
Self {
|
||||
terrain,
|
||||
entity: self.entity.min(terrain),
|
||||
entity: self.entity.max(1).min(terrain),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user