diff options
-rw-r--r-- | client/menu/entry.gd | 2 | ||||
-rw-r--r-- | client/menu/menu.gd | 2 | ||||
-rw-r--r-- | client/menu/popup_message.gd | 74 | ||||
-rw-r--r-- | client/menu/settings/input/input_manager.gd | 36 | ||||
-rw-r--r-- | client/menu/settings/input/input_value_node.gd | 15 | ||||
-rw-r--r-- | client/menu/setup.gd | 2 | ||||
-rw-r--r-- | client/project.godot | 7 | ||||
-rw-r--r-- | client/settings.gd | 2 | ||||
-rw-r--r-- | locale/en.ini | 12 |
9 files changed, 105 insertions, 47 deletions
diff --git a/client/menu/entry.gd b/client/menu/entry.gd index 456709ed..00420ac6 100644 --- a/client/menu/entry.gd +++ b/client/menu/entry.gd @@ -18,7 +18,7 @@ extends Menu func _ready(): super() - if not Global.get_setting("gameplay.setup_complete"): + if not Global.get_setting("gameplay.setup_completed"): await submenu("res://menu/setup.tscn") else: await submenu("res://menu/main.tscn") diff --git a/client/menu/menu.gd b/client/menu/menu.gd index 30a9ca7d..52a9bd7d 100644 --- a/client/menu/menu.gd +++ b/client/menu/menu.gd @@ -125,6 +125,6 @@ func update_parent_menu(node: Node): func _input(_event): if popup != null: return if Time.get_ticks_msec() - open_since < 100: return - if Input.is_action_just_pressed("ui_cancel"): + if Input.is_action_just_pressed("menu"): Sound.play_click() exit() diff --git a/client/menu/popup_message.gd b/client/menu/popup_message.gd index 1464e20c..d3e7905d 100644 --- a/client/menu/popup_message.gd +++ b/client/menu/popup_message.gd @@ -109,32 +109,55 @@ func _input(_event): Global.set_hint("has_reset", true) func _on_boost_timeout(): - if not Global.get_hint("has_boosted") and not Global.get_setting("ui.touch_controls"): - display_hint_msg(tr("Press %s to boost") % display_keybind(tr("SHIFT"), "B")) + if not Global.get_hint("has_boosted") and not Global.using_touch: + display_hint_msg(tr("c.hint.boost") % display_keybind("boost")) func _on_move_timeout(): - if not Global.get_hint("has_moved") and not Global.get_setting("ui.touch_controls"): - display_hint_msg(tr("Use %s to move") % display_keybind("WASD", tr("left stick"))) + if not Global.get_hint("has_moved") and not Global.using_touch: + display_hint_msg(tr("c.hint.movement") % ", ".join( + [ + display_keybind("forwards"), + display_keybind("left"), + display_keybind("backwards"), + display_keybind("right") + ] + )) func _on_interact_timeout(): - if not Global.get_hint("has_interacted") and not Global.get_setting("ui.touch_controls"): - var keybind = display_keybind(tr("SPACE"), "A") - display_hint_msg(tr("Press %s to pick up items and hold %s to interact with tools") % [keybind, keybind]) + if not Global.get_hint("has_interacted") and not Global.using_touch: + display_hint_msg(tr("c.hint.interact") % display_keybind("interact")) func _on_reset_timeout(): - if not Global.get_hint("has_reset") and not Global.get_setting("ui.touch_controls"): - display_hint_msg(tr("Press %s to reset the camera view") % display_keybind("R", "Y")) + if not Global.get_hint("has_reset") and not Global.using_touch: + display_hint_msg(tr("c.hint.reset_camera") % display_keybind("reset")) func _on_zoom_timeout(): - if not Global.get_hint("has_zoomed") and not Global.get_setting("ui.touch_controls"): - display_hint_msg(tr("Use %s to zoom in/out") % display_keybind(tr("PageUp/PageDown"), "LT/RT")) + if not Global.get_hint("has_zoomed") and not Global.using_touch: + display_hint_msg(tr("c.hint.zoom_camera") % ", ".join( + [ + display_keybind("zoom_in"), + display_keybind("zoom_out") + ] + )) -func display_keybind(keyboard: String, joypad: String, touch = null) -> String: - if Global.using_joypad: - return joypad + " (Joypad)" - if touch != null: - return touch - return keyboard +func display_keybind(action_name: String) -> String: + var events := InputManager.get_events(action_name) + + if events.size() == 0: + # There are no events which match the action + return tr("c.settings.input.unknown_event") + + for event: InputEvent in events: + # Try to find event which matches input method + var type := InputManager.get_event_type(event) + if Global.using_joypad and type != InputManager.EventType.JOYPAD: + continue + if Global.using_touch and type != InputManager.EventType.TOUCH: + continue + return InputManager.display_input_event(event) + + # No matching event found. Just show any event. + return InputManager.display_input_event(events[0]) func any_action_just_pressed(actions: Array) -> bool: for a: String in actions: @@ -143,20 +166,27 @@ func any_action_just_pressed(actions: Array) -> bool: return false func _on_rotate_camera_timeout(): - if not Global.get_hint("has_rotated") and not Global.get_setting("ui.touch_controls"): - display_hint_msg(tr("Use %s to rotate the camera view") % display_keybind(tr("arrow keys"), tr("right stick"))) + if not Global.get_hint("has_rotated") and not Global.using_touch: + display_hint_msg(tr("c.hint.rotate") % ", ".join( + [ + display_keybind("rotate_up"), + display_keybind("rotate_left"), + display_keybind("rotate_down"), + display_keybind("rotate_right") + ] + )) func _on_nametags_timeout(): if not Global.get_hint("has_seen_nametags") and not Global.get_setting("graphics.usernames"): Global.set_hint("has_seen_nametags", true) - display_hint_msg(tr("Username tags can be enabled/disabled in the settings")) + display_hint_msg(tr("c.hint.username_tags")) func _on_join_while_running_timeout(): if not game.is_joined and not Global.get_hint("has_seen_join_while_running"): Global.set_hint("has_seen_join_while_running", true) - display_hint_msg(tr("Press %s and click \"Join\" to join the game while it is running") % display_keybind(tr("ESCAPE"), tr("Menu button"))) + display_hint_msg(tr("c.hint.join_while_running") % display_keybind("menu")) func _on_performance_timeout() -> void: if not Global.get_hint("has_seen_performance") and Engine.get_frames_per_second() < DisplayServer.screen_get_refresh_rate() * 0.75: Global.set_hint("has_seen_performance", true) - display_hint_msg(tr("Your framerate seems to be low. You can lower your graphics settings in the settings menu.")) + display_hint_msg(tr("c.hint.framerate_low")) diff --git a/client/menu/settings/input/input_manager.gd b/client/menu/settings/input/input_manager.gd index d216884b..640410d0 100644 --- a/client/menu/settings/input/input_manager.gd +++ b/client/menu/settings/input/input_manager.gd @@ -16,8 +16,15 @@ # extends Node +enum EventType { + KEYBOARD, + JOYPAD, + TOUCH, + OTHER +} + var default_input_map = {} -var input_map +var input_map: Dictionary func _init(): default_input_map = get_input_map() @@ -31,6 +38,12 @@ func get_input_map() -> Dictionary: kb[a] = input_events return kb +func get_events(action_name: String) -> Array: + if not input_map.has(action_name): + push_error("Tried to get action %s in input map which does not exist" % action_name) + return [] + return input_map[action_name] + func input_map_to_settings(map: Dictionary) -> Array: var entries := [] for k in map.keys(): @@ -68,3 +81,24 @@ func apply_input_map(new_input_map: Dictionary): func reset_input_map(): Global.set_setting("input_map", default_input_map.duplicate()) apply_input_map(Global.get_setting("input_map")) + +func get_event_type(input_event: InputEvent) -> EventType: + if input_event is InputEventKey or input_event is InputEventMouseButton: + return EventType.KEYBOARD + elif input_event is InputEventJoypadButton or input_event is InputEventJoypadMotion: + return EventType.JOYPAD + elif input_event is InputEventScreenTouch or input_event is InputEventScreenDrag: + return EventType.TOUCH + return EventType.OTHER + +func display_input_event(input_event: InputEvent) -> String: + if input_event is InputEventKey: + return tr("c.settings.input.keyboard") % OS.get_keycode_string(input_event.physical_keycode) + elif input_event is InputEventMouseButton: + return tr("c.settings.input.mouse_button") % input_event.button_index + elif input_event is InputEventJoypadButton: + return tr("c.settings.input.joypad") % input_event.button_index + elif input_event is InputEventJoypadMotion: + return tr("c.settings.input.joypad_axis") % [input_event.axis] + else: + return tr("c.settings.input.other_event") diff --git a/client/menu/settings/input/input_value_node.gd b/client/menu/settings/input/input_value_node.gd index 9f89416b..ef00c09b 100644 --- a/client/menu/settings/input/input_value_node.gd +++ b/client/menu/settings/input/input_value_node.gd @@ -34,20 +34,9 @@ func update(fix_focus: bool = false): c.queue_free() for e: InputEvent in value: - var description: String - - if e is InputEventKey: - description = tr("%s (Keyboard)") % OS.get_keycode_string(e.physical_keycode) - elif e is InputEventMouseButton: - description = tr("Mouse button %s") % e.button_index - elif e is InputEventJoypadButton: - description = tr("%s (Joypad)") % e.button_index - elif e is InputEventJoypadMotion: - description = tr("Joypad axis %s") % [e.axis] - else: - description = tr("Other event") - + var description: String = InputManager.display_input_event(e) var button := Button.new() + button.text = description button.pressed.connect(erase_event.bind(e)) actions_container.add_child(button) diff --git a/client/menu/setup.gd b/client/menu/setup.gd index 16944c7c..c87e0112 100644 --- a/client/menu/setup.gd +++ b/client/menu/setup.gd @@ -73,5 +73,5 @@ func _on_sign_pressed(): Global.set_profile("username", username.text) Global.set_profile("character", character) - Global.set_setting("gameplay.setup_complete", true) + Global.set_setting("gameplay.setup_completed", true) replace_menu("res://menu/main.tscn") diff --git a/client/project.godot b/client/project.godot index 00a959e0..224839ef 100644 --- a/client/project.godot +++ b/client/project.godot @@ -193,6 +193,13 @@ scroll_up={ "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null) ] } +menu={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null) +] +} [internationalization] diff --git a/client/settings.gd b/client/settings.gd index f2f4563c..afc05399 100644 --- a/client/settings.gd +++ b/client/settings.gd @@ -24,7 +24,7 @@ static func get_root(): ToggleSetting.new("interpolate_camera_rotation", false), ToggleSetting.new("invert_camera", false), ToggleSetting.new("usernames", true), - ToggleSetting.new("setup_complete", false), + ToggleSetting.new("setup_completed", false), ToggleSetting.new("tutorial_started", false), ToggleSetting.new("latch_boost", true), ]), diff --git a/locale/en.ini b/locale/en.ini index 509cfd34..f570818a 100644 --- a/locale/en.ini +++ b/locale/en.ini @@ -13,9 +13,12 @@ c.error.websocket=WebSocket closed with code: %d, reason %s. Clean: %s c.error=Error c.hint.boost=Press %s to boost c.hint.framerate_low=Your framerate seems to be low. You can lower your graphics settings in the settings menu. -c.hint.interact=Press %s to pick up items and hold %s to interact with tools +c.hint.interact=Press %s to pick up items and to interact with tools +c.hint.join_while_running=Press %s and click "Join" to join the game while it is running c.hint.movement=Use %s to move c.hint.reset_camera=Press %s to reset the camera view +c.hint.rotate=Use %s to rotate the camera view +c.hint.username_tags=Username tags can be enabled/disabled in the settings c.hint.zoom_camera=Use %s to zoom in/out c.hint=Hint c.map.difficulty.0=Easy @@ -124,6 +127,7 @@ c.settings.input.scroll_down=Scroll down c.settings.input.scroll_up_discrete=Scroll up (discrete) c.settings.input.scroll_up=Scroll up c.settings.input.start_game=Start game +c.settings.input.unknown_event=Unknown event c.settings.input.zoom_in_discrete=Zoom in (discrete) c.settings.input.zoom_in=Zoom in c.settings.input.zoom_out_discrete=Zoom out (discrete) @@ -173,14 +177,8 @@ unknown464=- unknown476=SHIFT unknown484=left stick unknown488=SPACE -unknown506=PageUp/PageDown -unknown510=Use %s to rotate the camera view unknown514=arrow keys unknown518=right stick -unknown524=Username tags can be enabled/disabled in the settings -unknown530=Press %s and click "Join" to join the game while it is running -unknown534=ESCAPE -unknown538=Menu button unknown551=unavailable unknown568=Hairstyle %d unknown622=You must fill out all requested fields. |