Merge branch 'capucho/free-look-improvements' into 'master'

Free look improvements

See merge request veloren/veloren!865
This commit is contained in:
Justin Shipsey 2020-03-27 22:09:20 +00:00
commit 976043df83
5 changed files with 83 additions and 9 deletions

View File

@ -192,6 +192,8 @@ Enjoy your stay in the World of Veloren."#,
"hud.settings.general": "General",
"hud.settings.none": "None",
"hud.settings.press_behavior.toggle": "Toggle",
"hud.settings.press_behavior.hold": "Hold",
"hud.settings.help_window": "Help Window",
"hud.settings.debug_info": "Debug Info",
"hud.settings.tips_on_startup": "Tips-On-Startup",
@ -219,6 +221,7 @@ Enjoy your stay in the World of Veloren."#,
"hud.settings.zoom_sensitivity": "Zoom Sensitivity",
"hud.settings.invert_scroll_zoom": "Invert Scroll Zoom",
"hud.settings.invert_mouse_y_axis": "Invert Mouse Y Axis",
"hud.settings.free_look_behavior": "Free look behavior",
"hud.settings.view_distance": "View Distance",
"hud.settings.maximum_fps": "Maximum FPS",
@ -308,6 +311,9 @@ Send Chat Message
Scroll Chat
Free look
Chat commands:
/alias [Name] - Change your Chat Name

View File

@ -231,6 +231,7 @@ pub enum Event {
Logout,
Quit,
ChangeLanguage(LanguageMetadata),
ChangeFreeLookBehavior(PressBehavior),
}
// TODO: Are these the possible layouts we want?
@ -271,6 +272,11 @@ pub enum ShortcutNumbers {
On,
Off,
}
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub enum PressBehavior {
Toggle = 0,
Hold = 1,
}
pub struct Show {
ui: bool,
@ -1825,6 +1831,9 @@ impl Hud {
settings_window::Event::AdjustWindowSize(new_size) => {
events.push(Event::AdjustWindowSize(new_size));
},
settings_window::Event::ChangeFreeLookBehavior(behavior) => {
events.push(Event::ChangeFreeLookBehavior(behavior));
},
}
}
}

View File

@ -1,6 +1,6 @@
use super::{
img_ids::Imgs, BarNumbers, CrosshairType, Intro, ShortcutNumbers, Show, XpBar, MENU_BG,
TEXT_COLOR,
img_ids::Imgs, BarNumbers, CrosshairType, Intro, PressBehavior, ShortcutNumbers, Show, XpBar,
MENU_BG, TEXT_COLOR,
};
use crate::{
i18n::{list_localizations, LanguageMetadata, VoxygenLocalization},
@ -141,7 +141,8 @@ widget_ids! {
sct_num_dur_text,
sct_num_dur_slider,
sct_num_dur_value,
free_look_behavior_text,
free_look_behavior_list
}
}
@ -220,6 +221,7 @@ pub enum Event {
SctPlayerBatch(bool),
SctDamageBatch(bool),
ChangeLanguage(LanguageMetadata),
ChangeFreeLookBehavior(PressBehavior),
}
pub enum ScaleChange {
@ -1254,6 +1256,45 @@ impl<'a> Widget for SettingsWindow<'a> {
.graphics_for(state.ids.mouse_y_invert_button)
.color(TEXT_COLOR)
.set(state.ids.mouse_y_invert_label, ui);
// Free look behaviour
Text::new(
&self
.localized_strings
.get("hud.settings.free_look_behavior"),
)
.down_from(state.ids.mouse_zoom_invert_button, 10.0)
.font_size(self.fonts.cyri.scale(14))
.font_id(self.fonts.cyri.conrod_id)
.color(TEXT_COLOR)
.set(state.ids.free_look_behavior_text, ui);
let mode_label_list = [
&self
.localized_strings
.get("hud.settings.press_behavior.toggle"),
&self
.localized_strings
.get("hud.settings.press_behavior.hold"),
];
// Get which free look behavior is currently active
let selected = self.global_state.settings.gameplay.free_look_behavior as usize;
if let Some(clicked) = DropDownList::new(&mode_label_list, Some(selected))
.w_h(200.0, 30.0)
.color(MENU_BG)
.label_color(TEXT_COLOR)
.label_font_id(self.fonts.cyri.conrod_id)
.down_from(state.ids.free_look_behavior_text, 8.0)
.set(state.ids.free_look_behavior_list, ui)
{
match clicked {
0 => events.push(Event::ChangeFreeLookBehavior(PressBehavior::Toggle)),
1 => events.push(Event::ChangeFreeLookBehavior(PressBehavior::Hold)),
_ => unreachable!(),
}
}
}
// 3) Controls Tab --------------------------------
@ -1367,6 +1408,9 @@ impl<'a> Widget for SettingsWindow<'a> {
{}\n\
\n\
\n\
{}\n\
\n\
\n\
\n\
\n\
\n\
@ -1417,6 +1461,7 @@ impl<'a> Widget for SettingsWindow<'a> {
controls.bag,
controls.enter,
"Mouse Wheel", // Scroll chat
controls.free_look
))
.color(TEXT_COLOR)
.right_from(state.ids.controls_text, 0.0)

View File

@ -1,6 +1,6 @@
use crate::{
ecs::MyEntity,
hud::{DebugInfo, Event as HudEvent, Hud},
hud::{DebugInfo, Event as HudEvent, Hud, PressBehavior},
i18n::{i18n_asset_key, VoxygenLocalization},
key_state::KeyState,
menu::char_selection::CharSelectionState,
@ -402,9 +402,18 @@ impl PlayState for SessionState {
Event::InputUpdate(GameInput::Charge, state) => {
self.inputs.charge.set_state(state);
},
Event::InputUpdate(GameInput::FreeLook, true) => {
free_look = !free_look;
self.hud.free_look(free_look);
Event::InputUpdate(GameInput::FreeLook, state) => {
match (global_state.settings.gameplay.free_look_behavior, state) {
(PressBehavior::Toggle, true) => {
free_look = !free_look;
self.hud.free_look(free_look);
},
(PressBehavior::Hold, state) => {
free_look = state;
self.hud.free_look(free_look);
},
_ => {},
};
},
Event::AnalogGameInput(input) => match input {
AnalogGameInput::MovementX(v) => {
@ -681,6 +690,9 @@ impl PlayState for SessionState {
global_state.settings.graphics.window_size = new_size;
global_state.settings.save_to_file_warn();
},
HudEvent::ChangeFreeLookBehavior(behavior) => {
global_state.settings.gameplay.free_look_behavior = behavior;
},
}
}

View File

@ -1,5 +1,5 @@
use crate::{
hud::{BarNumbers, CrosshairType, Intro, ShortcutNumbers, XpBar},
hud::{BarNumbers, CrosshairType, Intro, PressBehavior, ShortcutNumbers, XpBar},
i18n,
render::{AaMode, CloudMode, FluidMode},
ui::ScaleMode,
@ -102,7 +102,7 @@ impl Default for ControlSettings {
interact: KeyMouse::Mouse(MouseButton::Right),
toggle_wield: KeyMouse::Key(VirtualKeyCode::T),
charge: KeyMouse::Key(VirtualKeyCode::Key1),
free_look: KeyMouse::Key(VirtualKeyCode::LAlt),
free_look: KeyMouse::Key(VirtualKeyCode::L),
}
}
}
@ -346,6 +346,7 @@ pub struct GameplaySettings {
pub shortcut_numbers: ShortcutNumbers,
pub bar_numbers: BarNumbers,
pub ui_scale: ScaleMode,
pub free_look_behavior: PressBehavior,
}
impl Default for GameplaySettings {
@ -367,6 +368,7 @@ impl Default for GameplaySettings {
shortcut_numbers: ShortcutNumbers::On,
bar_numbers: BarNumbers::Off,
ui_scale: ScaleMode::RelativeToWindow([1920.0, 1080.0].into()),
free_look_behavior: PressBehavior::Toggle,
}
}
}