Show network Ping & start AI behaviour tree
This commit is contained in:
@@ -2,9 +2,20 @@ extends Node
|
||||
class_name Hitable
|
||||
|
||||
var health = 200
|
||||
var enemies_in_range = []
|
||||
|
||||
func Hit(dmg):
|
||||
#var tween = create_tween()
|
||||
health -= dmg
|
||||
if(health <= 0):
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_area_3d_body_entered(body):
|
||||
if body.get_collision_layer() == 10:
|
||||
enemies_in_range.append(body)
|
||||
|
||||
|
||||
func _on_area_3d_body_exited(body):
|
||||
if body.get_collision_layer() == 10:
|
||||
enemies_in_range.erase(body)
|
||||
|
||||
@@ -47,7 +47,11 @@ func _process(_delta):
|
||||
label.text = "H Velocity: %3.2f" % [Vector2(velocity.x, velocity.z).length()]
|
||||
label.text += "\nV Velocity: %3.2f" % [velocity.y]
|
||||
label.text += "\nOn floor: %s" % is_on_floor()
|
||||
label.text += "\nNetwork ID: %d" % multiplayer.get_unique_id()
|
||||
if(multiplayer.get_unique_id() == 1):
|
||||
label.text += "\nNetwork ID: HOST"
|
||||
else:
|
||||
label.text += "\nNetwork ID: %d " % multiplayer.get_unique_id()
|
||||
label.text += "(%dms)" % Network.delta_latency
|
||||
|
||||
func get_move_direction() -> Vector3:
|
||||
var input_dir := Vector2(
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user