mirror of
https://github.com/kristoferssolo/FuncIt.git
synced 2026-03-22 00:26:23 +00:00
Added Spawn locations
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
3
kristofers/game/scenes/persistent_nodes.tscn
Normal file
3
kristofers/game/scenes/persistent_nodes.tscn
Normal file
@@ -0,0 +1,3 @@
|
||||
[gd_scene format=2]
|
||||
|
||||
[node name="persistent_nodes" type="Node"]
|
||||
@@ -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="."]
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
[gd_scene format=2]
|
||||
|
||||
[node name="players" type="Node"]
|
||||
@@ -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 )
|
||||
|
||||
|
||||
Reference in New Issue
Block a user