This repository has been archived on 2022-01-09. You can view files and clone it, but cannot push or open issues/pull-requests.
liblast/Game.gd

100 lines
2.5 KiB
GDScript
Raw Normal View History

2020-06-14 00:29:01 +02:00
extends Spatial
2020-06-14 00:46:44 +02:00
export var is_server = true
2020-06-14 00:29:01 +02:00
export var SERVER_PORT = 9999
export var SERVER_IP = "172.28.162.191"
export var MAX_PLAYERS = 10
2020-06-14 20:59:37 +02:00
var player_scene = preload("res://Player.tscn")
2020-06-14 00:29:01 +02:00
# Called when the node enters the scene tree for the first time.
func _ready():
2020-06-14 02:17:43 +02:00
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
2020-06-14 15:58:05 +02:00
initialize()
2020-06-14 01:13:43 +02:00
debug_connection_status()
func debug_connection_status():
2020-06-14 15:58:05 +02:00
#if (get_tree().network_peer.get_connection_status() == NetworkedMultiplayerPeer.CONNECTION_CONNECTED):
# print("We have connected succesfully")
2020-06-14 01:13:43 +02:00
if (get_tree().network_peer.get_connection_status() == NetworkedMultiplayerPeer.CONNECTION_CONNECTING):
print("We are trying to connect")
2020-06-14 00:29:01 +02:00
2020-06-14 15:58:05 +02:00
func initialize():
var peer
if is_server:
peer = initialize_server()
else:
peer = initialize_client()
get_tree().network_peer = peer
2020-06-14 00:29:01 +02:00
func initialize_server():
2020-06-14 01:13:43 +02:00
var peer = NetworkedMultiplayerENet.new()
2020-06-14 00:29:01 +02:00
peer.create_server(SERVER_PORT, MAX_PLAYERS)
2020-06-14 20:59:37 +02:00
get_tree().connect("network_peer_connected", self, "on_peer_connected")
2020-06-14 22:06:45 +02:00
get_tree().connect("network_peer_disconnected", self, "on_peer_disconnected")
2020-06-14 21:23:34 +02:00
add_player(get_tree().get_network_unique_id())
2020-06-14 15:58:05 +02:00
return peer
2020-06-14 00:29:01 +02:00
func initialize_client():
2020-06-14 01:13:43 +02:00
var peer = NetworkedMultiplayerENet.new()
2020-06-14 00:29:01 +02:00
peer.create_client(SERVER_IP, SERVER_PORT)
2020-06-14 20:59:37 +02:00
get_tree().connect("connected_to_server", self, "on_connection_established")
get_tree().connect("connection_failed", self, "on_connection_failed")
2020-06-14 15:58:05 +02:00
return peer
2020-06-14 21:55:10 +02:00
func get_player_names():
var players = $Players.get_children()
var player_names = []
for player in players:
player_names.append(player.name)
return player_names
2020-06-14 21:23:34 +02:00
2020-06-14 21:55:10 +02:00
remote func check_players(player_names):
for player_name in player_names:
if not $Players.has_node(player_name):
var player = player_scene.instance()
player.name = player_name
2020-06-14 21:23:34 +02:00
$Players.add_child(player)
2020-06-14 21:55:10 +02:00
player.translation += Vector3(0.0, 3.0, 0.0)
2020-06-14 21:23:34 +02:00
func add_player(id):
2020-06-14 20:59:37 +02:00
var player = player_scene.instance()
2020-06-14 21:23:34 +02:00
2020-06-14 21:34:17 +02:00
$Players.add_child(player)
2020-06-14 21:55:10 +02:00
player.name = str(id)
2020-06-14 20:59:37 +02:00
player.set_network_master(id)
2020-06-14 21:23:34 +02:00
player.translation += Vector3(0.0, 3.0, 0.0)
2020-06-14 21:55:10 +02:00
var player_names = get_player_names()
rpc("check_players", player_names)
2020-06-14 21:23:34 +02:00
2020-06-14 22:06:45 +02:00
remote func remove_player(id):
for player in $Players.get_children():
if player.name == str(id):
remove_child(player)
2020-06-14 21:23:34 +02:00
func on_peer_connected(id):
print("Peer connected with id ", id)
add_player(id)
2020-06-14 22:06:45 +02:00
func on_peer_disconnected(id):
print("Peer disconnected with id ", id)
2020-06-14 21:23:34 +02:00
2020-06-14 22:06:45 +02:00
rpc("remove_player", id)
2020-06-14 15:58:05 +02:00
func on_connection_established():
print("Connection has been established")
func on_connection_failed():
print("Connection has failed")