extends PacketHandler

@export var delay := 50

var last_sent := Time.get_ticks_msec()
var last_sent_position := Vector3.ZERO

func handle_packet(data: PackedByteArray, _peer: PacketPeer):
	var buffer := StreamPeerBuffer.new()
	buffer.data_array = data

	var player_id_length := buffer.get_size() - 8
	var player_id := buffer.get_string(player_id_length)
	var x := buffer.get_float()
	# var y := buffer.get_float()
	var z := buffer.get_float()

	var player := Global.players.get_player(player_id)

	if !player:
		return

	var controller := player.controller as ProxyController

	if !controller:
		return
	
	controller.server_position.x = x
	controller.server_position.z = z

func _physics_process(_delta):
	if Global.player == null:
		return
	
	if Global.player.position == last_sent_position:
		return
	
	if Time.get_ticks_msec() < last_sent + delay:
		return
	
	send_position()
	last_sent = Time.get_ticks_msec()
	last_sent_position = Global.player.position

func send_position():
	var buffer := StreamPeerBuffer.new()
	buffer.put_8(PacketHandler.Packet.PLAYER_MOVE)
	buffer.put_float(Global.player.position.x)
	# buffer.put_float(Global.player.position.y)
	buffer.put_float(Global.player.position.z)
	%Client.send(buffer.data_array)