Improved network communication
This commit is contained in:
28
client/network/PlayerState.gd
Normal file
28
client/network/PlayerState.gd
Normal file
@ -0,0 +1,28 @@
|
||||
extends PacketHandler
|
||||
|
||||
@export var player_scene: PackedScene
|
||||
|
||||
func _ready():
|
||||
assert(player_scene)
|
||||
%Client.set_handler(Packet.PLAYER_STATE, self)
|
||||
|
||||
func handle_packet(data: PackedByteArray, _peer: PacketPeer):
|
||||
var player_name := data.get_string_from_utf8()
|
||||
print(player_name)
|
||||
|
||||
var position_data := data.slice(player_name.length() + 1)
|
||||
var server_position := Vector3()
|
||||
server_position.x = position_data.decode_float(0)
|
||||
server_position.y = position_data.decode_float(4)
|
||||
server_position.z = position_data.decode_float(8)
|
||||
print(server_position)
|
||||
|
||||
var player := spawn_player()
|
||||
player.name = player_name
|
||||
player.position = server_position
|
||||
Global.player = player
|
||||
|
||||
func spawn_player() -> Player:
|
||||
var player = player_scene.instantiate()
|
||||
%Players.add_child(player)
|
||||
return player
|
@ -1,14 +0,0 @@
|
||||
extends PacketHandler
|
||||
|
||||
@export var player_scene: PackedScene
|
||||
|
||||
func _ready():
|
||||
%Client.set_handler(Packet.SPAWN, self)
|
||||
|
||||
func handle_packet(_data: PackedByteArray, _peer: PacketPeer):
|
||||
Global.player = spawn_player()
|
||||
|
||||
func spawn_player() -> Player:
|
||||
var player = player_scene.instantiate()
|
||||
%Players.add_child(player)
|
||||
return player
|
9
client/network/shared/Account.gd
Normal file
9
client/network/shared/Account.gd
Normal file
@ -0,0 +1,9 @@
|
||||
class_name Account
|
||||
|
||||
var username: String
|
||||
var password: String
|
||||
var position: Vector3
|
||||
|
||||
func _init(name: String, pw: String):
|
||||
username = name
|
||||
password = pw
|
23
client/network/shared/NetworkNode.gd
Normal file
23
client/network/shared/NetworkNode.gd
Normal file
@ -0,0 +1,23 @@
|
||||
class_name NetworkNode
|
||||
extends Node
|
||||
|
||||
var handlers: Array[Node] = []
|
||||
|
||||
func _init():
|
||||
handlers.resize(256)
|
||||
|
||||
func get_handler(index: int) -> PacketHandler:
|
||||
return handlers[index]
|
||||
|
||||
func set_handler(index: int, node: PacketHandler):
|
||||
handlers[index] = node
|
||||
|
||||
func handle_packet(packet: PackedByteArray, peer: PacketPeer):
|
||||
var type := packet.decode_u8(0)
|
||||
var handler := get_handler(type)
|
||||
|
||||
if handler == null:
|
||||
push_warning("Unknown packet type %d" % type)
|
||||
return
|
||||
|
||||
handler.handle_packet(packet.slice(1), peer)
|
9
client/network/shared/Packet.gd
Normal file
9
client/network/shared/Packet.gd
Normal file
@ -0,0 +1,9 @@
|
||||
class_name Packet
|
||||
|
||||
enum {
|
||||
PING = 1,
|
||||
LOGIN = 2,
|
||||
LOGOUT = 3,
|
||||
PLAYER_STATE = 10,
|
||||
PLAYER_MOVE = 11,
|
||||
}
|
5
client/network/shared/PacketHandler.gd
Normal file
5
client/network/shared/PacketHandler.gd
Normal file
@ -0,0 +1,5 @@
|
||||
class_name PacketHandler
|
||||
extends Node
|
||||
|
||||
func handle_packet(_data: PackedByteArray, _peer: PacketPeer):
|
||||
pass
|
Reference in New Issue
Block a user