extends Node
onready var hyperGateway : HyperGateway
onready var hyperGossip : HyperGossip
onready var player_local : KinematicBody
onready var snapshotTimer : Timer
const knownPlayers = {}
signal new_player(id)
const EVENT_PLAYER_SNAPSHOT = 'player_snapshot'
const EVENT_PLAYER_MOVE = 'player_move'
var RemotePlayer = preload("res://TPS_controller_3.3/TPS_new_remote_player.tscn")
func _ready():
if !hyperGateway:
hyperGateway = get_node("../HyperGodot/HyperGateway")
if !player_local:
player_local = get_node("../Players/PlayerLocal")
if !hyperGossip:
hyperGossip = get_node("../HyperGodot/HyperGossip")
if !snapshotTimer:
snapshotTimer = get_node("../HyperGodot/GossipEventTimer")
func _on_HyperGossip_event(type, data, from):
if type == EVENT_PLAYER_SNAPSHOT:
on_remote_player_snapshot(data, from)
elif type == EVENT_PLAYER_MOVE:
on_remote_player_move(data, from)
func get_player_object(id):
if knownPlayers.has(id): return knownPlayers[id]
var remotePlayer = RemotePlayer.instance()
knownPlayers[id] = remotePlayer
add_child(remotePlayer)
_broadcast_player_snapshot()
return remotePlayer
func _broadcast_player_snapshot():
var translation : Vector3 = player_local.translation
var rotation : Vector3 = player_local.rotation_degrees
var data = {
#"profile": profile,
"translation": {
"x": translation.x,
"y": translation.y,
"z": translation.z
},
"rotation": {
"x": rotation.x,
"y": rotation.y,
"z": rotation.z
}
}
# print('Broadcasting', data)
hyperGossip.broadcast_event(EVENT_PLAYER_SNAPSHOT, data)
func on_remote_player_snapshot(positionData, id):
var remotePlayer = get_player_object(id)
var translation : Vector3 = Vector3(positionData.translation.x, positionData.translation.y, positionData.translation.z)
var rotation : Vector3 = Vector3(positionData.rotation.x, positionData.rotation.y, positionData.rotation.z)
remotePlayer.update_position(
translation,
rotation
)
func on_remote_player_move(directionData, id):
var remotePlayer = get_player_object(id)
remotePlayer.inputDirection = directionData
func _on_HyperGossip_listening(extension_name):
_broadcast_player_snapshot()
func _on_GossipEventTimer_timeout():
if hyperGateway.getIsGatewayRunning():
_broadcast_player_snapshot()
func _on_HyperDebugUI_gossip_update_rate_changed(seconds : float):
snapshotTimer.wait_time = seconds
snapshotTimer.start(seconds)