generated from krampus/template-godot4
	Compare commits
	
		
			3 Commits
		
	
	
		
			442c8ef7aa
			...
			37257dc3fd
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 37257dc3fd | |||
| e0dad987d2 | |||
| 07b2a33426 | 
							
								
								
									
										
											BIN
										
									
								
								asset_dev/balls/brick/Brick.png
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								asset_dev/balls/brick/Brick.png
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								asset_dev/balls/brick/brick.blend
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								asset_dev/balls/brick/brick.blend
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								assets/models/balls/brick/Brick.png
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/models/balls/brick/Brick.png
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -64,7 +64,7 @@ | |||||||
| 		{ | 		{ | ||||||
| 			"bufferView":0, | 			"bufferView":0, | ||||||
| 			"componentType":5126, | 			"componentType":5126, | ||||||
| 			"count":24, | 			"count":42, | ||||||
| 			"max":[ | 			"max":[ | ||||||
| 				0.09207499027252197, | 				0.09207499027252197, | ||||||
| 				0.05715000629425049, | 				0.05715000629425049, | ||||||
| @ -80,45 +80,45 @@ | |||||||
| 		{ | 		{ | ||||||
| 			"bufferView":1, | 			"bufferView":1, | ||||||
| 			"componentType":5126, | 			"componentType":5126, | ||||||
| 			"count":24, | 			"count":42, | ||||||
| 			"type":"VEC3" | 			"type":"VEC3" | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"bufferView":2, | 			"bufferView":2, | ||||||
| 			"componentType":5126, | 			"componentType":5126, | ||||||
| 			"count":24, | 			"count":42, | ||||||
| 			"type":"VEC2" | 			"type":"VEC2" | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"bufferView":3, | 			"bufferView":3, | ||||||
| 			"componentType":5123, | 			"componentType":5123, | ||||||
| 			"count":36, | 			"count":72, | ||||||
| 			"type":"SCALAR" | 			"type":"SCALAR" | ||||||
| 		} | 		} | ||||||
| 	], | 	], | ||||||
| 	"bufferViews":[ | 	"bufferViews":[ | ||||||
| 		{ | 		{ | ||||||
| 			"buffer":0, | 			"buffer":0, | ||||||
| 			"byteLength":288, | 			"byteLength":504, | ||||||
| 			"byteOffset":0, | 			"byteOffset":0, | ||||||
| 			"target":34962 | 			"target":34962 | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"buffer":0, | 			"buffer":0, | ||||||
| 			"byteLength":288, | 			"byteLength":504, | ||||||
| 			"byteOffset":288, | 			"byteOffset":504, | ||||||
| 			"target":34962 | 			"target":34962 | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"buffer":0, | 			"buffer":0, | ||||||
| 			"byteLength":192, | 			"byteLength":336, | ||||||
| 			"byteOffset":576, | 			"byteOffset":1008, | ||||||
| 			"target":34962 | 			"target":34962 | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"buffer":0, | 			"buffer":0, | ||||||
| 			"byteLength":72, | 			"byteLength":144, | ||||||
| 			"byteOffset":768, | 			"byteOffset":1344, | ||||||
| 			"target":34963 | 			"target":34963 | ||||||
| 		} | 		} | ||||||
| 	], | 	], | ||||||
| @ -130,7 +130,7 @@ | |||||||
| 	], | 	], | ||||||
| 	"buffers":[ | 	"buffers":[ | ||||||
| 		{ | 		{ | ||||||
| 			"byteLength":840, | 			"byteLength":1488, | ||||||
| 			"uri":"brick.bin" | 			"uri":"brick.bin" | ||||||
| 		} | 		} | ||||||
| 	] | 	] | ||||||
|  | |||||||
| @ -17,6 +17,8 @@ SETTINGS_GAME,Game | |||||||
| SETTINGS_GAME_HEADING,"Game Configuration" | SETTINGS_GAME_HEADING,"Game Configuration" | ||||||
| SETTINGS_GAME_ACCESSIBILITY_HEADING,Accessibility | SETTINGS_GAME_ACCESSIBILITY_HEADING,Accessibility | ||||||
| SETTINGS_GAME_CAMERA_HEADING,Camera | SETTINGS_GAME_CAMERA_HEADING,Camera | ||||||
|  | SETTINGS_GAME_TEXT_HEADING,"In-game Text" | ||||||
|  | SETTINGS_TEXT_SPEED,"Text Display Speed" | ||||||
| SETTINGS_SCREEN_SHAKE,"Enable Screen Shake" | SETTINGS_SCREEN_SHAKE,"Enable Screen Shake" | ||||||
| SETTINGS_HIT_LAG,"Enable Hit Lag Effect" | SETTINGS_HIT_LAG,"Enable Hit Lag Effect" | ||||||
| SETTINGS_GAME_GAMEPLAY_HEADING,Gameplay | SETTINGS_GAME_GAMEPLAY_HEADING,Gameplay | ||||||
|  | |||||||
| 
 | 
| @ -21,7 +21,6 @@ run/max_fps=60 | |||||||
| 
 | 
 | ||||||
| ClubCatalog="*res://src/equipment/clubs/club_catalog.tscn" | ClubCatalog="*res://src/equipment/clubs/club_catalog.tscn" | ||||||
| GameSettings="*res://src/game/game_settings.gd" | GameSettings="*res://src/game/game_settings.gd" | ||||||
| BindingLoader="*res://src/game/binding_loader.gd" |  | ||||||
| 
 | 
 | ||||||
| [debug] | [debug] | ||||||
| 
 | 
 | ||||||
| @ -64,6 +63,7 @@ config/accessibility/enable_hit_lag=true | |||||||
| audio/buses/override_bus_layout="user://audio_bus_layout.tres" | audio/buses/override_bus_layout="user://audio_bus_layout.tres" | ||||||
| config/gameplay/projection/detect_collision=true | config/gameplay/projection/detect_collision=true | ||||||
| config/gameplay/projection/use_local_gravity=true | config/gameplay/projection/use_local_gravity=true | ||||||
|  | config/text/default_text_speed=20.0 | ||||||
| 
 | 
 | ||||||
| [global_group] | [global_group] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,35 +0,0 @@ | |||||||
| class_name BindingLoaderType extends Node |  | ||||||
| ## Handles persisting action input bindings. |  | ||||||
| 
 |  | ||||||
| const BINDINGS_FILE := "user://bindings.tres" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| func _ready() -> void: |  | ||||||
| 	# Map may not be defined if no keybinds have been written |  | ||||||
| 	if FileAccess.file_exists(BINDINGS_FILE): |  | ||||||
| 		print_debug("Reading keybinds from ", BINDINGS_FILE) |  | ||||||
| 		var map: BindingMap = load(BINDINGS_FILE) as BindingMap |  | ||||||
| 
 |  | ||||||
| 		# Overwrite InputMap with loaded bindings |  | ||||||
| 		for action: StringName in map.bindings.keys(): |  | ||||||
| 			# Clear existing bindings |  | ||||||
| 			InputMap.action_erase_events(action) |  | ||||||
| 			# Apply loaded binding |  | ||||||
| 			var event: InputEvent = map.bindings[action] |  | ||||||
| 			if event: |  | ||||||
| 				InputMap.action_add_event(action, event) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| func write() -> void: |  | ||||||
| 	# Build map from input actions |  | ||||||
| 	var map: BindingMap = BindingMap.new() |  | ||||||
| 	for action: StringName in InputMap.get_actions(): |  | ||||||
| 		var events := InputMap.action_get_events(action) |  | ||||||
| 		if events: |  | ||||||
| 			map.bindings[action] = events[0] |  | ||||||
| 		else: |  | ||||||
| 			map.bindings[action] = null |  | ||||||
| 
 |  | ||||||
| 	# Write to disk |  | ||||||
| 	print_debug("Writing keybinds to ", BINDINGS_FILE) |  | ||||||
| 	ResourceSaver.save(map, BINDINGS_FILE) |  | ||||||
| @ -10,12 +10,15 @@ var y_sensitivity: float | |||||||
| var x_acceleration: float | var x_acceleration: float | ||||||
| var y_acceleration: float | var y_acceleration: float | ||||||
| var invert_pitch: bool | var invert_pitch: bool | ||||||
|  | 
 | ||||||
| var enable_screen_shake: bool | var enable_screen_shake: bool | ||||||
| var enable_hit_lag: bool | var enable_hit_lag: bool | ||||||
| 
 | 
 | ||||||
| var projection_collisions: bool | var projection_collisions: bool | ||||||
| var projection_gravity: bool | var projection_gravity: bool | ||||||
| 
 | 
 | ||||||
|  | var default_text_speed: float | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| func _init() -> void: | func _init() -> void: | ||||||
| 	ProjectSettings.settings_changed.connect(_read_settings) | 	ProjectSettings.settings_changed.connect(_read_settings) | ||||||
| @ -46,6 +49,8 @@ func _read_settings() -> void: | |||||||
| 		"game/config/gameplay/projection/use_local_gravity" | 		"game/config/gameplay/projection/use_local_gravity" | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
|  | 	default_text_speed = ProjectSettings.get_setting("game/config/text/default_text_speed") | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| func _load_audio_bus_override() -> void: | func _load_audio_bus_override() -> void: | ||||||
| 	# Load override audio bus file | 	# Load override audio bus file | ||||||
|  | |||||||
| @ -0,0 +1,40 @@ | |||||||
|  | @tool | ||||||
|  | class_name TypewriterEffect | ||||||
|  | extends RichTextEffect | ||||||
|  | ## BBCode effect which procedurally shows the text character by character, from start to end. | ||||||
|  | ## Tag params: | ||||||
|  | ## - speed - Speed at which text is displayed, in characters per second. | ||||||
|  | ## - delay - Delay before displaying first character, in seconds. | ||||||
|  | 
 | ||||||
|  | signal typing | ||||||
|  | signal on_frame_process_start | ||||||
|  | 
 | ||||||
|  | # To use this effect: | ||||||
|  | # - Enable BBCode on a RichTextLabel. | ||||||
|  | # - Instead of instantiating this effect directly, use a `TypewriterLabel` node. | ||||||
|  | # - Use [type speed=10.0 delay=0.0]hello[/type] in text. | ||||||
|  | var bbcode: String = "type" | ||||||
|  | 
 | ||||||
|  | var _force_visible := false | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func _init(force_visible_signal: Signal) -> void: | ||||||
|  | 	if force_visible_signal: | ||||||
|  | 		force_visible_signal.connect(_set_force_visible) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func _process_custom_fx(char_fx: CharFXTransform) -> bool: | ||||||
|  | 	if not _force_visible: | ||||||
|  | 		var speed: float = char_fx.env.get("speed", Game.settings.default_text_speed) | ||||||
|  | 		var delay: float = char_fx.env.get("delay", 0.0) | ||||||
|  | 
 | ||||||
|  | 		char_fx.visible = (char_fx.elapsed_time - delay) * speed >= char_fx.relative_index | ||||||
|  | 
 | ||||||
|  | 		if not char_fx.visible: | ||||||
|  | 			typing.emit() | ||||||
|  | 
 | ||||||
|  | 	return true | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func _set_force_visible() -> void: | ||||||
|  | 	_force_visible = true | ||||||
| @ -0,0 +1,53 @@ | |||||||
|  | class_name TypewriterLabel extends RichTextLabel | ||||||
|  | ## RichTextLabel with a managed typewriter effect. | ||||||
|  | ## Allows for signal-based monitoring of a typewriter effect's status. | ||||||
|  | ## In most cases you'll want to use this rather than instantiating TypewriterEffect yourself. | ||||||
|  | ## Use `display_text` to set the text for this label. | ||||||
|  | 
 | ||||||
|  | ## Emitted on the first frame that all characters in the typewriter effect are visible. | ||||||
|  | signal typing_finished | ||||||
|  | 
 | ||||||
|  | ## Emit this to force the typewriter effect to finish on the next update. | ||||||
|  | ## Useful for advancing skippable dialogue boxes. | ||||||
|  | signal force_visible | ||||||
|  | 
 | ||||||
|  | var _finished: bool = true | ||||||
|  | var _typing: bool = false | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func _init() -> void: | ||||||
|  | 	bbcode_enabled = true | ||||||
|  | 	var effect := TypewriterEffect.new(force_visible) | ||||||
|  | 	effect.typing.connect(_on_typing) | ||||||
|  | 	install_effect(effect) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Is the typewriter effect finished? | ||||||
|  | func is_finished() -> bool: | ||||||
|  | 	return _finished | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Reset the manager's progress monitor. | ||||||
|  | ## This is called automatically when setting the label text with `set_text` | ||||||
|  | func reset() -> void: | ||||||
|  | 	_finished = false | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Clear the text box and set a new line of text. | ||||||
|  | ## The `finished` signal will be emitted when the text is done displaying. | ||||||
|  | func display_text(text: String) -> void: | ||||||
|  | 	reset() | ||||||
|  | 	clear() | ||||||
|  | 	append_text(text) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func _process(_delta: float) -> void: | ||||||
|  | 	if not _finished: | ||||||
|  | 		if not _typing: | ||||||
|  | 			_finished = true | ||||||
|  | 			typing_finished.emit() | ||||||
|  | 		_typing = false | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | func _on_typing() -> void: | ||||||
|  | 	_typing = true | ||||||
| @ -19,6 +19,10 @@ var listening: bool = false: | |||||||
| @onready var button: Button = %Button | @onready var button: Button = %Button | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | func _get_settings_key() -> String: | ||||||
|  | 	return "input/%s" % key | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| func _ready() -> void: | func _ready() -> void: | ||||||
| 	# gdlint:ignore = private-method-call | 	# gdlint:ignore = private-method-call | ||||||
| 	super._ready() | 	super._ready() | ||||||
| @ -99,6 +103,12 @@ func rebind(event: InputEvent) -> void: | |||||||
| 	listening = false | 	listening = false | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | func apply() -> void: | ||||||
|  | 	var setting: Dictionary = ProjectSettings.get_setting(_get_settings_key()) | ||||||
|  | 	setting["events"] = InputMap.action_get_events(key) | ||||||
|  | 	ProjectSettings.set_setting(_get_settings_key(), setting) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| static func create(_key: StringName) -> ControlBinding: | static func create(_key: StringName) -> ControlBinding: | ||||||
| 	var instance: ControlBinding = SCENE.instantiate() | 	var instance: ControlBinding = SCENE.instantiate() | ||||||
| 	instance.key = _key | 	instance.key = _key | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| [ext_resource type="Script" path="res://src/ui/menus/settings_menu/control_binding/control_binding.gd" id="1_7mwhu"] | [ext_resource type="Script" path="res://src/ui/menus/settings_menu/control_binding/control_binding.gd" id="1_7mwhu"] | ||||||
| 
 | 
 | ||||||
| [node name="ControlBinding" type="PanelContainer"] | [node name="ControlBinding" type="PanelContainer" groups=["ControlBindings"]] | ||||||
| theme_type_variation = &"CheckerContainerOdd" | theme_type_variation = &"CheckerContainerOdd" | ||||||
| script = ExtResource("1_7mwhu") | script = ExtResource("1_7mwhu") | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ extends MarginContainer | |||||||
| 
 | 
 | ||||||
| const SETTINGS_GROUP := "Settings" | const SETTINGS_GROUP := "Settings" | ||||||
| const VOLUME_GROUP := "VolumeSliders" | const VOLUME_GROUP := "VolumeSliders" | ||||||
|  | const BINDINGS_GROUP := "ControlBindings" | ||||||
| 
 | 
 | ||||||
| @onready var bus_mixer_list: HBoxContainer = %BusMixerList | @onready var bus_mixer_list: HBoxContainer = %BusMixerList | ||||||
| @onready var control_binding_list: VBoxContainer = %ControlBindingList | @onready var control_binding_list: VBoxContainer = %ControlBindingList | ||||||
| @ -25,6 +26,12 @@ func _get_volume_sliders() -> Array[VolumeSlider]: | |||||||
| 	return elements | 	return elements | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | func _get_control_bindings() -> Array[ControlBinding]: | ||||||
|  | 	var elements: Array[ControlBinding] = [] | ||||||
|  | 	elements.assign(get_tree().get_nodes_in_group(BINDINGS_GROUP)) | ||||||
|  | 	return elements | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| func populate_control_bindings() -> void: | func populate_control_bindings() -> void: | ||||||
| 	for action: StringName in InputMap.get_actions(): | 	for action: StringName in InputMap.get_actions(): | ||||||
| 		if not action.begins_with("ui_"): | 		if not action.begins_with("ui_"): | ||||||
| @ -47,12 +54,13 @@ func apply() -> void: | |||||||
| 		setting.apply() | 		setting.apply() | ||||||
| 	for mixer: VolumeSlider in _get_volume_sliders(): | 	for mixer: VolumeSlider in _get_volume_sliders(): | ||||||
| 		mixer.apply() | 		mixer.apply() | ||||||
|  | 	for binding: ControlBinding in _get_control_bindings(): | ||||||
|  | 		binding.apply() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ## Write all applied settings to disk. | ## Write all applied settings to disk. | ||||||
| func save_settings() -> void: | func save_settings() -> void: | ||||||
| 	Game.settings.write() | 	Game.settings.write() | ||||||
| 	BindingLoader.write() |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ## Apply settings and close menu. | ## Apply settings and close menu. | ||||||
|  | |||||||
| @ -106,6 +106,28 @@ key = &"game/config/gameplay/projection/use_local_gravity" | |||||||
| [node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionGravity" index="1"] | [node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionGravity" index="1"] | ||||||
| text = "SETTINGS_PROJECTION_GRAVITY" | text = "SETTINGS_PROJECTION_GRAVITY" | ||||||
| 
 | 
 | ||||||
|  | [node name="TextHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] | ||||||
|  | layout_mode = 2 | ||||||
|  | 
 | ||||||
|  | [node name="Label" type="Label" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TextHeading"] | ||||||
|  | layout_mode = 2 | ||||||
|  | theme_type_variation = &"HeaderMedium" | ||||||
|  | text = "SETTINGS_GAME_TEXT_HEADING" | ||||||
|  | 
 | ||||||
|  | [node name="HSeparator" type="HSeparator" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TextHeading"] | ||||||
|  | layout_mode = 2 | ||||||
|  | size_flags_horizontal = 3 | ||||||
|  | 
 | ||||||
|  | [node name="TextSpeed" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("3_jox8e")] | ||||||
|  | layout_mode = 2 | ||||||
|  | key = &"game/config/text/default_text_speed" | ||||||
|  | 
 | ||||||
|  | [node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TextSpeed" index="1"] | ||||||
|  | text = "SETTINGS_TEXT_SPEED" | ||||||
|  | 
 | ||||||
|  | [node name="SpinBox" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TextSpeed/PanelContainer/MarginContainer/NumericSlider" index="1"] | ||||||
|  | suffix = "char/s" | ||||||
|  | 
 | ||||||
| [node name="CameraHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] | [node name="CameraHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"] | ||||||
| layout_mode = 2 | layout_mode = 2 | ||||||
| 
 | 
 | ||||||
| @ -492,6 +514,8 @@ text = "UI_ACCEPT" | |||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/HitLag"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/HitLag"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionCollision"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionCollision"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionGravity"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ProjectionGravity"] | ||||||
|  | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TextSpeed"] | ||||||
|  | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/TextSpeed/PanelContainer/MarginContainer/NumericSlider"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FreeCameraSpeed"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FreeCameraSpeed"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FreeCameraSpeed/PanelContainer/MarginContainer/NumericSlider"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/FreeCameraSpeed/PanelContainer/MarginContainer/NumericSlider"] | ||||||
| [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityX"] | [editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityX"] | ||||||
|  | |||||||
| @ -1,4 +0,0 @@ | |||||||
| class_name BindingMap extends Resource |  | ||||||
| ## Serializable action input map. Used by `BindingLoader`. |  | ||||||
| 
 |  | ||||||
| @export var bindings: Dictionary |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user