Show network Ping & start AI behaviour tree

This commit is contained in:
2023-01-22 23:44:41 +01:00
parent ce7b74c832
commit 26f17fbd03
89 changed files with 2839 additions and 53 deletions

View File

@@ -1,11 +1,14 @@
extends Node
signal player_spawn
# The player scene (which we want to configure for replication).
const Player = preload("res://entities/Player.tscn")
@onready var NetworkingRoot = get_node("/root/Game/Networking")
var client_clock = 0
var latency = 0
var delta_latency = 0
var latency_array = []
func start_network(server: bool, ip="localhost"):
var peer = ENetMultiplayerPeer.new()
@@ -20,26 +23,47 @@ func start_network(server: bool, ip="localhost"):
else:
peer.create_client(ip, 27015)
multiplayer.set_multiplayer_peer(peer)
var timer = Timer.new()
timer.wait_time = 0.5
timer.autostart = true
timer.connect("timeout", func(): rpc_id(1, "Ping", Time.get_unix_time_from_system()))
add_child(timer)
timer.start()
func add_network_entity(path):
var spawner = NetworkingRoot.get_node("Networking") as MultiplayerSpawner
spawner.add_spawnable_scene(path)
func create_player(id=1):
# Instantiate a new player for this client.
var p = Player.instantiate()
# Sets the player name (only sent during spawn).
#p.player_name = "Player %d" % id
# Set a random position (sent on every replicator update).
#p.position = Vector2(randi() % 500, randi() % 500)
# Add it to the "Players" node.
# We give the new Node a name for easy retrieval, but that's not necessary.
p.name = str(id)
#p.set_multiplayer_authority(id)
NetworkingRoot.add_child(p)
p.init()
func destroy_player(id):
# Delete this peer's node.
NetworkingRoot.get_node(str(id)).queue_free()
@rpc(any_peer)
func Ping(client_time):
print("Got ping")
var player_id = multiplayer.get_remote_sender_id()
rpc_id(player_id, "Pong", client_time)
@rpc
func Pong(client_time):
latency_array.append((Time.get_unix_time_from_system() - client_time) /2)
if latency_array.size() == 9:
var total_latency = 0
latency_array.sort()
var mid_point = latency_array[4]
for i in range(latency_array.size()-1,-1,-1):
if latency_array[i] > (2 * mid_point) and latency_array[i] > 20:
latency_array.remove_at(i)
else:
total_latency += latency_array[i]
delta_latency = (total_latency / latency_array.size()) - latency
latency = total_latency / latency_array.size()
latency_array.clear()
print(delta_latency)