mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'capucho/free-look-improvements' into 'master'
Free look improvements See merge request veloren/veloren!865
This commit is contained in:
commit
976043df83
@ -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
|
||||
|
@ -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));
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user