feat: Added Game Manager

pull/12/head
Евгений Сугоняко 2024-05-23 18:10:49 +03:00
parent d87ef6d968
commit 4650fe9d49
18 changed files with 872 additions and 37 deletions

View File

@ -0,0 +1,143 @@
[gd_scene load_steps=4 format=3 uid="uid://jfqkb4y8h1rq"]
[ext_resource type="FontFile" uid="uid://dhvfket83gjln" path="res://data/styles/fonts/Roboto-Regular.ttf" id="1_dcpst"]
[sub_resource type="GDScript" id="GDScript_bvg37"]
script/source = "extends ColorRect
@export var GameChat : RichTextLabel
@export var InputText : LineEdit
## On client send message to chat
signal sending_message(message:String)
func _ready():
GameChat.clear()
GameChat.scroll_following = true
func add_message(_name, _message):
GameChat.append_text(\"# \")
GameChat.push_color(Color.DARK_ORANGE)
GameChat.append_text(_name)
GameChat.pop()
GameChat.append_text(\" : \")
GameChat.append_text(_message)
GameChat.newline()
if GATEWAY.debug:
print(\"Get new game chat message\")
func send_message(_message):
sending_message.emit(_message)
if GATEWAY.debug:
print(\"Send new game chat message\")
func _on_game_chat_send_btn_button_up():
if !InputText.text.is_empty():
self.send_message(InputText.text)
InputText.text = \"\"
"
[sub_resource type="GDScript" id="GDScript_opgwe"]
script/source = "extends LineEdit
@export var GameChatController : ColorRect
func _process(_delta):
if self.has_focus() and Input.is_key_pressed(KEY_ENTER):
if !self.text.is_empty():
GameChatController.send_message(self.text)
self.text = \"\"
"
[node name="GameChatBackground" type="ColorRect" node_paths=PackedStringArray("GameChat", "InputText")]
size_flags_horizontal = 3
color = Color(0.215902, 0.215902, 0.215902, 1)
script = SubResource("GDScript_bvg37")
GameChat = NodePath("GameChatMarginContainer/GameChatContainer/GameChatPanel/GameChat")
InputText = NodePath("GameChatMarginContainer/GameChatContainer/GameChatBtnContainer/GameChatInput")
[node name="GameChatMarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="GameChatContainer" type="VBoxContainer" parent="GameChatMarginContainer"]
layout_mode = 2
theme_override_constants/separation = 10
[node name="ControlContainer" type="HBoxContainer" parent="GameChatMarginContainer/GameChatContainer"]
layout_mode = 2
[node name="GameChatTitle" type="Label" parent="GameChatMarginContainer/GameChatContainer/ControlContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.707602, 0.575264, 0, 1)
text = "$GameChat"
horizontal_alignment = 1
vertical_alignment = 1
[node name="MinMaxButton" type="Button" parent="GameChatMarginContainer/GameChatContainer/ControlContainer"]
visible = false
layout_direction = 2
layout_mode = 2
size_flags_horizontal = 10
size_flags_vertical = 0
auto_translate = false
localize_numeral_system = false
mouse_default_cursor_shape = 2
theme_override_font_sizes/font_size = 16
shortcut_feedback = false
shortcut_in_tooltip = false
text = "$Minimize"
flat = true
[node name="GameChatPanel" type="Panel" parent="GameChatMarginContainer/GameChatContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="GameChat" type="RichTextLabel" parent="GameChatMarginContainer/GameChatContainer/GameChatPanel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
theme_override_fonts/normal_font = ExtResource("1_dcpst")
theme_override_font_sizes/normal_font_size = 15
bbcode_enabled = true
text = "# PlayerName : Text text text. Text text text. Text text text. Text text text. Text text text. Text text text."
scroll_following = true
shortcut_keys_enabled = false
deselect_on_focus_loss_enabled = false
drag_and_drop_selection_enabled = false
metadata/_edit_use_anchors_ = true
[node name="GameChatBtnContainer" type="HBoxContainer" parent="GameChatMarginContainer/GameChatContainer"]
layout_mode = 2
theme_override_constants/separation = 10
[node name="GameChatInput" type="LineEdit" parent="GameChatMarginContainer/GameChatContainer/GameChatBtnContainer" node_paths=PackedStringArray("GameChatController")]
layout_mode = 2
size_flags_horizontal = 3
script = SubResource("GDScript_opgwe")
GameChatController = NodePath("../../../..")
[node name="GameChatSendBtn" type="Button" parent="GameChatMarginContainer/GameChatContainer/GameChatBtnContainer"]
layout_mode = 2
text = "$Send"
[connection signal="button_up" from="GameChatMarginContainer/GameChatContainer/GameChatBtnContainer/GameChatSendBtn" to="." method="_on_game_chat_send_btn_button_up"]

View File

@ -0,0 +1,27 @@
extends Node
var players : Array
## On get new message
signal get_new_message(name:String, message:String)
func _on_game_game_info_changed(_gameGata):
players = _gameGata.players
func _on_connected_panel_send_message(_message):
self.rpc_id(1, "rpc_send_message", GATEWAY.clientId, _message, players, GATEWAY.playerToken)
#---------------------------------------------------------------------------------------------------
# RPC Client
@rpc("authority", "call_local", "unreliable", 10)
func rpc_add_message(_name, _message):
get_new_message.emit(_name, _message)
#---------------------------------------------------------------------------------------------------
# RPC Server
@rpc("any_peer", "call_local", "unreliable", 10)
func rpc_send_message(_client_id, _message, _players, _token): pass

View File

@ -0,0 +1,39 @@
extends Panel
@export var Chat : ColorRect
@export var GameName : Label
@export var LeaderName : Label
@export var Players : Label
@export var PlayersInfo : Label
var gameId : int
signal send_message(_message:String)
signal disconnect_self
func add_message(_name, _message):
Chat.add_message(_name, _message)
func _on_game_chat_background_sending_message(message):
send_message.emit(message)
func _on_chat_sinhronizer_get_new_message(_name, message):
add_message(_name, message)
func _on_game_game_info_changed(gameInfo):
gameId = gameInfo.gameId
PlayersInfo.text = ""
GameName.text = gameInfo.gameName
LeaderName.text = gameInfo.ownerName
Players.text = "%s/%s" % [len(gameInfo.players), gameInfo.maxPlayers]
if len(gameInfo.players_info) > 0:
for player in gameInfo.players_info:
PlayersInfo.text += "%s\n" % [gameInfo.players_info[player]["name"]]
func _on_back_button_need_disconecct():
disconnect_self.emit()

View File

@ -0,0 +1,193 @@
[gd_scene load_steps=5 format=3 uid="uid://8qdk7tbki7tb"]
[ext_resource type="Script" path="res://data/scenes/Game/StartPanel/connected_panel.gd" id="1_plf8o"]
[ext_resource type="PackedScene" uid="uid://jfqkb4y8h1rq" path="res://data/scenes/Game/GameChat/game_chat.tscn" id="1_u3fum"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yapw7"]
content_margin_left = 10.0
content_margin_top = 10.0
content_margin_right = 10.0
content_margin_bottom = 10.0
bg_color = Color(0.180005, 0.180005, 0.180005, 1)
border_width_left = 5
border_width_top = 5
border_width_right = 5
border_width_bottom = 5
border_color = Color(0.707602, 0.575264, 0, 1)
border_blend = true
corner_radius_top_left = 5
corner_radius_top_right = 5
corner_radius_bottom_right = 5
corner_radius_bottom_left = 5
expand_margin_left = 5.0
expand_margin_top = 5.0
expand_margin_right = 5.0
expand_margin_bottom = 5.0
[sub_resource type="GDScript" id="GDScript_vgbeq"]
script/source = "extends Button
signal need_disconecct
func _on_button_up():
need_disconecct.emit()
"
[node name="ConnectedPanel" type="Panel" node_paths=PackedStringArray("Chat", "GameName", "LeaderName", "Players", "PlayersInfo")]
custom_minimum_size = Vector2(512, 256)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_yapw7")
script = ExtResource("1_plf8o")
Chat = NodePath("MarginContainer/MainContainer/MainItemsContainer/GameChatBackground")
GameName = NodePath("MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer/GameName")
LeaderName = NodePath("MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_2/LeaderName")
Players = NodePath("MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_3/Players")
PlayersInfo = NodePath("MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_4/ScrollContainer/PlayersInfo")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="MainContainer" type="VBoxContainer" parent="MarginContainer"]
layout_mode = 2
[node name="Title" type="Label" parent="MarginContainer/MainContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.707602, 0.575264, 0, 1)
theme_override_font_sizes/font_size = 18
text = "$ConnectToGame"
horizontal_alignment = 1
vertical_alignment = 1
[node name="MainItemsContainer" type="HBoxContainer" parent="MarginContainer/MainContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/separation = 25
alignment = 1
[node name="MainRowsContainer" type="VBoxContainer" parent="MarginContainer/MainContainer/MainItemsContainer"]
layout_mode = 2
size_flags_horizontal = 0
theme_override_constants/separation = 5
[node name="RowContainer" type="HBoxContainer" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer"]
layout_mode = 2
theme_override_constants/separation = 15
[node name="Label" type="Label" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.707602, 0.575264, 0, 1)
text = "$GameName"
horizontal_alignment = 1
vertical_alignment = 1
[node name="GameName" type="Label" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer"]
layout_mode = 2
size_flags_horizontal = 10
text = "The game name"
[node name="RowContainer_2" type="HBoxContainer" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer"]
layout_mode = 2
theme_override_constants/separation = 15
[node name="Label" type="Label" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_2"]
layout_mode = 2
theme_override_colors/font_color = Color(0.707602, 0.575264, 0, 1)
text = "$GameLeader"
horizontal_alignment = 1
vertical_alignment = 1
[node name="LeaderName" type="Label" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_2"]
layout_mode = 2
size_flags_horizontal = 10
text = "The game leader name"
[node name="RowContainer_3" type="HBoxContainer" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer"]
layout_mode = 2
theme_override_constants/separation = 15
[node name="Label" type="Label" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_3"]
layout_mode = 2
theme_override_colors/font_color = Color(0.707602, 0.575264, 0, 1)
text = "$Players"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Players" type="Label" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_3"]
layout_mode = 2
size_flags_horizontal = 10
text = "0/5"
[node name="RowContainer_4" type="HBoxContainer" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/separation = 15
[node name="Label" type="Label" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_4"]
layout_mode = 2
size_flags_vertical = 0
theme_override_colors/font_color = Color(0.707602, 0.575264, 0, 1)
text = "$InGameLobbie"
horizontal_alignment = 1
vertical_alignment = 1
[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_4"]
layout_mode = 2
size_flags_horizontal = 3
[node name="PlayersInfo" type="Label" parent="MarginContainer/MainContainer/MainItemsContainer/MainRowsContainer/RowContainer_4/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
text = "User-1
User-2
User-3
"
horizontal_alignment = 2
[node name="GameChatBackground" parent="MarginContainer/MainContainer/MainItemsContainer" instance=ExtResource("1_u3fum")]
clip_contents = true
custom_minimum_size = Vector2(200, 200)
layout_mode = 2
auto_translate = false
localize_numeral_system = false
[node name="ButtonsContainer" type="HBoxContainer" parent="MarginContainer/MainContainer"]
layout_mode = 2
size_flags_vertical = 8
theme_override_constants/separation = 10
[node name="StartButton" type="Button" parent="MarginContainer/MainContainer/ButtonsContainer"]
visible = false
layout_mode = 2
disabled = true
text = "$StartGame"
[node name="ReadyButton" type="Button" parent="MarginContainer/MainContainer/ButtonsContainer"]
visible = false
layout_mode = 2
text = "$ReadyGame"
[node name="BackButton" type="Button" parent="MarginContainer/MainContainer/ButtonsContainer"]
layout_mode = 2
size_flags_horizontal = 10
text = "$Back"
script = SubResource("GDScript_vgbeq")
[connection signal="sending_message" from="MarginContainer/MainContainer/MainItemsContainer/GameChatBackground" to="." method="_on_game_chat_background_sending_message"]
[connection signal="button_up" from="MarginContainer/MainContainer/ButtonsContainer/BackButton" to="MarginContainer/MainContainer/ButtonsContainer/BackButton" method="_on_button_up"]
[connection signal="need_disconecct" from="MarginContainer/MainContainer/ButtonsContainer/BackButton" to="." method="_on_back_button_need_disconecct"]

View File

@ -10,14 +10,16 @@ var players : Array
var players_info : Dictionary
var maxPlayers : int
var gamePassword : String
var instanceName: String
var isStarted : bool
#--------------------------------------------------------------------------------------------------#
# Signals
signal game_info_changed
signal game_info_changed(gameInfo:Dictionary)
signal game_created
signal game_empty
#--------------------------------------------------------------------------------------------------#
@ -31,7 +33,8 @@ func get_game_info():
players_info = self.players_info,
maxPlayers = self.maxPlayers,
gamePassword = self.gamePassword,
isStarted = self.isStarted
isStarted = self.isStarted,
instanceName = self.instanceName
}
@ -42,22 +45,25 @@ func set_game_info(_gameSettings:Dictionary, isLocal:bool = true):
self.maxPlayers = _gameSettings.maxPlayers
self.gamePassword = _gameSettings.gamePassword
self.name = str(_gameSettings.gameId)
self.instanceName = _gameSettings.instanceName
self.players = _gameSettings.players
self.players_info = _gameSettings.players_info
self.isStarted = false
_emmit_game_info_changed()
if isLocal:
self.rpc_id(1, "rpc_game_info_changed", get_game_info())
self.rpc_id(1, "rpc_game_info_changed", get_game_info(), GATEWAY.playerToken)
func connect_player(_clientId:int):
self.rpc_id(1, "rpc_set_player", _clientId)
self.rpc_id(1, "rpc_set_player", _clientId, GATEWAY.playerToken)
func disconnect_player(_clientId:int):
self.rpc_id(1, "rpc_unset_player", _clientId)
self.rpc_id(1, "rpc_unset_player", _clientId, GATEWAY.playerToken)
func added_player(_player:Dictionary):
players.push_back(_player.id)
players.push_back(int(_player.id))
players_info[_player.id] = {
'login' = _player.login,
'name' = _player.name
@ -69,6 +75,17 @@ func delete_player(_clientId:int):
players.erase(_clientId)
players_info.erase(_clientId)
_emmit_game_info_changed()
if _clientId == GATEWAY.clientId:
GATEWAY.is_reconnected = true
var Lobbies = get_node("/root/Lobbies")
var current_scene = get_tree().get_current_scene()
get_tree().set_current_scene(Lobbies)
current_scene.queue_free()
multiplayer.server_disconnected.emit()
func close_game():
emit_signal("game_empty")
#--------------------------------------------------------------------------------------------------#
@ -77,6 +94,17 @@ func _on_game_created():
self.connect_player(GATEWAY.clientId)
func _on_connected_panel_disconnect_self():
self.disconnect_player(GATEWAY.clientId)
func _on_game_empty():
var Lobbies = get_node("/root/Lobbies")
var current_scene = get_tree().get_current_scene()
get_tree().set_current_scene(Lobbies)
current_scene.queue_free()
#--------------------------------------------------------------------------------------------------#
# Signals emmit
func _emmit_game_info_changed():
@ -100,15 +128,24 @@ func rpc_unset_player_info(_clientId:int):
delete_player(_clientId)
@rpc("authority", "call_local", "reliable", 3)
func rpc_close_game():
close_game()
#---------------------------------------------------------------------------------------------------
# RPC Server
@rpc("any_peer", "call_local", "reliable", 3)
func rpc_game_info_changed(_gameSettings:Dictionary): pass
func rpc_game_info_changed(_gameSettings:Dictionary, _token:String): pass
@rpc("any_peer", "call_local", "reliable", 3)
func rpc_set_player(_clientId:int): pass
func rpc_set_player(_clientId:int, _token:String): pass
@rpc("any_peer", "call_local", "reliable", 3)
func rpc_unset_player(_clientId:int): pass
func rpc_unset_player(_clientId:int, _token:String): pass
@rpc("any_peer", "call_local", "reliable", 3)
func rpc_set_close_game(_gameId:int, _token:String): pass

View File

@ -1,8 +1,21 @@
[gd_scene load_steps=2 format=3 uid="uid://u3ht16dhk3iq"]
[gd_scene load_steps=4 format=3 uid="uid://u3ht16dhk3iq"]
[ext_resource type="Script" path="res://data/scenes/Game/game.gd" id="1_2bjjo"]
[ext_resource type="PackedScene" uid="uid://8qdk7tbki7tb" path="res://data/scenes/Game/StartPanel/connected_panel.tscn" id="2_depbf"]
[ext_resource type="Script" path="res://data/scenes/Game/Scripts/Sinhronizers/ChatSinhronizer.gd" id="2_ekkht"]
[node name="Game" type="Node"]
script = ExtResource("1_2bjjo")
[node name="ChatSinhronizer" type="Node" parent="."]
script = ExtResource("2_ekkht")
[node name="ConnectedPanel" parent="." instance=ExtResource("2_depbf")]
[connection signal="game_created" from="." to="." method="_on_game_created"]
[connection signal="game_empty" from="." to="." method="_on_game_empty"]
[connection signal="game_info_changed" from="." to="ChatSinhronizer" method="_on_game_game_info_changed"]
[connection signal="game_info_changed" from="." to="ConnectedPanel" method="_on_game_game_info_changed"]
[connection signal="get_new_message" from="ChatSinhronizer" to="ConnectedPanel" method="_on_chat_sinhronizer_get_new_message"]
[connection signal="disconnect_self" from="ConnectedPanel" to="." method="_on_connected_panel_disconnect_self"]
[connection signal="send_message" from="ConnectedPanel" to="ChatSinhronizer" method="_on_connected_panel_send_message"]

View File

@ -79,7 +79,6 @@ text = "$GameName"
[node name="GameName" type="LineEdit" parent="MarginContainer/GameVBoxContainer/Game_SettingsContainer/GameNameBox"]
layout_mode = 2
size_flags_horizontal = 3
alignment = 2
[node name="MaxPlayersBox" type="HBoxContainer" parent="MarginContainer/GameVBoxContainer/Game_SettingsContainer"]
layout_mode = 2

View File

@ -4,6 +4,7 @@ extends Node2D
var clientId : int
var playerName : String
var token : String
var login : String
#--------------------------------------------------------------------------------------------------#
@ -15,6 +16,16 @@ func _init():
set_physics_process(0)
func autentification_failed():
GATEWAY.is_reconnected = false
multiplayer.server_disconnected.emit()
func autentification_confirm():
playerName = GATEWAY.playerName
token = GATEWAY.playerToken
login = GATEWAY.playerLogin
#--------------------------------------------------------------------------------------------------#
# RPC Client
@rpc("authority", "reliable", "call_remote", 1)
@ -22,6 +33,16 @@ func authorizated(_name, _token, _isAuthorized):
if _isAuthorized:
token = _token
playerName = _name
GATEWAY.playerToken = _token
GATEWAY.playerName = _name
GATEWAY.emit_signal("authorizated")
else:
GATEWAY.emit_signal("unauthorizated")
@rpc("authority", "reliable", "call_local", 1)
func autentificated(_isAuth:bool):
if !_isAuth:
autentification_failed()
else:
autentification_confirm()

View File

@ -10,7 +10,7 @@ func _ready():
func send_message(_message):
self.rpc_id(1, "rpc_send_message", GATEWAY.clientId, _message)
self.rpc_id(1, "rpc_send_message", GATEWAY.clientId, _message, GATEWAY.playerToken)
if GATEWAY.debug:
print("Send new message")
@ -33,4 +33,4 @@ func rpc_add_message(_name, _message):
#---------------------------------------------------------------------------------------------------
# RPC Server
@rpc("any_peer", "call_local", "unreliable", 9)
func rpc_send_message(_client_id, _message): pass
func rpc_send_message(_client_id, _message, _token): pass

View File

@ -2,14 +2,15 @@ extends Label
var gameId : int
var instanceName: String
var ownerName : String
var gameName : String
var players : Array
var maxPlayers : int
var gamePassword : String
var isStarted : bool
signal left_mouse_button_clicked(instanceName:String)
func set_game_data(_data:Dictionary):
self.gameId = _data.gameId
@ -19,11 +20,16 @@ func set_game_data(_data:Dictionary):
self.gamePassword = _data.gamePassword
self.name = str(_data.gameId)
self.isStarted = _data.isStarted
self.instanceName = _data.instanceName
self.text = "%s | %s | %s | " % [_data.gameName, _data.ownerName, _data.maxPlayers]
if _data.gamePassword != "":
self.text += "PASSWORD"
else:
self.text += "OPEN"
if isStarted:
self.text += " | Close"
else:
self.text += " | Wait"
func get_game_data() -> Dictionary:
@ -35,3 +41,22 @@ func get_game_data() -> Dictionary:
gamePassword = self.gamePassword,
isStarted = self.isStarted
}
func _input(event: InputEvent):
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
if __is_mouse_over_label(
get_global_mouse_position(),
self.get_global_transform().origin,
self.size
):
self.left_mouse_button_clicked.emit(self.instanceName)
func __is_mouse_over_label(mouse_pos:Vector2, label_pos:Vector2, label_size:Vector2) -> bool:
return (
mouse_pos.x >= label_pos.x and
mouse_pos.x <= label_pos.x + label_size.x and
mouse_pos.y >= label_pos.y and
mouse_pos.y <= label_pos.y + label_size.y
)

View File

@ -14,7 +14,7 @@ Label/constants/shadow_outline_size = 1
Label/font_sizes/font_size = 16
[node name="Label" type="Label"]
mouse_filter = 1
mouse_filter = 0
mouse_default_cursor_shape = 2
theme = SubResource("Theme_4x7tq")
text = "Game number 1"

View File

@ -6,21 +6,23 @@ extends Node
@export var PopUpError : PopupPanel
@export var LobbieUI : Control
@export var GamePanel : Panel
@export var ContinueGame : Button
func _ready():
rpc_id(1, "rpc_get_games_list")
rpc_id(1, "rpc_get_games_list", GATEWAY.playerToken)
multiplayer.connected_to_server.connect(_on_search_button_button_up)
func create_game(_gameData:Dictionary):
rpc_id(1, "rpc_create_game", _gameData)
rpc_id(1, "rpc_create_game", _gameData, GATEWAY.playerToken)
func _on_search_button_button_up():
if SearchLine.text == "":
rpc_id(1, "rpc_get_games_list")
rpc_id(1, "rpc_get_games_list", GATEWAY.playerToken)
else:
rpc_id(1, "rpc_get_game", SearchLine.text)
rpc_id(1, "rpc_get_game", SearchLine.text, GATEWAY.playerToken)
func _on_create_game_button_up():
@ -29,11 +31,13 @@ func _on_create_game_button_up():
func _on_popup_error_user_push_ok():
LobbieUI.visible = true
rpc_id(1, "rpc_get_games_list", GATEWAY.playerToken)
GamePanel.emit_signal("back_pushed")
func _on_game_panel_back_pushed():
GamePanel.visible = false
rpc_id(1, "rpc_get_games_list", GATEWAY.playerToken)
func _on_game_panel_create_pushed(_data):
@ -50,19 +54,51 @@ func _on_game_panel_create_pushed(_data):
create_game(gameData)
func _on_game_label_clicked(_instanceName):
rpc_id(1, "rpc_get_game_info", _instanceName, GATEWAY.playerToken)
if GATEWAY.debug:
print("Game label clicked, instance: ", _instanceName)
func _on_continue_game_button_up():
rpc_id(1, "rpc_get_game_info", ContinueGame.instanceName, GATEWAY.playerToken)
if GATEWAY.debug:
print("Connect to self game")
#---------------------------------------------------------------------------------------------------
# Functions
func connect_to_game(_gameData):
var Game = preload("res://data/scenes/Game/game.tscn").instantiate()
get_tree().root.add_child(Game)
Game.set_game_info(_gameData, false)
Game.connect_player(GATEWAY.clientId)
get_tree().set_current_scene(Game)
#---------------------------------------------------------------------------------------------------
# RPC Client
@rpc("authority", "call_local", "unreliable", 2)
func rpc_set_games_list(_games:Array):
ContinueGame.visible = false
var games_count = GameBox.get_child_count()
while games_count > 0:
var game = GameBox.get_child(games_count - 1)
if game.has_signal("left_mouse_button_clicked"):
if game.is_connected("left_mouse_button_clicked", _on_game_label_clicked):
game.disconnect("left_mouse_button_clicked", _on_game_label_clicked)
get_node(game.get_path()).queue_free()
games_count -= 1
if _games.size() > 0:
for game in _games:
if game.has("isMy"):
ContinueGame.visible = true
ContinueGame.instanceName = game.instanceName
var gameLabel = preload("res://data/scenes/lobbies/GameLabel.tscn").instantiate()
await get_tree().create_timer(0.5).timeout
gameLabel.set_game_data(game)
if not gameLabel.is_connected("left_mouse_button_clicked", _on_game_label_clicked):
gameLabel.left_mouse_button_clicked.connect(_on_game_label_clicked)
GameBox.add_child(gameLabel)
if GATEWAY.debug:
print("Get games list")
@ -73,10 +109,11 @@ func rpc_game_created(_game:Dictionary):
var game_instance = preload("res://data/scenes/Game/game.tscn").instantiate()
game_instance.set_game_info(_game, false)
get_tree().root.add_child(game_instance)
get_node("/root/%s" % [_game.gameId]).emit_signal("game_created")
game_instance.emit_signal("game_created")
GamePanel.visible = false
get_tree().set_current_scene(game_instance)
if GATEWAY.debug:
print("Created new game")
get_node("/root/Lobbies").queue_free()
@rpc("authority", "call_local", "unreliable", 2)
@ -87,6 +124,13 @@ func rpc_cant_create_game(_message : String):
print("Can`t create game")
@rpc("authority", "call_local", "unreliable", 2)
func rpc_set_game_info(_gameData:Dictionary):
connect_to_game(_gameData)
if GATEWAY.debug:
print("Get game info")
#---------------------------------------------------------------------------------------------------
# RPC Server
@rpc("any_peer", "call_local", "unreliable", 2)
@ -99,3 +143,7 @@ func rpc_get_games_list(): pass
@rpc("any_peer", "call_local", "unreliable", 2)
func rpc_get_game(_name:String): pass
@rpc("any_peer", "call_local", "reliable", 2)
func rpc_get_game_info(_instanceName:String): pass

View File

@ -0,0 +1,216 @@
[gd_scene load_steps=6 format=3 uid="uid://d4nhi3k0agm2q"]
[ext_resource type="FontFile" uid="uid://dhvfket83gjln" path="res://data/styles/fonts/Roboto-Regular.ttf" id="1_qbt18"]
[ext_resource type="Script" path="res://data/scenes/lobbies/GamesSinhronizer.gd" id="2_a6k32"]
[ext_resource type="Script" path="res://data/scenes/lobbies/ChatSinhronizer.gd" id="2_cc8va"]
[sub_resource type="GDScript" id="GDScript_2o8xy"]
script/source = "extends LineEdit
@export var ChatSinhronizer : Node
func _process(_delta):
if self.has_focus() and Input.is_key_pressed(KEY_ENTER):
if !self.text.is_empty():
ChatSinhronizer.send_message(self.text)
self.text = \"\"
"
[sub_resource type="GDScript" id="GDScript_4mwjp"]
script/source = "extends Button
func _ready():
multiplayer.server_disconnected.connect(_server_disconnect)
func _on_button_up():
multiplayer.emit_signal(\"server_disconnected\")
func _server_disconnect():
get_tree().change_scene_to_packed(load(\"res://data/scenes/main_menu/main_menu.tscn\"))
"
[node name="Lobbies" type="Node"]
[node name="ChatSinhronizer" type="Node" parent="." node_paths=PackedStringArray("GlobalChat")]
script = ExtResource("2_cc8va")
GlobalChat = NodePath("../LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer/Panel/GlobalChat")
[node name="GamesSinhronizer" type="Node" parent="." node_paths=PackedStringArray("GameBox", "SearchLine")]
script = ExtResource("2_a6k32")
GameBox = NodePath("../LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer/GamesScroll/GamesBox")
SearchLine = NodePath("../LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer/Search/GameSearch")
[node name="LobbieUI" type="Control" parent="."]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Background" type="ColorRect" parent="LobbieUI"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.125911, 0.125911, 0.125911, 1)
[node name="MainMarginContainer" type="MarginContainer" parent="LobbieUI"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="MainUIContainer" type="VBoxContainer" parent="LobbieUI/MainMarginContainer"]
layout_mode = 2
[node name="MainContainer" type="HBoxContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/separation = 10
alignment = 1
[node name="GamesBackground" type="ColorRect" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer"]
layout_mode = 2
size_flags_horizontal = 3
color = Color(0.215902, 0.215902, 0.215902, 1)
[node name="GamesMarginContainer" type="MarginContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 5
theme_override_constants/margin_top = 5
theme_override_constants/margin_right = 5
theme_override_constants/margin_bottom = 5
[node name="GamesContainer" type="VBoxContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer"]
layout_mode = 2
[node name="GamesTitle" type="Label" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.707602, 0.575264, 0, 1)
theme_override_fonts/font = ExtResource("1_qbt18")
theme_override_font_sizes/font_size = 16
text = "$Games"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Search" type="HBoxContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer"]
layout_mode = 2
[node name="GameSearch" type="LineEdit" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer/Search"]
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "$search_game"
[node name="SearchButton" type="Button" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer/Search"]
layout_mode = 2
text = "$Search"
[node name="GamesScroll" type="ScrollContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer"]
layout_mode = 2
size_flags_vertical = 3
horizontal_scroll_mode = 0
vertical_scroll_mode = 2
[node name="GamesBox" type="VBoxContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer/GamesScroll"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 10
[node name="GlobalChatBackground" type="ColorRect" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer"]
layout_mode = 2
size_flags_horizontal = 3
color = Color(0.215902, 0.215902, 0.215902, 1)
[node name="GlobalChatMarginContainer" type="MarginContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 5
theme_override_constants/margin_top = 5
theme_override_constants/margin_right = 5
theme_override_constants/margin_bottom = 5
[node name="GlobalChatContainer" type="VBoxContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer"]
layout_mode = 2
[node name="GlobalChatTitle" type="Label" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.707602, 0.575264, 0, 1)
theme_override_fonts/font = ExtResource("1_qbt18")
theme_override_font_sizes/font_size = 16
text = "$GlobalChat"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Panel" type="Panel" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="GlobalChat" type="RichTextLabel" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer/Panel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
theme_override_fonts/normal_font = ExtResource("1_qbt18")
theme_override_font_sizes/normal_font_size = 15
bbcode_enabled = true
text = "# PlayerName : Text text text. Text text text. Text text text. Text text text. Text text text. Text text text."
scroll_following = true
shortcut_keys_enabled = false
deselect_on_focus_loss_enabled = false
drag_and_drop_selection_enabled = false
metadata/_edit_use_anchors_ = true
[node name="GlobalChatMessage" type="LineEdit" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer" node_paths=PackedStringArray("ChatSinhronizer")]
layout_mode = 2
size_flags_vertical = 8
placeholder_text = "$your_message"
caret_blink = true
script = SubResource("GDScript_2o8xy")
ChatSinhronizer = NodePath("../../../../../../../../ChatSinhronizer")
[node name="ButtonsContainer" type="HBoxContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer"]
layout_mode = 2
[node name="CreateGame" type="Button" parent="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer"]
layout_mode = 2
size_flags_horizontal = 2
text = "$CreateGame"
[node name="Back" type="Button" parent="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer"]
layout_mode = 2
size_flags_horizontal = 10
size_flags_vertical = 8
theme_override_fonts/font = ExtResource("1_qbt18")
theme_override_font_sizes/font_size = 15
text = "$Back"
script = SubResource("GDScript_4mwjp")
[connection signal="button_up" from="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer/Search/SearchButton" to="GamesSinhronizer" method="_on_search_button_button_up"]
[connection signal="button_up" from="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer/Back" to="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer/Back" method="_on_button_up"]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=8 format=3 uid="uid://d4nhi3k0agm2q"]
[gd_scene load_steps=10 format=3 uid="uid://d4nhi3k0agm2q"]
[ext_resource type="FontFile" uid="uid://dhvfket83gjln" path="res://data/styles/fonts/Roboto-Regular.ttf" id="1_qbt18"]
[ext_resource type="Script" path="res://data/scenes/lobbies/GamesSinhronizer.gd" id="2_a6k32"]
@ -20,31 +20,43 @@ func _process(_delta):
self.text = \"\"
"
[sub_resource type="GDScript" id="GDScript_1d6b7"]
script/source = "extends Button
@export var ChatSinhronizer : Node
@export var InputText : LineEdit
func _on_button_up():
if !InputText.text.is_empty():
ChatSinhronizer.send_message(InputText.text)
InputText.text = \"\"
"
[sub_resource type="GDScript" id="GDScript_o4vgu"]
script/source = "extends Button
var instanceName : String
"
[sub_resource type="GDScript" id="GDScript_4mwjp"]
script/source = "extends Button
func _ready():
multiplayer.server_disconnected.connect(_server_disconnect)
func _on_button_up():
multiplayer.emit_signal(\"server_disconnected\")
func _server_disconnect():
get_tree().change_scene_to_packed(load(\"res://data/scenes/main_menu/main_menu.tscn\"))
"
[node name="Lobbies" type="Node"]
[node name="GamesSinhronizer" type="Node" parent="." node_paths=PackedStringArray("GameBox", "SearchLine", "PopUpError", "LobbieUI", "GamePanel")]
[node name="GamesSinhronizer" type="Node" parent="." node_paths=PackedStringArray("GameBox", "SearchLine", "PopUpError", "LobbieUI", "GamePanel", "ContinueGame")]
script = ExtResource("2_a6k32")
GameBox = NodePath("../LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer/GamesScroll/GamesBox")
SearchLine = NodePath("../LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer/Search/GameSearch")
PopUpError = NodePath("../PopupError")
LobbieUI = NodePath("../LobbieUI")
GamePanel = NodePath("../LobbieUI/MainMarginContainer/GamePanel")
ContinueGame = NodePath("../LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer/ContinueGame")
[node name="ChatSinhronizer" type="Node" parent="." node_paths=PackedStringArray("GlobalChat")]
script = ExtResource("2_cc8va")
@ -195,13 +207,24 @@ deselect_on_focus_loss_enabled = false
drag_and_drop_selection_enabled = false
metadata/_edit_use_anchors_ = true
[node name="GlobalChatMessage" type="LineEdit" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer" node_paths=PackedStringArray("ChatSinhronizer")]
[node name="InputContainer" type="HBoxContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer"]
layout_mode = 2
[node name="GlobalChatMessage" type="LineEdit" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer/InputContainer" node_paths=PackedStringArray("ChatSinhronizer")]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 8
placeholder_text = "$your_message"
caret_blink = true
script = SubResource("GDScript_2o8xy")
ChatSinhronizer = NodePath("../../../../../../../../ChatSinhronizer")
ChatSinhronizer = NodePath("../../../../../../../../../ChatSinhronizer")
[node name="SendButton" type="Button" parent="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer/InputContainer" node_paths=PackedStringArray("ChatSinhronizer", "InputText")]
layout_mode = 2
text = "$Send"
script = SubResource("GDScript_1d6b7")
ChatSinhronizer = NodePath("../../../../../../../../../ChatSinhronizer")
InputText = NodePath("../GlobalChatMessage")
[node name="ButtonsContainer" type="HBoxContainer" parent="LobbieUI/MainMarginContainer/MainUIContainer"]
layout_mode = 2
@ -211,6 +234,13 @@ layout_mode = 2
size_flags_horizontal = 2
text = "$CreateGame"
[node name="ContinueGame" type="Button" parent="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer"]
visible = false
layout_mode = 2
size_flags_horizontal = 4
text = "$ContinueGame"
script = SubResource("GDScript_o4vgu")
[node name="Back" type="Button" parent="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer"]
layout_mode = 2
size_flags_horizontal = 10
@ -226,7 +256,9 @@ layout_mode = 2
[connection signal="user_push_ok" from="PopupError" to="GamesSinhronizer" method="_on_popup_error_user_push_ok"]
[connection signal="button_up" from="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GamesBackground/GamesMarginContainer/GamesContainer/Search/SearchButton" to="GamesSinhronizer" method="_on_search_button_button_up"]
[connection signal="button_up" from="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer/InputContainer/SendButton" to="LobbieUI/MainMarginContainer/MainUIContainer/MainContainer/GlobalChatBackground/GlobalChatMarginContainer/GlobalChatContainer/InputContainer/SendButton" method="_on_button_up"]
[connection signal="button_up" from="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer/CreateGame" to="GamesSinhronizer" method="_on_create_game_button_up"]
[connection signal="button_up" from="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer/ContinueGame" to="GamesSinhronizer" method="_on_continue_game_button_up"]
[connection signal="button_up" from="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer/Back" to="LobbieUI/MainMarginContainer/MainUIContainer/ButtonsContainer/Back" method="_on_button_up"]
[connection signal="back_pushed" from="LobbieUI/MainMarginContainer/GamePanel" to="GamesSinhronizer" method="_on_game_panel_back_pushed"]
[connection signal="create_pushed" from="LobbieUI/MainMarginContainer/GamePanel" to="GamesSinhronizer" method="_on_game_panel_create_pushed"]

View File

@ -49,6 +49,9 @@ func _on_login_btn_button_down():
func _on_connected_ok():
var player = GATEWAY._get_player(GATEWAY.clientId)
if player:
player.login = LoginInput.text
InfoText.text = "Connected to %s on port %s" % [GATEWAY.settings.Ip, GATEWAY.settings.Port]
await get_tree().create_timer(5).timeout
GATEWAY.rpc_id(1, 'authorization', LoginInput.text, PasswordInput.text.md5_text())
@ -77,6 +80,7 @@ func _on_authorization_fail():
func _on_authorization_ok():
GATEWAY.playerLogin = LoginInput.text
start_lobbies()
@ -125,10 +129,15 @@ func _on_registration_ok():
RegistrationPasswordInput_2.editable = true
LoginContainer.visible = true
RegistrationContainer.visible = false
GATEWAY.playerLogin = RegistrationInput.text
start_lobbies()
#--------------------------------------------------------------------------------------------------#
# Functions
func start_lobbies():
get_tree().change_scene_to_packed(load("res://data/scenes/lobbies/Lobbies.tscn"))
var Lobbies = preload("res://data/scenes/lobbies/Lobbies.tscn").instantiate()
var current_scene = get_tree().get_current_scene()
current_scene.queue_free()
get_tree().root.add_child(Lobbies)
get_tree().set_current_scene(Lobbies)

View File

@ -10,6 +10,10 @@ var settings : Dictionary = {
Port = 3300,
}
var clientId : int
var playerName : String
var playerToken : String
var playerLogin : String
var is_reconnected : bool = false
# Signals
signal unauthorizated
@ -86,7 +90,14 @@ func _on_server_disconnected():
player.queue_free()
if debug:
print('Disconnected from server')
multiplayer.multiplayer_peer = null
multiplayer.multiplayer_peer.close()
if !is_reconnected:
var lobbies = get_node_or_null("Lobbies")
if lobbies:
lobbies.queue_free()
get_tree().change_scene_to_packed(load("res://data/scenes/main_menu/main_menu.tscn"))
else:
connect_to_server()
func _on_connected_ok():
@ -96,6 +107,9 @@ func _on_connected_ok():
player.clientId = clientId
player.name = str(clientId)
add_child(player)
if is_reconnected:
autentification.rpc_id(1, playerToken, playerLogin)
is_reconnected = false
if debug:
print('Connect to server')
@ -104,6 +118,9 @@ func _on_connected_fail():
if debug:
print('Connection failed')
multiplayer.multiplayer_peer = null
if is_reconnected:
is_reconnected = false
get_tree().change_scene_to_packed(load("res://data/scenes/main_menu/main_menu.tscn"))
func _on_authorization_fail():
@ -125,9 +142,15 @@ func _on_registration_fail(_reason : String):
@rpc("any_peer", "reliable", "call_local", 1)
func authorization(): pass
@rpc("any_peer", "reliable", "call_local", 1)
func registration(): pass
@rpc("any_peer", "reliable", "call_local", 1)
func autentification(_token: String): pass
#--------------------------------------------------------------------------------------------------#
# RPC Client
@rpc("any_peer", "reliable", "call_local", 1)

View File

@ -30,4 +30,13 @@ $only_one_game_for_one_player,Another game has already been created - Only one g
$data_base_error,Data base error,Помилка бази даних,Ошибка базы данных
$GameName,Game name,Назва гри,Название игры
$MaxPlayers,Max players,Макс.гравців,Макс.игроков
$leave_empty_for_open_game,Leave blank for open play,Залиште поле порожнім для відкритої гри,Оставьте поле пустым для открытой игры
$leave_empty_for_open_game,Leave blank for open play,Залиште поле порожнім для відкритої гри,Оставьте поле пустым для открытой игры
$Send,Send,Надіслати,Отправить
$ContinueGame,Continue game,Продовжити гру,Продолжить игру
$GameLeader,Game leader,Ведучій,Ведущий
$Players,Players count,Гравців,Игроков
$InGameLobbie,Players,Гравці,Игроки
$ConnectToGame,Join the game,Приєднатись до гри,Присоединяйтесь к игре
$GameChat,Game chat,Ігровий чат,Игровой чат
$StartGame,Start game,Почати гру,Начать игру
$ReadyGame,Ready,Готовий,Готов
1 KEYS en uk ru
30 $data_base_error Data base error Помилка бази даних Ошибка базы данных
31 $GameName Game name Назва гри Название игры
32 $MaxPlayers Max players Макс.гравців Макс.игроков
33 $leave_empty_for_open_game Leave blank for open play Залиште поле порожнім для відкритої гри Оставьте поле пустым для открытой игры
34 $Send Send Надіслати Отправить
35 $ContinueGame Continue game Продовжити гру Продолжить игру
36 $GameLeader Game leader Ведучій Ведущий
37 $Players Players count Гравців Игроков
38 $InGameLobbie Players Гравці Игроки
39 $ConnectToGame Join the game Приєднатись до гри Присоединяйтесь к игре
40 $GameChat Game chat Ігровий чат Игровой чат
41 $StartGame Start game Почати гру Начать игру
42 $ReadyGame Ready Готовий Готов

View File

@ -33,6 +33,7 @@ GATEWAY="*res://data/scripts/objects/GateWay.gd"
window/size/viewport_width=800
window/size/viewport_height=600
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
window/ios/allow_high_refresh_rate=false
window/ios/hide_home_indicator=false