Added Spawn locations

This commit is contained in:
Kristofers Solo
2021-10-30 18:02:27 +03:00
parent 2741c1e314
commit f265c7236e
11 changed files with 112 additions and 22 deletions

View File

@@ -12,8 +12,8 @@ func _ready() -> void:
func setup_player_positions() -> void:
for player in Players.get_children():
if player.is_in_group("player"):
for player in PersistentNodes.get_children():
if player.is_in_group("Player"):
for spawn_location in $spawn_locations.get_children():
if int(spawn_location.name) == current_spawn_location_instance_number and current_player_location_instance_number != player:
player.rpc("update_position", spawn_location.global_position)
@@ -22,6 +22,6 @@ func setup_player_positions() -> void:
func _player_disconnected(id) -> void:
if Players.has_node(str(id)):
Players.get_node(str(id)).username_text_instance.queue_free()
Players.get_node(str(id)).queue_free()
if PersistentNodes.has_node(str(id)):
PersistentNodes.get_node(str(id)).username_text_instance.queue_free()
PersistentNodes.get_node(str(id)).queue_free()

View File

@@ -1,6 +1,8 @@
extends Node
var player_master = null
var ui = null
var alive_players = []
func instance_node_at_location(node: Object, parent: Object, location: Vector2) -> Object:
var node_instance = instance_node(node, parent)

View File

@@ -7,7 +7,7 @@ const ACCELERATION = 10
var speed = 50
var velocity = Vector2()
var fly = false
var fly = true
var username_text = load("res://scenes/username_text.tscn")
var username setget username_set
@@ -23,7 +23,7 @@ onready var tween = $Tween
func _ready():
get_tree().connect("network_peer_connected", self, "_network_peer_connected")
username_text_instance = Global.instance_node_at_location(username_text, Players, global_position)
username_text_instance = Global.instance_node_at_location(username_text, PersistentNodes, global_position)
username_text_instance.player_following = self
@@ -121,3 +121,27 @@ func _on_network_tick_rate_timeout():
rset_unreliable("puppet_position", global_position)
rset_unreliable("puppet_velocity", velocity)
rset_unreliable("puppet_rotation", rotation_degrees)
sync func update_position(pos):
global_position = pos
puppet_position = pos
sync func destroy() -> void:
username_text_instance.visible = false
visible = false
$CollisionShape2D.disabled = true
$Hitbox/CollisionShape2D.disabled = true
Global.alive_players.erase(self)
if get_tree().has_network_peer():
if is_network_master():
Global.player_master = null
func _exit_tree() -> void:
Global.alive_players.erase(self)
if get_tree().has_network_peer():
if is_network_master():
Global.player_master = null

View File

@@ -1,7 +1,7 @@
extends Node
const DEFAULT_PORT = 28960
const MAX_CLIENTS = 3
const MAX_CLIENTS = 4
var server = null
var client = null
@@ -9,6 +9,13 @@ var client = null
var ip_address = ""
var current_player_username = ""
var client_connected_to_server = false
var networked_object_name_index = 0 setget networked_object_name_index_set
puppet var puppet_networked_object_name_index = 0 setget puppet_networked_object_name_index_set
onready var client_connection_timeout_timer = Timer.new()
func _ready() -> void:
if OS.get_name() == "Windows":
@@ -39,6 +46,11 @@ func join_server() -> void:
get_tree().set_network_peer(client)
func reset_network_connection() -> void:
if get_tree().has_network_peer():
get_tree().network_peer = null
func reset_network_connections():
if get_tree().has_network_peer():
get_tree().network_peer = null
@@ -51,12 +63,42 @@ func _connected_to_server() -> void:
func _server_disconnected() -> void:
print("Disconnected from the server")
for child in Players.get_children():
for child in PersistentNodes.get_children():
if child.is_in_group("Net"):
child.queue_free()
reset_network_connections()
if Global.ui != null:
var prompt = Global.instance_node(load("res://scenes/simple_prompt.tscn"), Global.ui)
prompt.set_text("Disconnected from server")
func _client_connection_timeout():
if client_connected_to_server == false:
print("Client has been timed out")
reset_network_connection()
var connection_timeout_prompt = Global.instance_node(load("res://Simple_prompt.tscn"), get_tree().current_scene)
connection_timeout_prompt.set_text("Connection timed out")
func _connection_failed():
for child in PersistentNodes.get_children():
if child.is_in_group("Net"):
child.queue_free()
reset_network_connection()
if Global.ui != null:
var prompt = Global.instance_node(load("res://Simple_prompt.tscn"), Global.ui)
prompt.set_text("Connection failed")
func puppet_networked_object_name_index_set(new_value):
networked_object_name_index = new_value
func networked_object_name_index_set(new_value):
networked_object_name_index = new_value
if get_tree().is_network_server():
rset("puppet_networked_object_name_index", networked_object_name_index)

View File

@@ -2,6 +2,9 @@ extends Control
var player = load("res://scenes/player.tscn")
var current_spawn_location_instance_number = 1
var current_player_for_spawn_location_number = null
onready var multiplayer_config_ui = $multiplayer_configure
onready var username_text_edit = $multiplayer_configure/username_text_edit
onready var device_ip_address = $UI/device_ip_address
@@ -16,7 +19,17 @@ func _ready():
device_ip_address.text = Network.ip_address
if get_tree().network_peer != null:
pass
multiplayer_config_ui.hide()
current_spawn_location_instance_number = 1
for player in PersistentNodes.get_children():
if player.is_in_group("Player"):
for spawn_location in $Spawn_locations.get_children():
if int(spawn_location.name) == current_spawn_location_instance_number and current_player_for_spawn_location_number != player:
player.rpc("update_position", spawn_location.global_position)
player.rpc("enable")
current_spawn_location_instance_number += 1
current_player_for_spawn_location_number = player
else:
start_game.hide()
@@ -36,9 +49,9 @@ func _player_connected(id) -> void:
func _player_disconnected(id) -> void:
print("Player " + str(id) + " has disconnected")
if Players.has_node(str(id)):
Players.get_node(str(id)).username_text_instance.queue_free()
Players.get_node(str(id)).queue_free()
if PersistentNodes.has_node(str(id)):
PersistentNodes.get_node(str(id)).username_text_instance.queue_free()
PersistentNodes.get_node(str(id)).queue_free()
func _on_create_server_pressed():
@@ -61,11 +74,13 @@ func _connected_to_server() -> void:
instance_player(get_tree().get_network_unique_id())
func instance_player(id) -> void:
var player_instance = Global.instance_node_at_location(player, Players, Vector2(rand_range(0, 1920), rand_range(0, 1080)))
var player_instance = Global.instance_node_at_location(player, PersistentNodes, Vector2(rand_range(0, 1920), rand_range(0, 1080)))
player_instance.name = str(id)
player_instance.set_network_master(id)
player_instance.username = username_text_edit.text
current_spawn_location_instance_number += 1
func _on_start_game_pressed():

View File

@@ -10,7 +10,7 @@ config_version=4
[application]
config/name="Game_4"
config/name="Kristofers Multiplayer game"
run/main_scene="res://scenes/main_menu.tscn"
config/icon="res://icon.png"
@@ -18,7 +18,7 @@ config/icon="res://icon.png"
Network="*res://code/server/network.gd"
Global="*res://code/global.gd"
Players="*res://scenes/players.tscn"
PersistentNodes="*res://scenes/persistent_nodes.tscn"
[display]

View File

@@ -15,6 +15,8 @@ __meta__ = {
[node name="multiplayer_configure" type="Control" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 2.5199
margin_right = 2.5199
__meta__ = {
"_edit_use_anchors_": false
}

View File

@@ -0,0 +1,3 @@
[gd_scene format=2]
[node name="persistent_nodes" type="Node"]

View File

@@ -6,7 +6,10 @@
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 16, 16 )
[node name="player" type="KinematicBody2D"]
[node name="player" type="KinematicBody2D" groups=[
"Net",
"Player",
]]
script = ExtResource( 2 )
[node name="square" type="Sprite" parent="."]

View File

@@ -1,3 +0,0 @@
[gd_scene format=2]
[node name="players" type="Node"]

View File

@@ -3,7 +3,9 @@
[ext_resource path="res://font/roboto.tres" type="DynamicFont" id=1]
[ext_resource path="res://code/username_text.gd" type="Script" id=2]
[node name="username_text" type="Node2D"]
[node name="username_text" type="Node2D" groups=[
"Net",
]]
z_index = 10
script = ExtResource( 2 )