Don't hardcore node paths

main
copygirl 1 month ago
parent e35eb0c9c8
commit 49c7a706a8
  1. 30
      Scenes/copy_multiplayer_settings.gd
  2. 31
      Scenes/copy_multiplayer_settings.tscn
  3. 1
      Scenes/player_settings.tscn
  4. 1
      Scenes/sync_controller.gd
  5. 51
      copyMultiplayer.gd

@ -4,21 +4,29 @@ extends TabContainer
@export var visible_icon : Texture2D
@export var hidden_icon : Texture2D
@export var connect_address : LineEdit
@export var connect_reveal : Button
@export var connect_port : SpinBox
@export var connect_join : Button
@export var connect_host : Button
@export var connect_disconnect : Button
@export var settings_cache : LineEdit
@export var settings_file_dialog : FileDialog
@export var settings_nickname : LineEdit
func is_tab_selected(tab_name: String) -> bool:
return get_current_tab_control().name == tab_name
func _on_cache_dir_dialog_pressed() -> void:
var widget: LineEdit = $"Settings/VBoxContainer/Cache/LineEdit"
var dialog: FileDialog = $"Settings/VBoxContainer/Cache/FileDialog"
dialog.size = get_window().size / 2
dialog.position = get_window().size / 4
dialog.current_dir = widget.text
dialog.popup()
settings_file_dialog.size = get_window().size / 2
settings_file_dialog.position = get_window().size / 4
settings_file_dialog.current_dir = settings_cache.text
settings_file_dialog.popup()
widget.text = await dialog.dir_selected
widget.text_changed.emit(widget.text)
settings_cache.text = await settings_file_dialog.dir_selected
settings_cache.text_changed.emit(settings_cache.text)
func _on_show_hide_address_toggled(toggled_on: bool) -> void:
$"Connect/VBoxContainer/Host/Address".secret = !toggled_on
$"Connect/VBoxContainer/Host/ShowHide".icon = visible_icon if toggled_on else hidden_icon
connect_address.secret = !toggled_on
connect_reveal.icon = visible_icon if toggled_on else hidden_icon

@ -4,7 +4,7 @@
[ext_resource type="Texture2D" uid="uid://qbho5oyu1kfa" path="res://Mods/copyMultiplayer/Resources/hidden.png" id="2_1u5pu"]
[ext_resource type="Texture2D" uid="uid://dcmljlb2v6p16" path="res://Mods/copyMultiplayer/Resources/visible.png" id="2_ibe7i"]
[node name="copyMultiplayerSettings" type="TabContainer"]
[node name="copyMultiplayerSettings" type="TabContainer" node_paths=PackedStringArray("connect_address", "connect_reveal", "connect_port", "connect_join", "connect_host", "connect_disconnect", "settings_cache", "settings_file_dialog", "settings_nickname", "stats_ping", "stats_average", "stats_maximum")]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
@ -12,13 +12,21 @@ grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
current_tab = 2
current_tab = 0
script = ExtResource("1_7d55i")
visible_icon = ExtResource("2_ibe7i")
hidden_icon = ExtResource("2_1u5pu")
connect_address = NodePath("Connect/VBoxContainer/Join/Address")
connect_reveal = NodePath("Connect/VBoxContainer/Join/ShowHide")
connect_port = NodePath("Connect/VBoxContainer/Host/Port")
connect_join = NodePath("Connect/VBoxContainer/Join/Button")
connect_host = NodePath("Connect/VBoxContainer/Host/Button")
connect_disconnect = NodePath("Connect/VBoxContainer/Disconnect")
settings_cache = NodePath("Settings/VBoxContainer/Cache/LineEdit")
settings_file_dialog = NodePath("Settings/VBoxContainer/Cache/FileDialog")
settings_nickname = NodePath("Settings/VBoxContainer/Nickname/LineEdit")
[node name="Connect" type="MarginContainer" parent="."]
visible = false
layout_mode = 2
theme_override_constants/margin_left = 4
theme_override_constants/margin_top = 4
@ -33,7 +41,7 @@ layout_mode = 2
layout_mode = 2
[node name="Label" type="Label" parent="Connect/VBoxContainer/Join"]
custom_minimum_size = Vector2(80, 0)
custom_minimum_size = Vector2(100, 0)
layout_mode = 2
text = "Address:"
horizontal_alignment = 2
@ -63,7 +71,7 @@ text = "Join"
layout_mode = 2
[node name="Label" type="Label" parent="Connect/VBoxContainer/Host"]
custom_minimum_size = Vector2(80, 0)
custom_minimum_size = Vector2(100, 0)
layout_mode = 2
text = "Port:"
horizontal_alignment = 2
@ -109,7 +117,7 @@ layout_mode = 2
layout_mode = 2
[node name="Label" type="Label" parent="Settings/VBoxContainer/Cache"]
custom_minimum_size = Vector2(80, 0)
custom_minimum_size = Vector2(100, 0)
layout_mode = 2
text = "Cache:"
horizontal_alignment = 2
@ -131,20 +139,21 @@ ok_button_text = "Select Current Folder"
file_mode = 2
access = 2
[node name="Name" type="HBoxContainer" parent="Settings/VBoxContainer"]
[node name="Nickname" type="HBoxContainer" parent="Settings/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="Settings/VBoxContainer/Name"]
custom_minimum_size = Vector2(80, 0)
[node name="Label" type="Label" parent="Settings/VBoxContainer/Nickname"]
custom_minimum_size = Vector2(100, 0)
layout_mode = 2
text = "Name:"
text = "Nickname:"
horizontal_alignment = 2
[node name="LineEdit" type="LineEdit" parent="Settings/VBoxContainer/Name"]
[node name="LineEdit" type="LineEdit" parent="Settings/VBoxContainer/Nickname"]
layout_mode = 2
size_flags_horizontal = 3
[node name="Players" type="MarginContainer" parent="."]
visible = false
layout_mode = 2
theme_override_constants/margin_left = 4
theme_override_constants/margin_top = 4

@ -167,6 +167,7 @@ size_flags_horizontal = 3
min_value = 0.5
max_value = 2.0
step = 0.01
value = 1.0
alignment = 2
custom_arrow_step = 0.05

@ -206,6 +206,7 @@ func update_collision_shape_position() -> void:
var right_foot := _get_bone_position("RightFoot")
var avg_foot := (left_foot + right_foot) / 2
shape.global_position = skeleton.global_position + (head + avg_foot) / 2
# FIXME: This doesn't consider rotation or scale.
func _get_bone_position(bone_name: String) -> Vector3:
var idx := skeleton.find_bone(bone_name)

@ -47,16 +47,15 @@ func _ready() -> void:
for phalange in [ "Proximal", "Intermediate", "Distal" ]:
tracked_bones.append("%s%s%s" % [ side, finger, phalange ])
setup_setting_widget("address" , "Connect/VBoxContainer/Join/Address" , true )
setup_setting_widget("port" , "Connect/VBoxContainer/Host/Port" , true )
setup_setting_widget("cache" , "Settings/VBoxContainer/Cache/LineEdit", true )
setup_setting_widget("nickname", "Settings/VBoxContainer/Name/LineEdit" , false)
setup_setting_widget("connect" , "address" , true )
setup_setting_widget("connect" , "port" , true )
setup_setting_widget("settings", "cache" , true )
setup_setting_widget("settings", "nickname", false)
setup_button_connections()
# Filter whitespace characters from nickname before saving it to "nickname" field.
var nickname_widget: LineEdit = get_settings_window().get_node("Settings/VBoxContainer/Name/LineEdit")
var nickname_widget := get_settings_window().settings_nickname
nickname_widget.text_changed.connect(func(new_text): modify_setting("nickname", new_text.strip_edges()))
nickname_widget.text_submitted.connect(func(_new_text): nickname_widget.text = nickname)
nickname_widget.focus_exited.connect(func(): nickname_widget.text = nickname)
@ -73,24 +72,28 @@ func _exit_tree() -> void:
func _create_settings_window() -> Control:
return load("res://Mods/copyMultiplayer/Scenes/copy_multiplayer_settings.tscn").instantiate()
func setup_setting_widget(setting_name: String, path: NodePath, setup_events: bool) -> void:
var settings = get_settings_window()
var widget: Control = settings.get_node(path)
# Override base method to provide type hint.
func get_settings_window() -> copyMultiplayerSettings:
return super.get_settings_window()
func setup_setting_widget(category: String, setting: String, setup_events: bool) -> void:
var settings := get_settings_window()
var widget: Control = settings.get("%s_%s" % [ category, setting ])
_settings_properties.append({ name = setting_name, args = { } })
_settings_widgets_by_setting_name[setting_name] = widget
_settings_properties.append({ name = setting, args = { } })
_settings_widgets_by_setting_name[setting] = widget
if setup_events:
if widget is LineEdit: widget.text_changed.connect(
func(text): modify_setting(setting_name, text))
func(text): modify_setting(setting, text))
if widget is SpinBox: widget.value_changed.connect(
func(number): modify_setting(setting_name, roundi(number)))
func(number): modify_setting(setting, roundi(number)))
func setup_button_connections() -> void:
var window = get_settings_window()
window.get_node("Connect/VBoxContainer/Join/Button").pressed.connect(on_join_pressed)
window.get_node("Connect/VBoxContainer/Host/Button").pressed.connect(on_host_pressed)
window.get_node("Connect/VBoxContainer/Disconnect" ).pressed.connect(on_disconnect_pressed)
var settings := get_settings_window()
settings.connect_join.pressed.connect(on_join_pressed)
settings.connect_host.pressed.connect(on_host_pressed)
settings.connect_disconnect.pressed.connect(on_disconnect_pressed)
var player_settings_scene: PackedScene = load("res://Mods/copyMultiplayer/Scenes/player_settings.tscn")
func new_player_settings() -> PlayerSettings:
@ -175,13 +178,13 @@ func on_server_disconnected() -> void:
func update_enabled_state(is_online: bool) -> void:
var window = get_settings_window()
window.get_node("Settings/VBoxContainer/Name/LineEdit").editable = !is_online
window.get_node("Connect/VBoxContainer/Join/Address" ).editable = !is_online
window.get_node("Connect/VBoxContainer/Join/Button" ).disabled = is_online
window.get_node("Connect/VBoxContainer/Host/Port" ).editable = !is_online
window.get_node("Connect/VBoxContainer/Host/Button" ).disabled = is_online
window.get_node("Connect/VBoxContainer/Disconnect" ).disabled = !is_online
var settings := get_settings_window()
settings.settings_nickname .editable = !is_online
settings.connect_address .editable = !is_online
settings.connect_port .editable = !is_online
settings.connect_join .disabled = is_online
settings.connect_host .disabled = is_online
settings.connect_disconnect.disabled = !is_online
func update_status() -> void:
var num_players := 1 + multiplayer.get_peers().size()

Loading…
Cancel
Save