mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Experimental shader command
This commit is contained in:
parent
185dccc1cc
commit
5adaad956b
@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
- Command to toggle experimental shaders.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
@ -15,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
## [0.14.0] - 2022-01-07
|
## [0.14.0] - 2023-01-07
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use crate::GlobalState;
|
use crate::{
|
||||||
|
render::ExperimentalShader, session::settings_change::change_render_mode, GlobalState,
|
||||||
|
};
|
||||||
use client::Client;
|
use client::Client;
|
||||||
use common::{cmd::*, parse_cmd_args, uuid::Uuid};
|
use common::{cmd::*, parse_cmd_args, uuid::Uuid};
|
||||||
|
use strum::IntoEnumIterator;
|
||||||
|
|
||||||
// Please keep this sorted alphabetically, same as with server commands :-)
|
// Please keep this sorted alphabetically, same as with server commands :-)
|
||||||
#[derive(Clone, Copy, strum::EnumIter)]
|
#[derive(Clone, Copy, strum::EnumIter)]
|
||||||
pub enum ClientChatCommand {
|
pub enum ClientChatCommand {
|
||||||
|
ExperimentalShader,
|
||||||
Mute,
|
Mute,
|
||||||
Unmute,
|
Unmute,
|
||||||
}
|
}
|
||||||
@ -27,6 +31,17 @@ impl ClientChatCommand {
|
|||||||
"Unmutes a player muted with the 'mute' command.",
|
"Unmutes a player muted with the 'mute' command.",
|
||||||
None,
|
None,
|
||||||
),
|
),
|
||||||
|
ClientChatCommand::ExperimentalShader => cmd(
|
||||||
|
vec![Enum(
|
||||||
|
"Shader",
|
||||||
|
ExperimentalShader::iter()
|
||||||
|
.map(|item| item.to_string())
|
||||||
|
.collect(),
|
||||||
|
Optional,
|
||||||
|
)],
|
||||||
|
"Toggles an experimental shader.",
|
||||||
|
None,
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,6 +49,7 @@ impl ClientChatCommand {
|
|||||||
match self {
|
match self {
|
||||||
ClientChatCommand::Mute => "mute",
|
ClientChatCommand::Mute => "mute",
|
||||||
ClientChatCommand::Unmute => "unmute",
|
ClientChatCommand::Unmute => "unmute",
|
||||||
|
ClientChatCommand::ExperimentalShader => "experimental_shader",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,10 +161,13 @@ fn run_client_command(
|
|||||||
command: ClientChatCommand,
|
command: ClientChatCommand,
|
||||||
args: Vec<String>,
|
args: Vec<String>,
|
||||||
) -> Result<String, String> {
|
) -> Result<String, String> {
|
||||||
match command {
|
let command = match command {
|
||||||
ClientChatCommand::Mute => handle_mute(client, global_state, args),
|
ClientChatCommand::Mute => handle_mute,
|
||||||
ClientChatCommand::Unmute => handle_unmute(client, global_state, args),
|
ClientChatCommand::Unmute => handle_unmute,
|
||||||
}
|
ClientChatCommand::ExperimentalShader => handle_experimental_shader,
|
||||||
|
};
|
||||||
|
|
||||||
|
command(client, global_state, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_mute(
|
fn handle_mute(
|
||||||
@ -215,6 +234,60 @@ fn handle_unmute(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn handle_experimental_shader(
|
||||||
|
_client: &Client,
|
||||||
|
global_state: &mut GlobalState,
|
||||||
|
args: Vec<String>,
|
||||||
|
) -> Result<String, String> {
|
||||||
|
if args.is_empty() {
|
||||||
|
ExperimentalShader::iter()
|
||||||
|
.map(|s| {
|
||||||
|
let is_active = global_state
|
||||||
|
.settings
|
||||||
|
.graphics
|
||||||
|
.render_mode
|
||||||
|
.experimental_shaders
|
||||||
|
.contains(&s);
|
||||||
|
format!("[{}] {}", if is_active { "x" } else { " " }, s)
|
||||||
|
})
|
||||||
|
.reduce(|mut a, b| {
|
||||||
|
a.push('\n');
|
||||||
|
a.push_str(&b);
|
||||||
|
a
|
||||||
|
})
|
||||||
|
.ok_or("There are no experimental shaders.".to_string())
|
||||||
|
} else if let Some(item) = parse_cmd_args!(args, String) {
|
||||||
|
if let Ok(shader) = ExperimentalShader::from_str(&item) {
|
||||||
|
let mut new_render_mode = global_state.settings.graphics.render_mode.clone();
|
||||||
|
let res = if new_render_mode.experimental_shaders.remove(&shader) {
|
||||||
|
Ok(format!("Disabled {item}."))
|
||||||
|
} else {
|
||||||
|
new_render_mode.experimental_shaders.insert(shader);
|
||||||
|
Ok(format!("Enabled {item}."))
|
||||||
|
};
|
||||||
|
|
||||||
|
change_render_mode(
|
||||||
|
new_render_mode,
|
||||||
|
&mut global_state.window,
|
||||||
|
&mut global_state.settings,
|
||||||
|
);
|
||||||
|
|
||||||
|
res
|
||||||
|
} else {
|
||||||
|
Err(format!(
|
||||||
|
"{item} is not an expermimental shader, use this command with any arguments to \
|
||||||
|
see a complete list."
|
||||||
|
))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Err(
|
||||||
|
"You must specify a valid experimental shader, to get a list of experimental shaders, \
|
||||||
|
use this command without any arguments."
|
||||||
|
.to_string(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A helper function to get the Uuid of a player with a given alias
|
/// A helper function to get the Uuid of a player with a given alias
|
||||||
pub fn get_player_uuid(client: &Client, alias: &String) -> Option<Uuid> {
|
pub fn get_player_uuid(client: &Client, alias: &String) -> Option<Uuid> {
|
||||||
client
|
client
|
||||||
|
@ -11,7 +11,7 @@ use crate::{
|
|||||||
audio::AudioVolume, AudioSettings, ChatSettings, ControlSettings, Fps, GamepadSettings,
|
audio::AudioVolume, AudioSettings, ChatSettings, ControlSettings, Fps, GamepadSettings,
|
||||||
GameplaySettings, GraphicsSettings, InterfaceSettings,
|
GameplaySettings, GraphicsSettings, InterfaceSettings,
|
||||||
},
|
},
|
||||||
window::FullScreenSettings,
|
window::{FullScreenSettings, Window},
|
||||||
GlobalState,
|
GlobalState,
|
||||||
};
|
};
|
||||||
use i18n::{LanguageMetadata, LocalizationHandle};
|
use i18n::{LanguageMetadata, LocalizationHandle};
|
||||||
@ -465,13 +465,7 @@ impl SettingsChange {
|
|||||||
settings.graphics.ambiance = new_ambiance;
|
settings.graphics.ambiance = new_ambiance;
|
||||||
},
|
},
|
||||||
Graphics::ChangeRenderMode(new_render_mode) => {
|
Graphics::ChangeRenderMode(new_render_mode) => {
|
||||||
// Do this first so if it crashes the setting isn't saved :)
|
change_render_mode(*new_render_mode, &mut global_state.window, settings);
|
||||||
global_state
|
|
||||||
.window
|
|
||||||
.renderer_mut()
|
|
||||||
.set_render_mode((*new_render_mode).clone())
|
|
||||||
.unwrap();
|
|
||||||
settings.graphics.render_mode = *new_render_mode;
|
|
||||||
},
|
},
|
||||||
Graphics::ChangeFullscreenMode(new_fullscreen_settings) => {
|
Graphics::ChangeFullscreenMode(new_fullscreen_settings) => {
|
||||||
global_state
|
global_state
|
||||||
@ -741,6 +735,19 @@ impl SettingsChange {
|
|||||||
|
|
||||||
use crate::settings::Settings;
|
use crate::settings::Settings;
|
||||||
|
|
||||||
|
pub fn change_render_mode(
|
||||||
|
new_render_mode: RenderMode,
|
||||||
|
window: &mut Window,
|
||||||
|
settings: &mut Settings,
|
||||||
|
) {
|
||||||
|
// Do this first so if it crashes the setting isn't saved :)
|
||||||
|
window
|
||||||
|
.renderer_mut()
|
||||||
|
.set_render_mode(new_render_mode.clone())
|
||||||
|
.unwrap();
|
||||||
|
settings.graphics.render_mode = new_render_mode;
|
||||||
|
}
|
||||||
|
|
||||||
fn adjust_terrain_view_distance(
|
fn adjust_terrain_view_distance(
|
||||||
terrain_vd: u32,
|
terrain_vd: u32,
|
||||||
settings: &mut Settings,
|
settings: &mut Settings,
|
||||||
|
Loading…
Reference in New Issue
Block a user