Merge branch 'averylostnomad/auto-walk' into 'master'

Add simple auto walk functionality. Toggleable or push to hold

Closes #582

See merge request veloren/veloren!1044
This commit is contained in:
Monty Marz 2020-06-06 20:12:24 +00:00
commit d8f43d3ae4
11 changed files with 620 additions and 9 deletions

View File

@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Character name and level information to chat, social tab and `/players` command.
- Added inventory, armour and weapon saving
- Show where screenshots are saved to in the chat
- Added basic auto walk
### Changed

BIN
assets/voxygen/element/help.png (Stored with Git LFS)

Binary file not shown.

View File

@ -347,7 +347,8 @@ magischen Gegenstände ergattern?"#,
"gameinput.charge": "Anstürmen",
"gameinput.togglewield": "Waffe ziehen/wegstecken",
"gameinput.interact": "Interagieren",
"gameinput.freelook": "Freie Sicht",
"gameinput.freelook": "Freie Sicht",
"gameinput.autowalk": "Automatisch Laufen",
"gameinput.dance": "Tanzen",
/// End GameInput section

View File

@ -264,6 +264,8 @@ magically infused items?"#,
"hud.settings.invert_mouse_y_axis": "Invert Mouse Y Axis",
"hud.settings.enable_mouse_smoothing": "Camera Smoothing",
"hud.settings.free_look_behavior": "Free look behavior",
"hud.settings.auto_walk_behavior": "Auto walk behavior",
"hud.settings.stop_auto_walk_on_input": "Stop auto walk on movement",
"hud.settings.view_distance": "View Distance",
"hud.settings.sprites_view_distance": "Sprites View Distance",
@ -296,6 +298,7 @@ magically infused items?"#,
"hud.spell": "Spells",
"hud.free_look_indicator": "Free look active",
"hud.auto_walk_indicator": "Auto walk active",
/// End HUD section
@ -348,6 +351,8 @@ magically infused items?"#,
"gameinput.togglewield": "Toggle Wield",
"gameinput.interact": "Interact",
"gameinput.freelook": "Free Look",
"gameinput.autowalk": "Auto Walk",
"gameinput.dance": "Dance",
/// End GameInput section

View File

@ -0,0 +1,439 @@
/// Translation document instructions
///
/// In order to keep localization documents readible please follow the following
/// rules:
/// - separate the string map sections using a commentary describing the purpose
/// of the next section
/// - prepend multi-line strings with a commentary
/// - append one blank lines after a multi-line strings and two after sections
///
/// To add a new language in Veloren, just write an additional `.ron` file in
/// `assets/voxygen/i18n` and that's it!
///
/// Localization for Spanish (Spain)
VoxygenLocalization(
metadata: (
language_name: "Español de España",
language_identifier: "es_ES",
),
convert_utf8_to_ascii: false,
fonts: {
"opensans": Font (
asset_key: "voxygen.font.OpenSans-Regular",
scale_ratio: 1.0,
),
"metamorph": Font (
asset_key: "voxygen.font.Metamorphous-Regular",
scale_ratio: 1.0,
),
"alkhemi": Font (
asset_key: "voxygen.font.Alkhemikal",
scale_ratio: 1.0,
),
"wizard": Font (
asset_key: "voxygen.font.wizard",
scale_ratio: 1.0,
),
"cyri": Font (
asset_key: "voxygen.font.haxrcorp_4089_cyrillic_altgr_extended",
scale_ratio: 1.0,
),
},
string_map: {
/// Start Common section
// Texts used in multiple locations with the same formatting
"common.username": "Usuario",
"common.singleplayer": "Solo",
"common.multiplayer": "Multijugador",
"common.servers": "Servidores",
"common.quit": "Salir",
"common.settings": "Opciones",
"common.languages": "Idiomas",
"common.interface": "Interfaz",
"common.gameplay": "Juego",
"common.controls": "Controles",
"common.video": "Gráficos",
"common.sound": "Sonido",
"common.resume": "Continuar",
"common.characters": "Personajes",
"common.close": "Cerrar",
"common.yes": "Sí",
"common.no": "No",
"common.back": "Atrás",
"common.create": "Crear",
"common.okay": "Okay",
"common.accept": "Aceptar",
"common.disclaimer": "Atención",
"common.cancel": "Cancelar",
"common.none": "Ninguno",
"common.error": "Error",
"common.fatal_error": "Error Fatal",
// Message when connection to the server is lost
"common.connection_lost": r#"¡Conexión perdida!
¿Se reinició el servidor?
¿Está el cliente actualizado?"#,
"common.species.orc": "Orco",
"common.species.human": "Humano",
"common.species.dwarf": "Enano",
"common.species.elf": "Elfo",
"common.species.undead": "No muerto",
"common.species.danari": "Danari",
"common.weapons.axe": "Hacha",
"common.weapons.sword": "Espada",
"common.weapons.staff": "Bastón",
"common.weapons.bow": "Arco",
"common.weapons.hammer": "Martillo",
/// End Common section
/// Start Main screen section
"main.connecting": "Conectando",
"main.creating_world": "Creando mundo",
// Welcome notice that appears the first time Veloren is started
"main.notice": r#"¡Bienvenido a la versión alfa de Veloren!
Antes de que te adentres en la diversión, por favor ten en cuenta un par de cosas:
- Esto es una alfa muy temprana. Espera errores, mecánicas de juego extremadamente sin terminar, mecánicas sin pulir, y características que faltan.
- Si tienes feedback constructivo o reportes de error, puedes contactar con nosotros vía Reddit, GitLab, o nuestro servidor de Discord comunitario.
- Veloren se licencia bajo la licencia de código abierto GPL 3. Esto quiere decir que eres libre para jugar, modificar y redistribuir el juego tal y como desees (siempre y cuando tal trabajo se licencie también bajo la GPL 3).
- Veloren es un proyecto comunitario sin ánimo de lucro, y todo aquel que trabaja en él es un voluntario.
Si te gusta lo que ves, ¡eres bienvenido de unirte a los equipos de desarrollo o arte!
Gracias por tomarte el tiempo de leer esta noticia, ¡esperamos que disfrutes del juego!
~ Los desarrolladores de Veloren"#,
// Login process description
"main.login_process": r#"Información sobre el proceso de login:
Si estás experimentando problemas para autenticarte:
Por favor, ten en cuenta que ahora necesitas una cuenta
para jugar en servidores con autenticación activada.
Puedes crear una cuenta en
https://account.veloren.net."#,
"main.login.server_not_found": "Servidor no encontrado",
"main.login.authentication_error": "Error de autenticación al servidor",
"main.login.server_full": "El servidor está lleno",
"main.login.untrusted_auth_server": "Servidor con autenticación sin confianza",
"main.login.outdated_client_or_server": "ServerEnloquecido: Probablemente las versiones son incompatibles, revisa si hay actualizaciones.",
"main.login.timeout": "Timeout: El servidor no respondió a tiempo. (Sobrecargado o con problemas de red).",
"main.login.server_shut_down": "Servidor apagado",
"main.login.already_logged_in": "Ya estás accediendo al servidor.",
"main.login.network_error": "Error de red",
"main.login.failed_sending_request": "Petición al servidor de autenticación fallida",
"main.login.invalid_character": "El personaje seleccionado no es válido",
"main.login.client_crashed": "El cliente se cerró inesperadamente",
/// End Main screen section
/// Start HUD Section
"hud.do_not_show_on_startup": "No muestres esto al inicio",
"hud.show_tips": "Mostrar ayuda",
"hud.quests": "Misiones",
"hud.you_died": "Has muerto",
"hud.waypoint_saved": "Punto de ruta guardado",
"hud.press_key_to_show_keybindings_fmt": "Pulsa {key} para mostrar atajos de teclado",
"hud.press_key_to_show_debug_info_fmt": "Pulsa {key} para mostrar información de depuración",
"hud.press_key_to_toggle_keybindings_fmt": "Pulsa {key} para alternar los atajos de teclado",
"hud.press_key_to_toggle_debug_info_fmt": "Pulsa {key} para alternar la información de depuración",
// Respawn message
"hud.press_key_to_respawn": r#"Pulsa {key} para reaparecer en el último campamento que visitaste."#,
// Welcome message
"hud.welcome": r#"¡Bienvenido a la alfa de Veloren!
Algunos consejos antes de empezar:
Pulsa F1 para ver los comandos disponibles.
Escribe /help en el chat para ver los comandos de chat
¡Cofres y otros objetos aparecen aleatoriamente en el mundo!
Click derecho para recogerlos.
Para utilizar lo que recojas de esos cofres, abre tu inventario con 'B'.
Haz doble click sobre los objetos en tu inventario para usarlos o equipártelos.
Deshazte de ellos haciendo click una vez sobre ellos y haciendo click fuera del inventario
Las noches pueden ser muy oscuras en Veloren.
Enciende tu linterna pulsando 'G'
¿Quieres liberar tu cursor para cerrar esta ventana? ¡Pulsa TAB!
Disfruta de tu estancia en el mundo de Veloren."#,
"hud.temp_quest_headline": r#"¡Por favor, ayúdanos Viajero!"#,
"hud.temp_quest_text": r#"¡Mazmorras llenas de fanáticos
han emergido en cada rincón de nuestras pacíficas ciudades!
Encuentra algo de compañía, acumula comida
y derrota a sus viles líderes y acólitos.
¿Quizás podrías obtener incluso uno de sus
objetos imbuidos de magia?"#,
// Inventory
"hud.bag.inventory": "Inventario de {playername}",
"hud.bag.stats_title": "Atributos de {playername}",
"hud.bag.exp": "Exp",
"hud.bag.armor": "Armadura",
"hud.bag.stats": "Atributos",
"hud.bag.head": "Cabeza",
"hud.bag.neck": "Cuello",
"hud.bag.tabard": "Tabardo",
"hud.bag.shoulders": "Hombros",
"hud.bag.chest": "Pecho",
"hud.bag.hands": "Manos",
"hud.bag.lantern": "Linterna",
"hud.bag.belt": "Cinturón",
"hud.bag.ring": "Anillo",
"hud.bag.back": "Espalda",
"hud.bag.legs": "Piernas",
"hud.bag.feet": "Pies",
"hud.bag.mainhand": "Mano principal",
"hud.bag.offhand": "Mano secundaria",
// Map and Questlog
"hud.map.map_title": "Mapa",
"hud.map.qlog_title": "Misiones",
// Settings
"hud.settings.general": "General",
"hud.settings.none": "Ninguno",
"hud.settings.press_behavior.toggle": "Alternar",
"hud.settings.press_behavior.hold": "Mantener",
"hud.settings.help_window": "Ventana de ayuda",
"hud.settings.debug_info": "Información de depuración",
"hud.settings.tips_on_startup": "Consejos-Al-Iniciar",
"hud.settings.ui_scale": "Escala-IU",
"hud.settings.relative_scaling": "Escala relativa",
"hud.settings.custom_scaling": "Escala personalizada",
"hud.settings.crosshair": "Punto de mira",
"hud.settings.transparency": "Transparencia",
"hud.settings.hotbar": "Barra rápida",
"hud.settings.toggle_shortcuts": "Alternar atajos",
"hud.settings.toggle_bar_experience": "Alternar barra de experiencia",
"hud.settings.scrolling_combat_text": "Texto de combate deslizante",
"hud.settings.single_damage_number": "Números de daño único",
"hud.settings.cumulated_damage": "Daño acumulado",
"hud.settings.incoming_damage": "Daño inminente",
"hud.settings.cumulated_incoming_damage": "Daño inminente acumulado",
"hud.settings.speech_bubble_dark_mode": "Modo oscuro de burbuja de diálogo",
"hud.settings.energybar_numbers": "Números de barra de energía",
"hud.settings.values": "Valores",
"hud.settings.percentages": "Porcentaje",
"hud.settings.chat": "Chat",
"hud.settings.background_transparency": "Transparencia del fondo",
"hud.settings.pan_sensitivity": "Sensibilidad de paneo",
"hud.settings.zoom_sensitivity": "Sensibilidad de zoom",
"hud.settings.invert_scroll_zoom": "Invertir el deslizamiento del zoom",
"hud.settings.invert_mouse_y_axis": "Invertir eje Y del ratón",
"hud.settings.enable_mouse_smoothing": "Suavizado de cámara",
"hud.settings.free_look_behavior": "Comportamiento de vista libre",
"hud.settings.view_distance": "Ver distancia",
"hud.settings.sprites_view_distance": "Distancia de visión de sprites",
"hud.settings.figures_view_distance": "Distancia de visión de entidades",
"hud.settings.maximum_fps": "FPS máximos",
"hud.settings.fov": "Campo de visión (grados)",
"hud.settings.gamma": "Gamma",
"hud.settings.antialiasing_mode": "Modo AntiAliasing",
"hud.settings.cloud_rendering_mode": "Modo renderizado de nubes",
"hud.settings.fluid_rendering_mode": "Modo de renderizado fluido",
"hud.settings.fluid_rendering_mode.cheap": "Barato",
"hud.settings.fluid_rendering_mode.shiny": "Brillante",
"hud.settings.cloud_rendering_mode.regular": "Regular",
"hud.settings.fullscreen": "Pantalla completa",
"hud.settings.save_window_size": "Guardar tamaño de ventana",
"hud.settings.music_volume": "Volumen de música",
"hud.settings.sound_effect_volume": "Volumen de efectos de sonido",
"hud.settings.audio_device": "Dispositivo de audio",
"hud.settings.awaitingkey": "Pulsa una tecla...",
"hud.social": "Social",
"hud.social.online": "Conectado",
"hud.social.friends": "Amigos",
"hud.social.not_yet_available": "No disponible todavía",
"hud.social.faction": "Facción",
"hud.social.play_online_fmt": "{nb_player} jugador(es) conectados",
"hud.spell": "Hechizos",
"hud.free_look_indicator": "Vista libre activa",
/// End HUD section
/// Start GameInput section
"gameinput.primary": "Ataque básico",
"gameinput.secondary": "Ataque secundario/Bloquear/Apuntar",
"gameinput.slot1": "Ranura 1 de barra rápida",
"gameinput.slot2": "Ranura 2 de barra rápida",
"gameinput.slot3": "Ranura 3 de barra rápida",
"gameinput.slot4": "Ranura 4 de barra rápida",
"gameinput.slot5": "Ranura 5 de barra rápida",
"gameinput.slot6": "Ranura 6 de barra rápida",
"gameinput.slot7": "Ranura 7 de barra rápida",
"gameinput.slot8": "Ranura 8 de barra rápida",
"gameinput.slot9": "Ranura 9 de barra rápida",
"gameinput.slot10": "Ranura 10 de barra rápida",
"gameinput.swaploadout": "Intercambiar armamento",
"gameinput.togglecursor": "Alternar cursor",
"gameinput.help": "Alternar ventana de ayuda",
"gameinput.toggleinterface": "Alternar interfaz",
"gameinput.toggledebug": "Alternar FPS e información de depuración",
"gameinput.screenshot": "Tomar captura de pantalla",
"gameinput.toggleingameui": "Alternar nombres de usuario",
"gameinput.fullscreen": "Alternar pantalla completa",
"gameinput.moveforward": "Moverse hacia delante",
"gameinput.moveleft": "Moverse a la izquierda",
"gameinput.moveright": "Moverse a la derecha",
"gameinput.moveback": "Moverse hacia atrás",
"gameinput.jump": "Saltar",
"gameinput.glide": "Planear",
"gameinput.roll": "Rodar",
"gameinput.climb": "Trepar",
"gameinput.climbdown": "Trepar hacia abajo",
"gameinput.wallleap": "Salto en muro",
"gameinput.togglelantern": "Alternar linterna",
"gameinput.mount": "Montar",
"gameinput.enter": "Entrar",
"gameinput.command": "Comando",
"gameinput.escape": "Escapar",
"gameinput.map": "Mapa",
"gameinput.bag": "Inventario",
"gameinput.social": "Social",
"gameinput.sit": "Sentarse",
"gameinput.spellbook": "Hechizos",
"gameinput.settings": "Opciones",
"gameinput.respawn": "Revivir",
"gameinput.charge": "Cargar",
"gameinput.togglewield": "Alternar empuñadura",
"gameinput.interact": "Interactuar",
"gameinput.freelook": "Vista libre",
"gameinput.autowalk": "Auto Correr",
/// End GameInput section
/// Start chracter selection section
"char_selection.loading_characters": "Cargando personajes...",
"char_selection.delete_permanently": "¿Borrar permanentemente este personaje?",
"char_selection.deleting_character": "Borrando personaje...",
"char_selection.change_server": "Cambiar de servidor",
"char_selection.enter_world": "Entrar al mundo",
"char_selection.logout": "Salir",
"char_selection.create_new_charater": "Crear nuevo personaje",
"char_selection.creating_character": "Creando personaje...",
"char_selection.character_creation": "Creación de personaje",
"char_selection.human_default": "Humano Predeterminado",
"char_selection.level_fmt": "Nivel {level_nb}",
"char_selection.uncanny_valley": "Tierra salvaje",
"char_selection.plains_of_uncertainty": "Llanuras de la incertidumbre",
"char_selection.beard": "Barba",
"char_selection.hair_style": "Estilo de pelo",
"char_selection.hair_color": "Color de pelo",
"char_selection.eye_color": "Color de ojos",
"char_selection.skin": "Piel",
"char_selection.eyeshape": "Detalle de los ojos",
"char_selection.accessories": "Accesorios",
"char_selection.create_info_name": "¡Tu personaje necesita un nombre!",
/// End chracter selection section
/// Start character window section
"character_window.character_name": "Nombre del personaje",
// Charater stats
"character_window.character_stats": r#"Resistencia
Aptitud
Fuerza de voluntad
"#,
/// End character window section
/// Start Escape Menu Section
"esc_menu.logout": "Salir",
"esc_menu.quit_game": "Salir del juego",
/// End Escape Menu Section
},
vector_map: {
"npc.speech.villager_under_attack": [
"Ayuda, ¡me atacan!",
"¡Ayuda! ¡Me atacan!",
"¡Auch! ¡Me atacan!",
"¡Auch! ¡Me atacan! ¡Ayuda!",
"¡Ayúdame! ¡Me atacan!",
"¡Me atacan! ¡Ayuda!",
"¡Me atacan! ¡Ayúdame!",
"¡Ayuda!",
"¡Ayuda! ¡Ayuda!",
"¡Ayuda! ¡Ayuda! ¡Ayuda!",
"¡Me atacan!",
"¡AAAHHH! ¡Me atacan!",
"¡AAAHHH! ¡Me atacan! ¡Ayuda!",
"¡Ayuda! ¡Nos están atacando!",
"¡Ayuda! ¡Asesino!",
"¡Ayuda! ¡Hay un asesino suelto!",
"¡Ayuda! ¡Me están intentando matar!",
"Guardias, ¡me están atacando!",
"Guardias, ¡me están atacando!",
"¡Me están atacando! ¡Guardias!",
"¡Ayuda! ¡Guardias! ¡Me están atacando!",
"¡Guardias! ¡Venid rápido!",
"¡Guardias! ¡Guardias!",
"¡Guardias! ¡Un villano me ataca!",
"Guardias, ¡acabad con este infame villano!",
"¡Guardias! ¡Hay un asesino!",
"¡Guardias! ¡Ayudadme!",
"¡No te saldrás con la tuya! ¡Guardias!",
"¡Desalmado!",
"¡Ayúdame!",
"¡Ayuda! ¡Por favor!",
"¡Auch! ¡Guardias! ¡Ayuda!",
"¡Vienen a por mí!",
"¡Ayuda! ¡Ayuda! Me están reprimiendo",
"Ah, ahora vemos la violencia inherente al sistema.",
"¡No es más que un rasguño!"
],
}
)

View File

@ -184,6 +184,10 @@ widget_ids! {
free_look_txt,
free_look_bg,
// Auto walk indicator
auto_walk_txt,
auto_walk_bg,
// Example Quest
quest_bg,
q_headline_bg,
@ -255,6 +259,8 @@ pub enum Event {
ChangeLanguage(LanguageMetadata),
ChangeBinding(GameInput),
ChangeFreeLookBehavior(PressBehavior),
ChangeAutoWalkBehavior(PressBehavior),
ChangeStopAutoWalkOnInput(bool),
}
// TODO: Are these the possible layouts we want?
@ -319,6 +325,7 @@ pub struct Show {
want_grab: bool,
stats: bool,
free_look: bool,
auto_walk: bool,
}
impl Show {
fn bag(&mut self, open: bool) {
@ -522,6 +529,7 @@ impl Hud {
ingame: true,
stats: false,
free_look: false,
auto_walk: false,
},
to_focus: None,
//never_show: false,
@ -1677,6 +1685,12 @@ impl Hud {
settings_window::Event::ChangeFreeLookBehavior(behavior) => {
events.push(Event::ChangeFreeLookBehavior(behavior));
},
settings_window::Event::ChangeAutoWalkBehavior(behavior) => {
events.push(Event::ChangeAutoWalkBehavior(behavior));
},
settings_window::Event::ChangeStopAutoWalkOnInput(state) => {
events.push(Event::ChangeStopAutoWalkOnInput(state));
},
}
}
}
@ -1795,6 +1809,25 @@ impl Hud {
.set(self.ids.free_look_txt, ui_widgets);
}
// Auto walk indicator
if self.show.auto_walk {
Text::new(&self.voxygen_i18n.get("hud.auto_walk_indicator"))
.color(TEXT_BG)
.mid_top_with_margin_on(
ui_widgets.window,
if self.show.free_look { 128.0 } else { 100.0 },
)
.font_id(self.fonts.cyri.conrod_id)
.font_size(self.fonts.cyri.scale(20))
.set(self.ids.auto_walk_bg, ui_widgets);
Text::new(&self.voxygen_i18n.get("hud.auto_walk_indicator"))
.color(KILL_COLOR)
.top_left_with_margins_on(self.ids.auto_walk_bg, -1.0, -1.0)
.font_id(self.fonts.cyri.conrod_id)
.font_size(self.fonts.cyri.scale(20))
.set(self.ids.auto_walk_txt, ui_widgets);
}
// Maintain slot manager
for event in self.slot_manager.maintain(ui_widgets) {
use comp::slot::Slot;
@ -2155,4 +2188,6 @@ impl Hud {
}
pub fn free_look(&mut self, free_look: bool) { self.show.free_look = free_look; }
pub fn auto_walk(&mut self, auto_walk: bool) { self.show.auto_walk = auto_walk; }
}

View File

@ -156,7 +156,11 @@ widget_ids! {
speech_bubble_dark_mode_text,
speech_bubble_dark_mode_button,
free_look_behavior_text,
free_look_behavior_list
free_look_behavior_list,
auto_walk_behavior_text,
auto_walk_behavior_list,
stop_auto_walk_on_input_button,
stop_auto_walk_on_input_label,
}
}
@ -240,6 +244,8 @@ pub enum Event {
ChangeLanguage(LanguageMetadata),
ChangeBinding(GameInput),
ChangeFreeLookBehavior(PressBehavior),
ChangeAutoWalkBehavior(PressBehavior),
ChangeStopAutoWalkOnInput(bool),
}
pub enum ScaleChange {
@ -1344,6 +1350,69 @@ impl<'a> Widget for SettingsWindow<'a> {
_ => unreachable!(),
}
}
// Auto walk behavior
Text::new(
&self
.localized_strings
.get("hud.settings.auto_walk_behavior"),
)
.down_from(state.ids.mouse_zoom_invert_button, 10.0)
.right_from(state.ids.free_look_behavior_text, 150.0)
.font_size(self.fonts.cyri.scale(14))
.font_id(self.fonts.cyri.conrod_id)
.color(TEXT_COLOR)
.set(state.ids.auto_walk_behavior_text, ui);
let auto_walk_selected =
self.global_state.settings.gameplay.auto_walk_behavior as usize;
if let Some(clicked) = DropDownList::new(&mode_label_list, Some(auto_walk_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.auto_walk_behavior_text, 8.0)
.set(state.ids.auto_walk_behavior_list, ui)
{
match clicked {
0 => events.push(Event::ChangeAutoWalkBehavior(PressBehavior::Toggle)),
1 => events.push(Event::ChangeAutoWalkBehavior(PressBehavior::Hold)),
_ => unreachable!(),
}
}
// Stop autowalk on input toggle
let stop_auto_walk_on_input_toggle = ToggleButton::new(
self.global_state.settings.gameplay.stop_auto_walk_on_input,
self.imgs.checkbox,
self.imgs.checkbox_checked,
)
.w_h(18.0, 18.0)
.right_from(state.ids.auto_walk_behavior_text, 80.0)
.hover_images(self.imgs.checkbox_mo, self.imgs.checkbox_checked_mo)
.press_images(self.imgs.checkbox_press, self.imgs.checkbox_checked)
.set(state.ids.stop_auto_walk_on_input_button, ui);
if self.global_state.settings.gameplay.stop_auto_walk_on_input
!= stop_auto_walk_on_input_toggle
{
events.push(Event::ChangeStopAutoWalkOnInput(
!self.global_state.settings.gameplay.stop_auto_walk_on_input,
));
}
Text::new(
&self
.localized_strings
.get("hud.settings.stop_auto_walk_on_input"),
)
.right_from(state.ids.stop_auto_walk_on_input_button, 10.0)
.font_size(self.fonts.cyri.scale(14))
.font_id(self.fonts.cyri.conrod_id)
.graphics_for(state.ids.stop_auto_walk_on_input_button)
.color(TEXT_COLOR)
.set(state.ids.stop_auto_walk_on_input_label, ui);
}
// 3) Controls Tab --------------------------------

View File

@ -10,6 +10,7 @@ pub struct KeyState {
pub toggle_wield: bool,
pub toggle_sit: bool,
pub toggle_dance: bool,
pub auto_walk: bool,
pub swap_loadout: bool,
pub respawn: bool,
pub analog_matrix: Vec2<f32>,
@ -27,6 +28,7 @@ impl KeyState {
toggle_wield: false,
toggle_sit: false,
toggle_dance: false,
auto_walk: false,
swap_loadout: false,
respawn: false,
analog_matrix: Vec2::zero(),
@ -37,7 +39,8 @@ impl KeyState {
let dir = if self.analog_matrix == Vec2::zero() {
Vec2::<f32>::new(
if self.right { 1.0 } else { 0.0 } + if self.left { -1.0 } else { 0.0 },
if self.up { 1.0 } else { 0.0 } + if self.down { -1.0 } else { 0.0 },
if self.up || self.auto_walk { 1.0 } else { 0.0 }
+ if self.down { -1.0 } else { 0.0 },
)
} else {
self.analog_matrix

View File

@ -142,6 +142,13 @@ impl PlayState for SessionState {
let mut ori = self.scene.camera().get_orientation();
let mut free_look = false;
let mut auto_walk = false;
fn stop_auto_walk(auto_walk: &mut bool, key_state: &mut KeyState, hud: &mut Hud) {
*auto_walk = false;
hud.auto_walk(false);
key_state.auto_walk = false;
}
// Game loop
let mut current_client_state = self.client.borrow().get_client_state();
@ -309,6 +316,7 @@ impl PlayState for SessionState {
{
self.key_state.toggle_sit = state;
if state {
stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud);
self.client.borrow_mut().toggle_sit();
}
}
@ -317,13 +325,34 @@ impl PlayState for SessionState {
{
self.key_state.toggle_dance = state;
if state {
stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud);
self.client.borrow_mut().toggle_dance();
}
}
Event::InputUpdate(GameInput::MoveForward, state) => self.key_state.up = state,
Event::InputUpdate(GameInput::MoveBack, state) => self.key_state.down = state,
Event::InputUpdate(GameInput::MoveLeft, state) => self.key_state.left = state,
Event::InputUpdate(GameInput::MoveRight, state) => self.key_state.right = state,
Event::InputUpdate(GameInput::MoveForward, state) => {
if state && global_state.settings.gameplay.stop_auto_walk_on_input {
stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud);
}
self.key_state.up = state
},
Event::InputUpdate(GameInput::MoveBack, state) => {
if state && global_state.settings.gameplay.stop_auto_walk_on_input {
stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud);
}
self.key_state.down = state
},
Event::InputUpdate(GameInput::MoveLeft, state) => {
if state && global_state.settings.gameplay.stop_auto_walk_on_input {
stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud);
}
self.key_state.left = state
},
Event::InputUpdate(GameInput::MoveRight, state) => {
if state && global_state.settings.gameplay.stop_auto_walk_on_input {
stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud);
}
self.key_state.right = state
},
Event::InputUpdate(GameInput::Glide, state) => {
self.inputs.glide.set_state(state);
},
@ -442,6 +471,21 @@ impl PlayState for SessionState {
_ => {},
};
},
Event::InputUpdate(GameInput::AutoWalk, state) => {
match (global_state.settings.gameplay.auto_walk_behavior, state) {
(PressBehavior::Toggle, true) => {
auto_walk = !auto_walk;
self.key_state.auto_walk = auto_walk;
self.hud.auto_walk(auto_walk);
},
(PressBehavior::Hold, state) => {
auto_walk = state;
self.key_state.auto_walk = auto_walk;
self.hud.auto_walk(auto_walk);
},
_ => {},
}
},
Event::AnalogGameInput(input) => match input {
AnalogGameInput::MovementX(v) => {
self.key_state.analog_matrix.x = v;
@ -767,6 +811,12 @@ impl PlayState for SessionState {
HudEvent::ChangeFreeLookBehavior(behavior) => {
global_state.settings.gameplay.free_look_behavior = behavior;
},
HudEvent::ChangeAutoWalkBehavior(behavior) => {
global_state.settings.gameplay.auto_walk_behavior = behavior;
},
HudEvent::ChangeStopAutoWalkOnInput(state) => {
global_state.settings.gameplay.stop_auto_walk_on_input = state;
},
}
}

View File

@ -140,6 +140,7 @@ impl ControlSettings {
GameInput::ToggleWield => KeyMouse::Key(VirtualKeyCode::T),
//GameInput::Charge => KeyMouse::Key(VirtualKeyCode::Key1),
GameInput::FreeLook => KeyMouse::Key(VirtualKeyCode::L),
GameInput::AutoWalk => KeyMouse::Key(VirtualKeyCode::Period),
GameInput::Slot1 => KeyMouse::Key(VirtualKeyCode::Key1),
GameInput::Slot2 => KeyMouse::Key(VirtualKeyCode::Key2),
GameInput::Slot3 => KeyMouse::Key(VirtualKeyCode::Key3),
@ -200,6 +201,7 @@ impl Default for ControlSettings {
GameInput::ToggleWield,
//GameInput::Charge,
GameInput::FreeLook,
GameInput::AutoWalk,
GameInput::Slot1,
GameInput::Slot2,
GameInput::Slot3,
@ -467,6 +469,8 @@ pub struct GameplaySettings {
pub bar_numbers: BarNumbers,
pub ui_scale: ScaleMode,
pub free_look_behavior: PressBehavior,
pub auto_walk_behavior: PressBehavior,
pub stop_auto_walk_on_input: bool,
}
impl Default for GameplaySettings {
@ -491,6 +495,8 @@ impl Default for GameplaySettings {
bar_numbers: BarNumbers::Off,
ui_scale: ScaleMode::RelativeToWindow([1920.0, 1080.0].into()),
free_look_behavior: PressBehavior::Toggle,
auto_walk_behavior: PressBehavior::Toggle,
stop_auto_walk_on_input: true,
}
}
}

View File

@ -63,6 +63,7 @@ pub enum GameInput {
//Charge,
SwapLoadout,
FreeLook,
AutoWalk,
}
impl GameInput {
@ -104,6 +105,7 @@ impl GameInput {
GameInput::ToggleWield => "gameinput.togglewield",
//GameInput::Charge => "gameinput.charge",
GameInput::FreeLook => "gameinput.freelook",
GameInput::AutoWalk => "gameinput.autowalk",
GameInput::Slot1 => "gameinput.slot1",
GameInput::Slot2 => "gameinput.slot2",
GameInput::Slot3 => "gameinput.slot3",