mirror of
https://gitlab.com/open-fpsz/open-fpsz.git
synced 2026-07-11 22:44:45 +00:00
👽 interstellar delivery
This commit is contained in:
parent
547c97bfba
commit
97c8292858
257 changed files with 7309 additions and 4637 deletions
22
interfaces/menus/boot/multiplayer/host_panel/host_panel.gd
Normal file
22
interfaces/menus/boot/multiplayer/host_panel/host_panel.gd
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# This file is part of open-fpsz.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
class_name HostPanel extends MarginContainer
|
||||
|
||||
@export var host_button : Button
|
||||
@export var menu_button : Button
|
||||
@export var quit_button : Button
|
||||
@export var server_port : LineEdit
|
||||
@export var map_selector : MapSelector
|
||||
@export var mode_selector : ModeSelector
|
||||
97
interfaces/menus/boot/multiplayer/host_panel/host_panel.tscn
Normal file
97
interfaces/menus/boot/multiplayer/host_panel/host_panel.tscn
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://dv0lqek8bqyv"]
|
||||
|
||||
[ext_resource type="Script" path="res://interfaces/menus/boot/multiplayer/host_panel/host_panel.gd" id="1_wnvng"]
|
||||
[ext_resource type="Script" path="res://interfaces/menus/boot/multiplayer/host_panel/map_selector.gd" id="2_kwlr3"]
|
||||
[ext_resource type="Script" path="res://interfaces/menus/boot/multiplayer/host_panel/mode_selector.gd" id="3_o6ecq"]
|
||||
|
||||
[node name="HostPanel" type="MarginContainer" node_paths=PackedStringArray("host_button", "menu_button", "quit_button", "server_port", "map_selector", "mode_selector")]
|
||||
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
|
||||
theme_override_constants/margin_left = 20
|
||||
theme_override_constants/margin_top = 20
|
||||
theme_override_constants/margin_right = 20
|
||||
theme_override_constants/margin_bottom = 20
|
||||
script = ExtResource("1_wnvng")
|
||||
host_button = NodePath("HBoxContainer/LeftBox/Top/Host")
|
||||
menu_button = NodePath("HBoxContainer/LeftBox/Bottom/Menu")
|
||||
quit_button = NodePath("HBoxContainer/LeftBox/Bottom/Quit")
|
||||
server_port = NodePath("HBoxContainer/RightBox/GridContainer/ServerPort")
|
||||
map_selector = NodePath("HBoxContainer/RightBox/GridContainer/MapSelector")
|
||||
mode_selector = NodePath("HBoxContainer/RightBox/GridContainer/ModeSelector")
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
|
||||
[node name="LeftBox" type="VBoxContainer" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_stretch_ratio = 0.25
|
||||
|
||||
[node name="Top" type="VBoxContainer" parent="HBoxContainer/LeftBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_stretch_ratio = 0.25
|
||||
|
||||
[node name="Host" type="Button" parent="HBoxContainer/LeftBox/Top"]
|
||||
layout_mode = 2
|
||||
text = "Host"
|
||||
|
||||
[node name="Bottom" type="VBoxContainer" parent="HBoxContainer/LeftBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 10
|
||||
|
||||
[node name="Menu" type="Button" parent="HBoxContainer/LeftBox/Bottom"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Main Menu
|
||||
"
|
||||
|
||||
[node name="Quit" type="Button" parent="HBoxContainer/LeftBox/Bottom"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Quit"
|
||||
|
||||
[node name="RightBox" type="VBoxContainer" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="MapPreview" type="ColorRect" parent="HBoxContainer/RightBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="GridContainer" type="GridContainer" parent="HBoxContainer/RightBox"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/h_separation = 120
|
||||
columns = 2
|
||||
|
||||
[node name="PortLabel" type="Label" parent="HBoxContainer/RightBox/GridContainer"]
|
||||
layout_mode = 2
|
||||
text = "Port"
|
||||
|
||||
[node name="ServerPort" type="LineEdit" parent="HBoxContainer/RightBox/GridContainer"]
|
||||
layout_mode = 2
|
||||
placeholder_text = "9000"
|
||||
alignment = 2
|
||||
|
||||
[node name="MapLabel" type="Label" parent="HBoxContainer/RightBox/GridContainer"]
|
||||
layout_mode = 2
|
||||
text = "Map"
|
||||
|
||||
[node name="MapSelector" type="OptionButton" parent="HBoxContainer/RightBox/GridContainer"]
|
||||
layout_mode = 2
|
||||
clip_text = true
|
||||
allow_reselect = true
|
||||
script = ExtResource("2_kwlr3")
|
||||
|
||||
[node name="ModeLabel" type="Label" parent="HBoxContainer/RightBox/GridContainer"]
|
||||
layout_mode = 2
|
||||
text = "Mode"
|
||||
|
||||
[node name="ModeSelector" type="OptionButton" parent="HBoxContainer/RightBox/GridContainer"]
|
||||
layout_mode = 2
|
||||
script = ExtResource("3_o6ecq")
|
||||
21
interfaces/menus/boot/multiplayer/host_panel/map_selector.gd
Normal file
21
interfaces/menus/boot/multiplayer/host_panel/map_selector.gd
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# This file is part of open-fpsz.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
class_name MapSelector extends OptionButton
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
for map : PackedScene in MapsManager.maps:
|
||||
var map_name : String = map._bundled.names[0]
|
||||
add_item(map_name)
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
# This file is part of open-fpsz.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
class_name ModeSelector extends OptionButton
|
||||
|
||||
func format(enum_key: String) -> String:
|
||||
# split enum value by underscores
|
||||
var words : PackedStringArray = enum_key.split("_")
|
||||
# capitalize first letter of each word
|
||||
for i in range(words.size()):
|
||||
words[i] = words[i].capitalize()
|
||||
# join words with spaces
|
||||
return " ".join(words)
|
||||
|
||||
func _ready() -> void:
|
||||
for mode:String in Multiplayer.Mode.keys():
|
||||
add_item(format(mode))
|
||||
|
||||
# @NOTE: ctf, arena and ball are not implemented yet
|
||||
set_item_disabled(2, true)
|
||||
set_item_disabled(3, true)
|
||||
set_item_disabled(4, true)
|
||||
20
interfaces/menus/boot/multiplayer/join_panel/join_panel.gd
Normal file
20
interfaces/menus/boot/multiplayer/join_panel/join_panel.gd
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# This file is part of open-fpsz.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
class_name JoinPanel extends MarginContainer
|
||||
|
||||
@export var join_button : Button
|
||||
@export var menu_button : Button
|
||||
@export var quit_button : Button
|
||||
@export var join_address : LineEdit
|
||||
62
interfaces/menus/boot/multiplayer/join_panel/join_panel.tscn
Normal file
62
interfaces/menus/boot/multiplayer/join_panel/join_panel.tscn
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://cfegls11p6wav"]
|
||||
|
||||
[ext_resource type="Script" path="res://interfaces/menus/boot/multiplayer/join_panel/join_panel.gd" id="1_svm4h"]
|
||||
|
||||
[node name="JoinPanel" type="MarginContainer" node_paths=PackedStringArray("join_button", "menu_button", "quit_button", "join_address")]
|
||||
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
|
||||
theme_override_constants/margin_left = 20
|
||||
theme_override_constants/margin_top = 20
|
||||
theme_override_constants/margin_right = 20
|
||||
theme_override_constants/margin_bottom = 20
|
||||
script = ExtResource("1_svm4h")
|
||||
join_button = NodePath("HBoxContainer/LeftBox/Top/Join")
|
||||
menu_button = NodePath("HBoxContainer/LeftBox/Bottom/Menu")
|
||||
quit_button = NodePath("HBoxContainer/LeftBox/Bottom/Quit")
|
||||
join_address = NodePath("HBoxContainer/RightBox/JoinAddress")
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
|
||||
[node name="LeftBox" type="VBoxContainer" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_stretch_ratio = 0.25
|
||||
|
||||
[node name="Top" type="VBoxContainer" parent="HBoxContainer/LeftBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_stretch_ratio = 0.25
|
||||
|
||||
[node name="Join" type="Button" parent="HBoxContainer/LeftBox/Top"]
|
||||
layout_mode = 2
|
||||
text = "Join"
|
||||
|
||||
[node name="Bottom" type="VBoxContainer" parent="HBoxContainer/LeftBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 10
|
||||
|
||||
[node name="Menu" type="Button" parent="HBoxContainer/LeftBox/Bottom"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Main Menu
|
||||
"
|
||||
|
||||
[node name="Quit" type="Button" parent="HBoxContainer/LeftBox/Bottom"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Quit"
|
||||
|
||||
[node name="RightBox" type="VBoxContainer" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="JoinAddress" type="LineEdit" parent="HBoxContainer/RightBox"]
|
||||
layout_mode = 2
|
||||
placeholder_text = "localhost"
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
# This file is part of open-fpsz.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
class_name MultiplayerPanelContainer extends PanelContainer
|
||||
|
||||
const DEFAULT_HOST : String = "localhost"
|
||||
const DEFAULT_PORT : int = 9000
|
||||
const CONFIG_FILE_PATH : String = "user://profile.cfg"
|
||||
|
||||
var _join_address : RegEx = RegEx.new()
|
||||
var _registered_ports : RegEx = RegEx.new()
|
||||
var _config_file : ConfigFile = ConfigFile.new()
|
||||
|
||||
signal menu_pressed # reuse signal for all tabs
|
||||
signal start_server(port : int, map : PackedScene, mode: Multiplayer.Mode, username: String)
|
||||
signal join_server(host : String, port : int)
|
||||
|
||||
@export var tab_container : TabContainer
|
||||
@export var profile_panel : ProfilePanel
|
||||
@export var join_panel : JoinPanel
|
||||
@export var host_panel : HostPanel
|
||||
|
||||
@onready var modal : Control = $Modal
|
||||
|
||||
func _ready() -> void:
|
||||
# see https://datatracker.ietf.org/doc/html/rfc1700
|
||||
_registered_ports.compile(r'^(?:102[4-9]|10[3-9]\d|1[1-9]\d{2}|[2-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$')
|
||||
_join_address.compile(r'^(?<host>[a-zA-Z0-9.-]+)(:(?<port>:102[4-9]|10[3-9]\d|1[1-9]\d{2}|[2-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5]))?$')
|
||||
# connect signals
|
||||
join_panel.join_button.pressed.connect(_on_join_pressed)
|
||||
host_panel.host_button.pressed.connect(_on_host_pressed)
|
||||
for panel:Control in [profile_panel, host_panel, join_panel]:
|
||||
panel.menu_button.pressed.connect(_on_menu_pressed)
|
||||
panel.quit_button.pressed.connect(_on_quit_pressed)
|
||||
# load configuration file
|
||||
_load_config()
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("exit"):
|
||||
modal.hide()
|
||||
|
||||
func _load_config() -> void:
|
||||
var error : Error = _config_file.load(CONFIG_FILE_PATH)
|
||||
if error != OK:
|
||||
return
|
||||
|
||||
profile_panel.profile_name.text = _config_file.get_value("profile", "name", "Newblood")
|
||||
|
||||
func _on_save_pressed() -> void:
|
||||
_config_file.set_value("profile", "name", profile_panel.profile_name.text)
|
||||
_config_file.save(CONFIG_FILE_PATH)
|
||||
|
||||
func _on_menu_pressed() -> void:
|
||||
menu_pressed.emit()
|
||||
|
||||
func _on_quit_pressed() -> void:
|
||||
get_tree().quit()
|
||||
|
||||
func _on_host_pressed() -> void:
|
||||
var port : int = DEFAULT_PORT
|
||||
# check for registered ports number matches
|
||||
if host_panel.server_port.text:
|
||||
var result : RegExMatch = _registered_ports.search(host_panel.server_port.text)
|
||||
if result: # port is valid
|
||||
port = int(result.get_string())
|
||||
else: # port is not valid
|
||||
push_warning("A valid port number in the range 1024-65535 is required.")
|
||||
return
|
||||
|
||||
start_server.emit(
|
||||
port,
|
||||
MapsManager.maps[host_panel.map_selector.selected],
|
||||
host_panel.mode_selector.selected,
|
||||
profile_panel.profile_name.text
|
||||
)
|
||||
|
||||
func _on_join_pressed() -> void:
|
||||
var addr : Array = [DEFAULT_HOST, DEFAULT_PORT]
|
||||
# validate join address input
|
||||
var result : RegExMatch = _join_address.search(join_panel.join_address.text)
|
||||
if result: # address is valid
|
||||
addr[0] = result.get_string("host")
|
||||
var rport : String = result.get_string("port")
|
||||
if rport: addr[1] = int(rport)
|
||||
|
||||
modal.show()
|
||||
join_server.emit(addr[0], addr[1], profile_panel.profile_name.text)
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://7chfb47enqwm"]
|
||||
|
||||
[ext_resource type="Script" path="res://interfaces/menus/boot/multiplayer/multiplayer_panel_container.gd" id="1_yyvwh"]
|
||||
[ext_resource type="PackedScene" uid="uid://cfegls11p6wav" path="res://interfaces/menus/boot/multiplayer/join_panel/join_panel.tscn" id="2_4vm27"]
|
||||
[ext_resource type="PackedScene" uid="uid://moey0w3677td" path="res://interfaces/menus/boot/multiplayer/profile_panel/profile_panel.tscn" id="2_aidbu"]
|
||||
[ext_resource type="PackedScene" uid="uid://dv0lqek8bqyv" path="res://interfaces/menus/boot/multiplayer/host_panel/host_panel.tscn" id="2_ameih"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_krqeq"]
|
||||
bg_color = Color(0.501961, 0.501961, 0.501961, 0.25098)
|
||||
|
||||
[node name="MultiplayerPanelContainer" type="PanelContainer" node_paths=PackedStringArray("tab_container", "profile_panel", "join_panel", "host_panel")]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_krqeq")
|
||||
script = ExtResource("1_yyvwh")
|
||||
tab_container = NodePath("MarginContainer/VBoxContainer/TabContainer")
|
||||
profile_panel = NodePath("MarginContainer/VBoxContainer/TabContainer/Profile/ProfilePanel")
|
||||
join_panel = NodePath("MarginContainer/VBoxContainer/TabContainer/Join/JoinPanel")
|
||||
host_panel = NodePath("MarginContainer/VBoxContainer/TabContainer/Host/HostPanel")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 20
|
||||
theme_override_constants/margin_top = 20
|
||||
theme_override_constants/margin_right = 20
|
||||
theme_override_constants/margin_bottom = 20
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="TabContainer" type="TabContainer" parent="MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
theme_override_constants/side_margin = 0
|
||||
|
||||
[node name="Profile" type="TabBar" parent="MarginContainer/VBoxContainer/TabContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/h_separation = 0
|
||||
|
||||
[node name="ProfilePanel" parent="MarginContainer/VBoxContainer/TabContainer/Profile" instance=ExtResource("2_aidbu")]
|
||||
layout_mode = 1
|
||||
|
||||
[node name="Join" type="TabBar" parent="MarginContainer/VBoxContainer/TabContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
select_with_rmb = true
|
||||
|
||||
[node name="JoinPanel" parent="MarginContainer/VBoxContainer/TabContainer/Join" instance=ExtResource("2_4vm27")]
|
||||
layout_mode = 1
|
||||
|
||||
[node name="Host" type="TabBar" parent="MarginContainer/VBoxContainer/TabContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
select_with_rmb = true
|
||||
|
||||
[node name="HostPanel" parent="MarginContainer/VBoxContainer/TabContainer/Host" instance=ExtResource("2_ameih")]
|
||||
layout_mode = 1
|
||||
|
||||
[node name="Modal" type="Panel" parent="."]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="Modal"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -59.5
|
||||
offset_top = -11.5
|
||||
offset_right = 59.5
|
||||
offset_bottom = 11.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
text = "CONNECTING..."
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# This file is part of open-fpsz.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
class_name ProfilePanel extends MarginContainer
|
||||
|
||||
@export var create_button : Button
|
||||
@export var delete_button : Button
|
||||
@export var save_button : Button
|
||||
@export var menu_button : Button
|
||||
@export var quit_button : Button
|
||||
@export var profile_name : LineEdit
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://moey0w3677td"]
|
||||
|
||||
[ext_resource type="Script" path="res://interfaces/menus/boot/multiplayer/profile_panel/profile_panel.gd" id="1_e3jmb"]
|
||||
|
||||
[node name="ProfilePanel" type="MarginContainer" node_paths=PackedStringArray("create_button", "delete_button", "save_button", "menu_button", "quit_button", "profile_name")]
|
||||
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
|
||||
theme_override_constants/margin_left = 20
|
||||
theme_override_constants/margin_top = 20
|
||||
theme_override_constants/margin_right = 20
|
||||
theme_override_constants/margin_bottom = 20
|
||||
script = ExtResource("1_e3jmb")
|
||||
create_button = NodePath("HBoxContainer/LeftBox/Top/Create")
|
||||
delete_button = NodePath("HBoxContainer/LeftBox/Top/Delete")
|
||||
save_button = NodePath("HBoxContainer/LeftBox/Top/Save")
|
||||
menu_button = NodePath("HBoxContainer/LeftBox/Bottom/Menu")
|
||||
quit_button = NodePath("HBoxContainer/LeftBox/Bottom/Quit")
|
||||
profile_name = NodePath("HBoxContainer/RightBox/ProfileName")
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 20
|
||||
|
||||
[node name="LeftBox" type="VBoxContainer" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_stretch_ratio = 0.25
|
||||
|
||||
[node name="Top" type="VBoxContainer" parent="HBoxContainer/LeftBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_stretch_ratio = 0.25
|
||||
|
||||
[node name="Create" type="Button" parent="HBoxContainer/LeftBox/Top"]
|
||||
layout_mode = 2
|
||||
disabled = true
|
||||
text = "Create"
|
||||
|
||||
[node name="Delete" type="Button" parent="HBoxContainer/LeftBox/Top"]
|
||||
layout_mode = 2
|
||||
disabled = true
|
||||
text = "Delete"
|
||||
|
||||
[node name="Save" type="Button" parent="HBoxContainer/LeftBox/Top"]
|
||||
layout_mode = 2
|
||||
text = "Save"
|
||||
|
||||
[node name="Bottom" type="VBoxContainer" parent="HBoxContainer/LeftBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 10
|
||||
|
||||
[node name="Menu" type="Button" parent="HBoxContainer/LeftBox/Bottom"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Main Menu
|
||||
"
|
||||
|
||||
[node name="Quit" type="Button" parent="HBoxContainer/LeftBox/Bottom"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Quit"
|
||||
|
||||
[node name="RightBox" type="VBoxContainer" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Label" type="Label" parent="HBoxContainer/RightBox"]
|
||||
layout_mode = 2
|
||||
text = "Current Profile:"
|
||||
|
||||
[node name="ProfileName" type="LineEdit" parent="HBoxContainer/RightBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Newblood"
|
||||
Loading…
Add table
Add a link
Reference in a new issue