Changes the mod settings UI to use a tabbed system, split up into "Connect", "Settings" and "Players". In the "Players" tab, the position of each remote player can be changed via the provided input controls. Additionally, while this tab is active, you can also click and drag players directly to reposition them. Removed the temporary positioning system.main
parent
d4f7fa604a
commit
e35eb0c9c8
10 changed files with 556 additions and 197 deletions
@ -1,20 +0,0 @@ |
|||||||
extends Container |
|
||||||
|
|
||||||
@export var visible_icon: Texture2D |
|
||||||
@export var hidden_icon: Texture2D |
|
||||||
|
|
||||||
func _on_cache_dir_dialog_pressed() -> void: |
|
||||||
var widget: LineEdit = $"Cache/LineEdit" |
|
||||||
|
|
||||||
var dialog: FileDialog = $"Cache/FileDialog" |
|
||||||
dialog.size = get_window().size / 2 |
|
||||||
dialog.position = get_window().size / 4 |
|
||||||
dialog.current_dir = widget.text |
|
||||||
dialog.popup() |
|
||||||
|
|
||||||
widget.text = await dialog.dir_selected |
|
||||||
widget.text_changed.emit(widget.text) |
|
||||||
|
|
||||||
func _on_show_hide_address_toggled(toggled_on: bool) -> void: |
|
||||||
$"Host/Address".secret = !toggled_on |
|
||||||
$"Host/ShowHide".icon = visible_icon if toggled_on else hidden_icon |
|
@ -1,113 +0,0 @@ |
|||||||
[gd_scene load_steps=4 format=3 uid="uid://cdxnwsgmevndb"] |
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Mods/copyMultiplayer/Resources/copy_multiplayer_settings.gd" id="1_7d55i"] |
|
||||||
[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="VBoxContainer"] |
|
||||||
anchors_preset = 15 |
|
||||||
anchor_right = 1.0 |
|
||||||
anchor_bottom = 1.0 |
|
||||||
grow_horizontal = 2 |
|
||||||
grow_vertical = 2 |
|
||||||
size_flags_horizontal = 3 |
|
||||||
size_flags_vertical = 3 |
|
||||||
script = ExtResource("1_7d55i") |
|
||||||
visible_icon = ExtResource("2_ibe7i") |
|
||||||
hidden_icon = ExtResource("2_1u5pu") |
|
||||||
|
|
||||||
[node name="Cache" type="HBoxContainer" parent="."] |
|
||||||
layout_mode = 2 |
|
||||||
|
|
||||||
[node name="Label" type="Label" parent="Cache"] |
|
||||||
custom_minimum_size = Vector2(60, 0) |
|
||||||
layout_mode = 2 |
|
||||||
text = "Cache" |
|
||||||
|
|
||||||
[node name="LineEdit" type="LineEdit" parent="Cache"] |
|
||||||
layout_mode = 2 |
|
||||||
size_flags_horizontal = 3 |
|
||||||
tooltip_text = "The directory other players' models will be loaded from. |
|
||||||
Filenames must match exactly for this to work." |
|
||||||
|
|
||||||
[node name="Button" type="Button" parent="Cache"] |
|
||||||
layout_mode = 2 |
|
||||||
tooltip_text = "Browse Directory" |
|
||||||
text = " ... " |
|
||||||
|
|
||||||
[node name="FileDialog" type="FileDialog" parent="Cache"] |
|
||||||
title = "Open a Directory" |
|
||||||
ok_button_text = "Select Current Folder" |
|
||||||
file_mode = 2 |
|
||||||
access = 2 |
|
||||||
|
|
||||||
[node name="Name" type="HBoxContainer" parent="."] |
|
||||||
layout_mode = 2 |
|
||||||
|
|
||||||
[node name="Label" type="Label" parent="Name"] |
|
||||||
custom_minimum_size = Vector2(60, 0) |
|
||||||
layout_mode = 2 |
|
||||||
text = "Name" |
|
||||||
|
|
||||||
[node name="LineEdit" type="LineEdit" parent="Name"] |
|
||||||
layout_mode = 2 |
|
||||||
size_flags_horizontal = 3 |
|
||||||
|
|
||||||
[node name="Host" type="HBoxContainer" parent="."] |
|
||||||
layout_mode = 2 |
|
||||||
|
|
||||||
[node name="Label" type="Label" parent="Host"] |
|
||||||
custom_minimum_size = Vector2(60, 0) |
|
||||||
layout_mode = 2 |
|
||||||
text = "Host" |
|
||||||
|
|
||||||
[node name="Address" type="LineEdit" parent="Host"] |
|
||||||
layout_mode = 2 |
|
||||||
size_flags_horizontal = 3 |
|
||||||
tooltip_text = "Address or IP of the host player to connect to. |
|
||||||
Not used when you're hosting." |
|
||||||
placeholder_text = "127.0.0.1" |
|
||||||
secret = true |
|
||||||
|
|
||||||
[node name="ShowHide" type="Button" parent="Host"] |
|
||||||
layout_mode = 2 |
|
||||||
tooltip_text = "Show / Hide Address" |
|
||||||
toggle_mode = true |
|
||||||
icon = ExtResource("2_1u5pu") |
|
||||||
flat = true |
|
||||||
|
|
||||||
[node name="Port" type="SpinBox" parent="Host"] |
|
||||||
layout_mode = 2 |
|
||||||
tooltip_text = "Port to connect to / listen on. |
|
||||||
Host must forward this port." |
|
||||||
min_value = 1024.0 |
|
||||||
max_value = 65000.0 |
|
||||||
value = 52410.0 |
|
||||||
alignment = 2 |
|
||||||
|
|
||||||
[node name="Buttons" type="HBoxContainer" parent="."] |
|
||||||
layout_mode = 2 |
|
||||||
|
|
||||||
[node name="Join" type="Button" parent="Buttons"] |
|
||||||
layout_mode = 2 |
|
||||||
size_flags_horizontal = 3 |
|
||||||
tooltip_text = "Join an existing session." |
|
||||||
text = "Join" |
|
||||||
|
|
||||||
[node name="Host" type="Button" parent="Buttons"] |
|
||||||
layout_mode = 2 |
|
||||||
size_flags_horizontal = 3 |
|
||||||
tooltip_text = "Open a new session, allowing |
|
||||||
users to connect to your public IP." |
|
||||||
text = "Host" |
|
||||||
|
|
||||||
[node name="Disconnect" type="Button" parent="Buttons"] |
|
||||||
layout_mode = 2 |
|
||||||
size_flags_horizontal = 3 |
|
||||||
tooltip_text = "Disconnect from / close the current session." |
|
||||||
disabled = true |
|
||||||
text = "Disconnect |
|
||||||
" |
|
||||||
|
|
||||||
[connection signal="pressed" from="Cache/Button" to="." method="_on_cache_dir_dialog_pressed"] |
|
||||||
[connection signal="toggled" from="Host/ShowHide" to="." method="_on_show_hide_address_toggled"] |
|
@ -0,0 +1,24 @@ |
|||||||
|
class_name copyMultiplayerSettings |
||||||
|
extends TabContainer |
||||||
|
|
||||||
|
@export var visible_icon: Texture2D |
||||||
|
@export var hidden_icon: Texture2D |
||||||
|
|
||||||
|
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() |
||||||
|
|
||||||
|
widget.text = await dialog.dir_selected |
||||||
|
widget.text_changed.emit(widget.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 |
@ -0,0 +1,159 @@ |
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://cdxnwsgmevndb"] |
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Mods/copyMultiplayer/Scenes/copy_multiplayer_settings.gd" id="1_7d55i"] |
||||||
|
[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"] |
||||||
|
anchors_preset = 15 |
||||||
|
anchor_right = 1.0 |
||||||
|
anchor_bottom = 1.0 |
||||||
|
grow_horizontal = 2 |
||||||
|
grow_vertical = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
size_flags_vertical = 3 |
||||||
|
current_tab = 2 |
||||||
|
script = ExtResource("1_7d55i") |
||||||
|
visible_icon = ExtResource("2_ibe7i") |
||||||
|
hidden_icon = ExtResource("2_1u5pu") |
||||||
|
|
||||||
|
[node name="Connect" type="MarginContainer" parent="."] |
||||||
|
visible = false |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_constants/margin_left = 4 |
||||||
|
theme_override_constants/margin_top = 4 |
||||||
|
theme_override_constants/margin_right = 4 |
||||||
|
theme_override_constants/margin_bottom = 4 |
||||||
|
metadata/_tab_index = 0 |
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="Connect"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Join" type="HBoxContainer" parent="Connect/VBoxContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="Connect/VBoxContainer/Join"] |
||||||
|
custom_minimum_size = Vector2(80, 0) |
||||||
|
layout_mode = 2 |
||||||
|
text = "Address:" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="Address" type="LineEdit" parent="Connect/VBoxContainer/Join"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
tooltip_text = "Address or IP of the host player to connect to. |
||||||
|
Not used when you're hosting." |
||||||
|
placeholder_text = "127.0.0.1" |
||||||
|
secret = true |
||||||
|
|
||||||
|
[node name="ShowHide" type="Button" parent="Connect/VBoxContainer/Join"] |
||||||
|
layout_mode = 2 |
||||||
|
tooltip_text = "Show / Hide Address" |
||||||
|
toggle_mode = true |
||||||
|
icon = ExtResource("2_1u5pu") |
||||||
|
flat = true |
||||||
|
|
||||||
|
[node name="Button" type="Button" parent="Connect/VBoxContainer/Join"] |
||||||
|
custom_minimum_size = Vector2(120, 0) |
||||||
|
layout_mode = 2 |
||||||
|
tooltip_text = "Join an existing session." |
||||||
|
text = "Join" |
||||||
|
|
||||||
|
[node name="Host" type="HBoxContainer" parent="Connect/VBoxContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="Connect/VBoxContainer/Host"] |
||||||
|
custom_minimum_size = Vector2(80, 0) |
||||||
|
layout_mode = 2 |
||||||
|
text = "Port:" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="Port" type="SpinBox" parent="Connect/VBoxContainer/Host"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
tooltip_text = "Port to connect to / listen on. |
||||||
|
Host must forward this port." |
||||||
|
min_value = 1024.0 |
||||||
|
max_value = 65000.0 |
||||||
|
value = 52410.0 |
||||||
|
alignment = 2 |
||||||
|
|
||||||
|
[node name="Button" type="Button" parent="Connect/VBoxContainer/Host"] |
||||||
|
custom_minimum_size = Vector2(120, 0) |
||||||
|
layout_mode = 2 |
||||||
|
tooltip_text = "Open a new session, allowing |
||||||
|
users to connect to your public IP." |
||||||
|
text = "Host" |
||||||
|
|
||||||
|
[node name="Disconnect" type="Button" parent="Connect/VBoxContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
tooltip_text = "Disconnect from / close the current session." |
||||||
|
disabled = true |
||||||
|
text = "Disconnect |
||||||
|
" |
||||||
|
|
||||||
|
[node name="Settings" type="MarginContainer" parent="."] |
||||||
|
visible = false |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_constants/margin_left = 4 |
||||||
|
theme_override_constants/margin_top = 4 |
||||||
|
theme_override_constants/margin_right = 4 |
||||||
|
theme_override_constants/margin_bottom = 4 |
||||||
|
metadata/_tab_index = 1 |
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="Settings"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Cache" type="HBoxContainer" parent="Settings/VBoxContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="Settings/VBoxContainer/Cache"] |
||||||
|
custom_minimum_size = Vector2(80, 0) |
||||||
|
layout_mode = 2 |
||||||
|
text = "Cache:" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="LineEdit" type="LineEdit" parent="Settings/VBoxContainer/Cache"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
tooltip_text = "The directory other players' models will be loaded from. |
||||||
|
Filenames must match exactly for this to work." |
||||||
|
|
||||||
|
[node name="Button" type="Button" parent="Settings/VBoxContainer/Cache"] |
||||||
|
layout_mode = 2 |
||||||
|
tooltip_text = "Browse Directory" |
||||||
|
text = " ... " |
||||||
|
|
||||||
|
[node name="FileDialog" type="FileDialog" parent="Settings/VBoxContainer/Cache"] |
||||||
|
title = "Open a Directory" |
||||||
|
ok_button_text = "Select Current Folder" |
||||||
|
file_mode = 2 |
||||||
|
access = 2 |
||||||
|
|
||||||
|
[node name="Name" type="HBoxContainer" parent="Settings/VBoxContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="Settings/VBoxContainer/Name"] |
||||||
|
custom_minimum_size = Vector2(80, 0) |
||||||
|
layout_mode = 2 |
||||||
|
text = "Name:" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="LineEdit" type="LineEdit" parent="Settings/VBoxContainer/Name"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
|
||||||
|
[node name="Players" type="MarginContainer" parent="."] |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_constants/margin_left = 4 |
||||||
|
theme_override_constants/margin_top = 4 |
||||||
|
theme_override_constants/margin_right = 4 |
||||||
|
theme_override_constants/margin_bottom = 4 |
||||||
|
metadata/_tab_index = 2 |
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="Players"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[connection signal="toggled" from="Connect/VBoxContainer/Join/ShowHide" to="." method="_on_show_hide_address_toggled"] |
||||||
|
[connection signal="pressed" from="Settings/VBoxContainer/Cache/Button" to="." method="_on_cache_dir_dialog_pressed"] |
@ -0,0 +1,41 @@ |
|||||||
|
class_name PlayerSettings |
||||||
|
extends Container |
||||||
|
|
||||||
|
signal value_changed(Transform3D) |
||||||
|
|
||||||
|
@export var offset_x: SpinBox |
||||||
|
@export var offset_y: SpinBox |
||||||
|
@export var offset_z: SpinBox |
||||||
|
|
||||||
|
@export var rotation_x: SpinBox |
||||||
|
@export var rotation_y: SpinBox |
||||||
|
@export var rotation_z: SpinBox |
||||||
|
|
||||||
|
@export var scale_xyz: SpinBox |
||||||
|
|
||||||
|
func set_nickname(value: String) -> void: |
||||||
|
$Nickname.text = value |
||||||
|
|
||||||
|
func on_transform_changed(value: Transform3D) -> void: |
||||||
|
offset_x.value = value.origin.x |
||||||
|
offset_y.value = value.origin.y |
||||||
|
offset_z.value = value.origin.z |
||||||
|
|
||||||
|
var rot := value.basis.get_euler() |
||||||
|
rotation_x.value = rad_to_deg(rot.x) |
||||||
|
rotation_y.value = rad_to_deg(rot.y) |
||||||
|
rotation_z.value = rad_to_deg(rot.z) |
||||||
|
|
||||||
|
scale_xyz.value = value.basis.get_scale().x |
||||||
|
|
||||||
|
func _on_value_changed(_value: float) -> void: |
||||||
|
var origin := Vector3(offset_x.value, offset_y.value, offset_z.value) |
||||||
|
var rot := Vector3(rotation_x.value, rotation_y.value, rotation_z.value) / 360 * TAU |
||||||
|
var basis := Basis.from_euler(rot) * Basis.from_scale(Vector3.ONE * scale_xyz.value) |
||||||
|
value_changed.emit(Transform3D(basis, origin)) |
||||||
|
|
||||||
|
# Ensure that rotation inputs are always in 0-359 range. |
||||||
|
rotation_x.set_value_no_signal(fposmod(rotation_x.value, 360)) |
||||||
|
rotation_y.set_value_no_signal(fposmod(rotation_y.value, 360)) |
||||||
|
rotation_z.set_value_no_signal(fposmod(rotation_z.value, 360)) |
||||||
|
|
@ -0,0 +1,179 @@ |
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://fbfasiqs3d88"] |
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Mods/copyMultiplayer/Scenes/player_settings.gd" id="1_ybttq"] |
||||||
|
|
||||||
|
[node name="PlayerSettings" type="VBoxContainer" node_paths=PackedStringArray("offset_x", "offset_y", "offset_z", "rotation_x", "rotation_y", "rotation_z", "scale_xyz")] |
||||||
|
script = ExtResource("1_ybttq") |
||||||
|
offset_x = NodePath("PanelContainer/MarginContainer/VBoxContainer/Offset/X") |
||||||
|
offset_y = NodePath("PanelContainer/MarginContainer/VBoxContainer/Offset/Y") |
||||||
|
offset_z = NodePath("PanelContainer/MarginContainer/VBoxContainer/Offset/Z") |
||||||
|
rotation_x = NodePath("PanelContainer/MarginContainer/VBoxContainer/Rotation/X") |
||||||
|
rotation_y = NodePath("PanelContainer/MarginContainer/VBoxContainer/Rotation/Y") |
||||||
|
rotation_z = NodePath("PanelContainer/MarginContainer/VBoxContainer/Rotation/Z") |
||||||
|
scale_xyz = NodePath("PanelContainer/MarginContainer/VBoxContainer/Scale/SpinBox") |
||||||
|
|
||||||
|
[node name="Nickname" type="Label" parent="."] |
||||||
|
layout_mode = 2 |
||||||
|
text = "Nickname" |
||||||
|
horizontal_alignment = 1 |
||||||
|
|
||||||
|
[node name="PanelContainer" type="PanelContainer" parent="."] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_constants/margin_left = 4 |
||||||
|
theme_override_constants/margin_top = 4 |
||||||
|
theme_override_constants/margin_right = 4 |
||||||
|
theme_override_constants/margin_bottom = 4 |
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Offset" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Offset"] |
||||||
|
custom_minimum_size = Vector2(80, 0) |
||||||
|
layout_mode = 2 |
||||||
|
text = "Offset:" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="LabelX" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Offset"] |
||||||
|
custom_minimum_size = Vector2(20, 0) |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_colors/font_color = Color(0.917647, 0.211765, 0.317647, 1) |
||||||
|
text = "X" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="X" type="SpinBox" parent="PanelContainer/MarginContainer/VBoxContainer/Offset"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
min_value = -100.0 |
||||||
|
step = 0.01 |
||||||
|
alignment = 2 |
||||||
|
custom_arrow_step = 0.05 |
||||||
|
|
||||||
|
[node name="LabelY" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Offset"] |
||||||
|
custom_minimum_size = Vector2(20, 0) |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_colors/font_color = Color(0.529412, 0.839216, 0.0117647, 1) |
||||||
|
text = "Y" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="Y" type="SpinBox" parent="PanelContainer/MarginContainer/VBoxContainer/Offset"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
min_value = -100.0 |
||||||
|
step = 0.01 |
||||||
|
alignment = 2 |
||||||
|
custom_arrow_step = 0.05 |
||||||
|
|
||||||
|
[node name="LabelZ" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Offset"] |
||||||
|
custom_minimum_size = Vector2(20, 0) |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_colors/font_color = Color(0.180392, 0.529412, 0.917647, 1) |
||||||
|
text = "Z" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="Z" type="SpinBox" parent="PanelContainer/MarginContainer/VBoxContainer/Offset"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
min_value = -100.0 |
||||||
|
step = 0.01 |
||||||
|
alignment = 2 |
||||||
|
custom_arrow_step = 0.05 |
||||||
|
|
||||||
|
[node name="Rotation" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Rotation"] |
||||||
|
custom_minimum_size = Vector2(80, 0) |
||||||
|
layout_mode = 2 |
||||||
|
text = "Rotation:" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="LabelX" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Rotation"] |
||||||
|
custom_minimum_size = Vector2(20, 0) |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_colors/font_color = Color(0.917647, 0.211765, 0.317647, 1) |
||||||
|
text = "X" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="X" type="SpinBox" parent="PanelContainer/MarginContainer/VBoxContainer/Rotation"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
max_value = 359.0 |
||||||
|
step = 0.1 |
||||||
|
allow_greater = true |
||||||
|
allow_lesser = true |
||||||
|
alignment = 2 |
||||||
|
custom_arrow_step = 2.0 |
||||||
|
|
||||||
|
[node name="LabelY" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Rotation"] |
||||||
|
custom_minimum_size = Vector2(20, 0) |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_colors/font_color = Color(0.529412, 0.839216, 0.0117647, 1) |
||||||
|
text = "Y" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="Y" type="SpinBox" parent="PanelContainer/MarginContainer/VBoxContainer/Rotation"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
max_value = 359.0 |
||||||
|
step = 0.1 |
||||||
|
allow_greater = true |
||||||
|
allow_lesser = true |
||||||
|
alignment = 2 |
||||||
|
custom_arrow_step = 2.0 |
||||||
|
|
||||||
|
[node name="LabelZ" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Rotation"] |
||||||
|
custom_minimum_size = Vector2(20, 0) |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_colors/font_color = Color(0.180392, 0.529412, 0.917647, 1) |
||||||
|
text = "Z" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="Z" type="SpinBox" parent="PanelContainer/MarginContainer/VBoxContainer/Rotation"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
max_value = 359.0 |
||||||
|
step = 0.1 |
||||||
|
allow_greater = true |
||||||
|
allow_lesser = true |
||||||
|
alignment = 2 |
||||||
|
custom_arrow_step = 2.0 |
||||||
|
|
||||||
|
[node name="Scale" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] |
||||||
|
layout_mode = 2 |
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Scale"] |
||||||
|
custom_minimum_size = Vector2(80, 0) |
||||||
|
layout_mode = 2 |
||||||
|
text = "Scale:" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="Padding" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Scale"] |
||||||
|
custom_minimum_size = Vector2(20, 0) |
||||||
|
layout_mode = 2 |
||||||
|
theme_override_colors/font_color = Color(0.917647, 0.211765, 0.317647, 1) |
||||||
|
text = " |
||||||
|
" |
||||||
|
horizontal_alignment = 2 |
||||||
|
|
||||||
|
[node name="SpinBox" type="SpinBox" parent="PanelContainer/MarginContainer/VBoxContainer/Scale"] |
||||||
|
layout_mode = 2 |
||||||
|
size_flags_horizontal = 3 |
||||||
|
min_value = 0.5 |
||||||
|
max_value = 2.0 |
||||||
|
step = 0.01 |
||||||
|
alignment = 2 |
||||||
|
custom_arrow_step = 0.05 |
||||||
|
|
||||||
|
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Offset/X" to="." method="_on_value_changed"] |
||||||
|
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Offset/Y" to="." method="_on_value_changed"] |
||||||
|
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Offset/Z" to="." method="_on_value_changed"] |
||||||
|
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Rotation/X" to="." method="_on_value_changed"] |
||||||
|
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Rotation/Y" to="." method="_on_value_changed"] |
||||||
|
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Rotation/Z" to="." method="_on_value_changed"] |
||||||
|
[connection signal="value_changed" from="PanelContainer/MarginContainer/VBoxContainer/Scale/SpinBox" to="." method="_on_value_changed"] |
@ -0,0 +1,9 @@ |
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://b8t8fgu7ht8rn"] |
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Mods/copyMultiplayer/Scenes/sync_controller.gd" id="1_v4dbb"] |
||||||
|
|
||||||
|
[node name="SyncController" type="Area3D" node_paths=PackedStringArray("shape")] |
||||||
|
script = ExtResource("1_v4dbb") |
||||||
|
shape = NodePath("CollisionShape3D") |
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] |
Loading…
Reference in new issue