diff --git a/scenes/custom_game.tscn b/scenes/custom_game.tscn index 67599ff..799f501 100644 --- a/scenes/custom_game.tscn +++ b/scenes/custom_game.tscn @@ -71,9 +71,9 @@ anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 margin_left = 73.0 -margin_top = 253.0 +margin_top = 195.0 margin_right = 366.0 -margin_bottom = 310.0 +margin_bottom = 252.0 rect_pivot_offset = Vector2( 0, 0 ) focus_mode = 2 mouse_filter = 0 @@ -88,34 +88,7 @@ text = "Host Game" flat = false align = 1 -[node name="LevelSelect" type="OptionButton" parent="." index="3"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_left = 74.0 -margin_top = 197.0 -margin_right = 364.0 -margin_bottom = 232.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 1 -toggle_mode = false -action_mode = 0 -enabled_focus_mode = 2 -shortcut = null -group = null -text = "Platform map" -flat = false -align = 0 -selected = 0 -items = [ "Platform map", null, false, 0, null, "City-like thing", null, false, 1, null, "Slide", null, false, 2, null ] - -[node name="Client" type="Button" parent="." index="4"] +[node name="Client" type="Button" parent="." index="3"] anchor_left = 0.0 anchor_top = 0.0 @@ -139,7 +112,7 @@ text = "Join Game" flat = false align = 1 -[node name="IPLabel" type="Label" parent="." index="5"] +[node name="IPLabel" type="Label" parent="." index="4"] anchor_left = 0.0 anchor_top = 0.0 @@ -159,7 +132,7 @@ percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 -[node name="IP" type="TextEdit" parent="." index="6"] +[node name="IP" type="TextEdit" parent="." index="5"] anchor_left = 0.0 anchor_top = 0.0 @@ -192,7 +165,7 @@ caret_blink = false caret_blink_speed = 0.65 caret_moving_by_right_click = true -[node name="Label2" type="Label" parent="." index="7"] +[node name="Label2" type="Label" parent="." index="6"] anchor_left = 0.0 anchor_top = 0.0 @@ -212,7 +185,7 @@ percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 -[node name="Label3" type="Label" parent="." index="8"] +[node name="Label3" type="Label" parent="." index="7"] anchor_left = 0.0 anchor_top = 0.0 diff --git a/scenes/lobby.tscn b/scenes/lobby.tscn index 50ccad5..1399c46 100644 --- a/scenes/lobby.tscn +++ b/scenes/lobby.tscn @@ -42,10 +42,10 @@ script = ExtResource( 2 ) [node name="HeroSelect" parent="." index="0" instance=ExtResource( 3 )] editor/display_folded = true -margin_left = 28.0 -margin_top = 98.0 -margin_right = 28.0 -margin_bottom = 98.0 +margin_left = 30.0 +margin_top = 69.0 +margin_right = 30.0 +margin_bottom = 69.0 color = Color( 0.097229, 0.104696, 0.105469, 0 ) [node name="Hero" parent="HeroSelect" index="0"] @@ -94,10 +94,10 @@ anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 -margin_left = 42.0 -margin_top = 423.0 -margin_right = 383.0 -margin_bottom = 456.0 +margin_left = 44.0 +margin_top = 394.0 +margin_right = 385.0 +margin_bottom = 427.0 rect_pivot_offset = Vector2( 0, 0 ) focus_mode = 2 mouse_filter = 0 @@ -221,5 +221,53 @@ mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 1 +[node name="LevelSelect" type="OptionButton" parent="." index="7"] + +visible = false +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 45.0 +margin_top = 486.0 +margin_right = 411.0 +margin_bottom = 527.0 +rect_pivot_offset = Vector2( 0, 0 ) +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +action_mode = 0 +enabled_focus_mode = 2 +shortcut = null +group = null +text = "Platform map" +flat = false +align = 0 +selected = 0 +items = [ "Platform map", null, false, 0, null, "City-like thing", null, false, 1, null, "Slide", null, false, 2, null ] + +[node name="Label" type="Label" parent="LevelSelect" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = -5.0 +margin_top = -37.0 +margin_right = 39.0 +margin_bottom = -15.0 +rect_pivot_offset = Vector2( 0, 0 ) +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Map:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + [editable path="HeroSelect"] diff --git a/scripts/lobby.gd b/scripts/lobby.gd index 5056288..7feb999 100644 --- a/scripts/lobby.gd +++ b/scripts/lobby.gd @@ -11,15 +11,20 @@ var players_done = [] var is_connected = false # Technically this can be done with ENetcetera but it's easier this way onready var matchmaking = preload("res://scripts/matchmaking.gd").new() +onready var networking = preload("res://scripts/networking.gd").new() var matchmaker_tcp func _ready(): add_child(matchmaking) + add_child(networking) + + if get_tree().is_network_server(): + get_node("LevelSelect").show() get_node("Username").connect("text_changed", self, "resend_name") - get_node("StartGame").connect("pressed", self, "start_game") + get_node("StartGame").connect("pressed", self, "_start_game") # get_node("CustomGame/LevelSelect").connect("item_selected", self, "select_level") TODO func collect_info(): @@ -72,3 +77,7 @@ sync func assign_team(peer, is_right_team): get_node("PlayerSettings/Team").set_text("Left Team") render_player_list() +func _start_game(): + var level = 2 # TODO + networking.rpc_id(1, "start_game", level) + diff --git a/scripts/networking.gd b/scripts/networking.gd index 2abab75..d5bb9fd 100644 --- a/scripts/networking.gd +++ b/scripts/networking.gd @@ -2,7 +2,7 @@ extends Node onready var matchmaking = preload("res://scripts/matchmaking.gd").new() -var players = [] +var players = {} # TODO: Should we abstract server so variables like this aren't cluttering everything up? var players_done = [] var begun = false @@ -13,9 +13,9 @@ var my_info = {} func _ready(): add_child(matchmaking) - get_tree().connect("network_peer_connected", self, "_player_connected") - get_tree().connect("network_peer_disconnected", self, "_player_disconnected") - get_tree().connect("connected_to_server", self, "_connected_ok") + # get_tree().connect("network_peer_connected", self, "connect_player") + get_tree().connect("network_peer_disconnected", self, "disconnect_player") + get_tree().connect("connected_to_server", self, "_on_connect") # func connect_global_server(): TODO # ip = global_server_ip @@ -61,24 +61,23 @@ func start_server(port): # if "start_game" in my_info and my_info.start_game: TODO # start_game() -# sync func start_game(): TODO - # my_info.level = get_node("CustomGame/LevelSelect").get_selected_id() TODO - # rpc("_pre_configure_game", my_info.level) +sync func start_game(level): + rpc("_pre_configure_game", level) func disconnect_player(id): if get_tree().is_network_server(): rpc("unregister_player", id) # call_deferred("render_player_list") TODO -func connect_player(): - rpc("_register_player", get_tree().get_network_unique_id(), {}) +func _on_connect(): + rpc("_register_player", get_tree().get_network_unique_id(), my_info) if util.args.get_value("-start-game"): rpc_id(1, "start_game") # is_connected = true TODO remote func _register_player(new_peer, info): players[new_peer] = info - render_player_list() + # render_player_list() TODO if (get_tree().is_network_server()): var right_team_count = 0 # Send current players' info to new player @@ -138,7 +137,7 @@ sync func _pre_configure_game(level): # Load all players (including self) for p in players: players[p].level = level - spawn_player(p) + _spawn_player(p) rpc_id(1, "done_preconfiguring", self_peer_id)