mirror of
https://port.numenaute.org/aleajactaest/bazar_alea.git
synced 2024-11-22 15:16:13 +00:00
improve update network
This commit is contained in:
parent
ad622360f5
commit
3564ff8d58
4 changed files with 76 additions and 45 deletions
|
@ -12,6 +12,7 @@ var camrot_v:float = 0.0
|
||||||
@export var v_sensitivity:float = 0.5
|
@export var v_sensitivity:float = 0.5
|
||||||
|
|
||||||
var save_rot:Vector3
|
var save_rot:Vector3
|
||||||
|
var tick:int = 0
|
||||||
|
|
||||||
|
|
||||||
# Get the gravity from the project settings to be synced with RigidBody nodes.
|
# Get the gravity from the project settings to be synced with RigidBody nodes.
|
||||||
|
@ -61,6 +62,14 @@ func get_my_rotation() -> Vector3:
|
||||||
return $Armature.get_global_rotation()
|
return $Armature.get_global_rotation()
|
||||||
|
|
||||||
|
|
||||||
|
func update_player(ctick:int, pos:Vector3, rot:Vector3):
|
||||||
|
#print(tick, " - ", ctick)
|
||||||
|
if tick != ctick:
|
||||||
|
set_my_position(pos)
|
||||||
|
set_my_rotation(rot)
|
||||||
|
tick = ctick
|
||||||
|
|
||||||
|
|
||||||
func set_my_position(pos:Vector3):
|
func set_my_position(pos:Vector3):
|
||||||
self.set_global_position(pos)
|
self.set_global_position(pos)
|
||||||
|
|
||||||
|
|
|
@ -83,9 +83,10 @@ func _on_connexion_updated(new_state:Multi.Connexion):
|
||||||
$Panel.show()
|
$Panel.show()
|
||||||
|
|
||||||
|
|
||||||
func _on_update_me(pos:Vector3, rot:Vector3):
|
func _on_update_me(tick:int, pos:Vector3, rot:Vector3):
|
||||||
self.set_player_position(pos)
|
$PlayerSpawnLocation.get_child(0).update_player(tick, pos, rot)
|
||||||
self.set_player_rotation(rot)
|
#self.set_player_position(pos)
|
||||||
|
#self.set_player_rotation(rot)
|
||||||
#self.get_node("CharacterBody3D").set_enable_event(true)
|
#self.get_node("CharacterBody3D").set_enable_event(true)
|
||||||
#for idx in $PlayerSpawnLocation.get_child_count():
|
#for idx in $PlayerSpawnLocation.get_child_count():
|
||||||
# $PlayerSpawnLocation.queue_free()
|
# $PlayerSpawnLocation.queue_free()
|
||||||
|
@ -95,7 +96,7 @@ func _on_update_me(pos:Vector3, rot:Vector3):
|
||||||
#self.set_player_position(pos)
|
#self.set_player_position(pos)
|
||||||
|
|
||||||
|
|
||||||
func _on_update_player(id:int, pos:Vector3, rot:Vector3):
|
func _on_update_player(id:int, tick:int, pos:Vector3, rot:Vector3):
|
||||||
var child = $Players.find_child(str(id), false, false)
|
var child = $Players.find_child(str(id), false, false)
|
||||||
if child == null:
|
if child == null:
|
||||||
print("Add player : ", id)
|
print("Add player : ", id)
|
||||||
|
@ -106,15 +107,17 @@ func _on_update_player(id:int, pos:Vector3, rot:Vector3):
|
||||||
instance.set_visible(true)
|
instance.set_visible(true)
|
||||||
instance.set_id(id)
|
instance.set_id(id)
|
||||||
var child2 = $Players.find_child(str(id), false, false)
|
var child2 = $Players.find_child(str(id), false, false)
|
||||||
child2.set_my_position(pos)
|
child2.update_player(tick, pos, rot)
|
||||||
child2.set_my_rotation(rot)
|
#child2.set_my_position(pos)
|
||||||
|
#child2.set_my_rotation(rot)
|
||||||
else:
|
else:
|
||||||
print("Update player : ", id, " ", pos, " ", rot)
|
print("Update player : ", id, " ", pos, " ", rot)
|
||||||
#print(pos)
|
#print(pos)
|
||||||
#pos.y += 10.0
|
#pos.y += 10.0
|
||||||
child.set_my_position(pos)
|
child.update_player(tick, pos, rot)
|
||||||
child.set_my_rotation(rot)
|
#child.set_my_position(pos)
|
||||||
#child.set_visible(true)
|
#child.set_my_rotation(rot)
|
||||||
|
##child.set_visible(true)
|
||||||
|
|
||||||
|
|
||||||
func _on_remove_player(id:int):
|
func _on_remove_player(id:int):
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
signal connexion_updated(new_state)
|
||||||
|
signal update_my_position(tick, pos, rot)
|
||||||
|
signal update_player_position(id, tick, pos, rot)
|
||||||
|
signal remove_player(id)
|
||||||
|
|
||||||
|
|
||||||
@export var listen_ip:String = "127.0.0.1":
|
@export var listen_ip:String = "127.0.0.1":
|
||||||
set = set_ip
|
set = set_ip
|
||||||
|
|
||||||
|
@ -53,12 +59,6 @@ enum Connexion{
|
||||||
id = value
|
id = value
|
||||||
|
|
||||||
|
|
||||||
signal connexion_updated(new_state)
|
|
||||||
signal update_my_position(pos, rot)
|
|
||||||
signal update_player_position(id, pos, rot)
|
|
||||||
signal remove_player(id)
|
|
||||||
|
|
||||||
|
|
||||||
var enet:ENetConnection
|
var enet:ENetConnection
|
||||||
var dataEnet:ENetPacketPeer
|
var dataEnet:ENetPacketPeer
|
||||||
var errorEnet:Error
|
var errorEnet:Error
|
||||||
|
@ -123,49 +123,59 @@ func bad_account():
|
||||||
|
|
||||||
|
|
||||||
func get_event_received():
|
func get_event_received():
|
||||||
var data = dataEnet.get_packet()
|
var data:PackedFlow = PackedFlow.new(dataEnet)
|
||||||
|
var command = data.get_u8()
|
||||||
|
|
||||||
|
#var data = dataEnet.get_packet()
|
||||||
#print("get: ", data)
|
#print("get: ", data)
|
||||||
if data[0] == 1: # Return connexion
|
if command == 1: # Return connexion
|
||||||
if data[1] == 0: # OK
|
var state = data.get_u8()
|
||||||
id = data.decode_u64(2)
|
if state == 0: # OK
|
||||||
var x:float = data.decode_double(2+8)
|
id = data.get_u64()
|
||||||
var y:float = data.decode_double(2+16)
|
var x:float = data.get_f64()
|
||||||
var z:float = data.decode_double(2+24)
|
var y:float = data.get_f64()
|
||||||
var rx:float = data.decode_double(2+32)
|
var z:float = data.get_f64()
|
||||||
var ry:float = data.decode_double(2+40)
|
var rx:float = data.get_f64()
|
||||||
var rz:float = data.decode_double(2+48)
|
var ry:float = data.get_f64()
|
||||||
var _tick:int = data.decode_double(2+1)
|
var rz:float = data.get_f64()
|
||||||
|
var tick:int = data.get_u8()
|
||||||
|
#for i in range(56,74):
|
||||||
|
# var tick1:int = data.decode_u8(2+i)
|
||||||
|
# print("tick ", i, " :", tick1)
|
||||||
print("MyID:", id)
|
print("MyID:", id)
|
||||||
#print("id:", id, " x:", x, " y:", y, " z:", z)
|
print("id:", id, " tick:", tick, " x:", x, " y:", y, " z:", z)
|
||||||
update_my_position.emit(Vector3(x, y, z), Vector3(rx, ry, rz))
|
update_my_position.emit(tick, Vector3(x, y, z), Vector3(rx, ry, rz))
|
||||||
#self.set_player_position(Vector3(x, y, z))
|
#self.set_player_position(Vector3(x, y, z))
|
||||||
update_state(Connexion.CONNECTED)
|
update_state(Connexion.CONNECTED)
|
||||||
else: # KO
|
else: # KO
|
||||||
bad_account()
|
bad_account()
|
||||||
elif data[0] == 3: # Get position
|
elif command == 3: # Get position
|
||||||
if id == 0:
|
if id == 0:
|
||||||
return
|
return
|
||||||
var nb:int = data[1]
|
var nb:int = data.get_u8()
|
||||||
var pos:int = 2
|
var pos:int = 2
|
||||||
for i in nb:
|
for i in nb:
|
||||||
var mid:int = data.decode_u64(pos)
|
var mid:int = data.get_u64()
|
||||||
var mx:float = data.decode_double(pos+8)
|
var mx:float = data.get_f64()
|
||||||
var my:float = data.decode_double(pos+16)
|
var my:float = data.get_f64()
|
||||||
var mz:float = data.decode_double(pos+24)
|
var mz:float = data.get_f64()
|
||||||
var rx:float = data.decode_double(pos+32)
|
var rx:float = data.get_f64()
|
||||||
var ry:float = data.decode_double(pos+40)
|
var ry:float = data.get_f64()
|
||||||
var rz:float = data.decode_double(pos+48)
|
var rz:float = data.get_f64()
|
||||||
var tick:int = data.decode_u8(pos+56)
|
var tick:int = data.get_u8()
|
||||||
|
#for ii in range(56,74):
|
||||||
|
# var tick1:int = data.decode_u8(pos+ii)
|
||||||
|
# print("tick ", ii, " :", tick1)
|
||||||
pos += 57
|
pos += 57
|
||||||
if mid == id:
|
if mid == id:
|
||||||
#print("Me id:", mid, " x:", mx, " y:", my, " z:", mz)
|
#print("Me id:", mid, " x:", mx, " y:", my, " z:", mz)
|
||||||
continue
|
continue
|
||||||
print("pos:", pos, " id:", mid, " tick:", tick, " x:", mx, " y:", my, " z:", mz, " rx:", rx, " ry:", ry, " rz:", rz)
|
print("pos:", pos, " id:", mid, " tick:", tick, " x:", mx, " y:", my, " z:", mz, " rx:", rx, " ry:", ry, " rz:", rz)
|
||||||
update_player_position.emit(mid, Vector3(mx, my, mz), Vector3(rx, ry, rz))
|
update_player_position.emit(mid, tick, Vector3(mx, my, mz), Vector3(rx, ry, rz))
|
||||||
var nbuserremove:int = data[pos]
|
var nbuserremove:int = data.get_u8()
|
||||||
pos += 1
|
pos += 1
|
||||||
for i in nbuserremove:
|
for i in nbuserremove:
|
||||||
var mid = data.decode_u64(pos)
|
var mid = data.get_u64()
|
||||||
pos += 8
|
pos += 8
|
||||||
if mid == id:
|
if mid == id:
|
||||||
print("Try to remove me :", mid)
|
print("Try to remove me :", mid)
|
||||||
|
|
|
@ -159,7 +159,7 @@ impl User {
|
||||||
self.position_updated = false;
|
self.position_updated = false;
|
||||||
self.lasttime = Instant::now();
|
self.lasttime = Instant::now();
|
||||||
self.sendfull = 0;
|
self.sendfull = 0;
|
||||||
self.lastupdate = 0;
|
self.lastupdate = 1;
|
||||||
}
|
}
|
||||||
pub fn set_inactive(&mut self) {
|
pub fn set_inactive(&mut self) {
|
||||||
self.active = false;
|
self.active = false;
|
||||||
|
@ -361,7 +361,16 @@ impl Users {
|
||||||
pub fn add(&mut self, username:String, address: Address) -> u64 {
|
pub fn add(&mut self, username:String, address: Address) -> u64 {
|
||||||
let id = self.get_new_id();
|
let id = self.get_new_id();
|
||||||
self.player_active += 1;
|
self.player_active += 1;
|
||||||
self.users.push( User { active: true, username:username, address: address, id: id, x: 0.0, y: 10.0, z:0.0, rx: 0.0, ry: 0.0, rz:0.0, position_updated:true, lasttime: Instant::now(), sendfull:10, lastupdate:0} );
|
self.users.push( User { active: true,
|
||||||
|
username:username,
|
||||||
|
address: address,
|
||||||
|
id: id,
|
||||||
|
x: 0.0, y: 10.0, z:0.0,
|
||||||
|
rx: 0.0, ry: 0.0, rz:0.0,
|
||||||
|
position_updated:true,
|
||||||
|
lasttime: Instant::now(),
|
||||||
|
sendfull:10,
|
||||||
|
lastupdate:1} );
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
pub fn update_pos_rot(&mut self, address: Address, x:f64, y:f64, z:f64, rx:f64, ry:f64, rz:f64, tick:u8) {
|
pub fn update_pos_rot(&mut self, address: Address, x:f64, y:f64, z:f64, rx:f64, ry:f64, rz:f64, tick:u8) {
|
||||||
|
@ -743,7 +752,7 @@ fn main() -> anyhow::Result<()> {
|
||||||
let mut launch_cleanup : u8 = 60;
|
let mut launch_cleanup : u8 = 60;
|
||||||
let mut last_update:Instant = Instant::now();
|
let mut last_update:Instant = Instant::now();
|
||||||
let mut stat:Statistics = Statistics::new();
|
let mut stat:Statistics = Statistics::new();
|
||||||
let mut tick : u8 = 0;
|
let mut tick : u8 = 1;
|
||||||
|
|
||||||
if cli.trace {
|
if cli.trace {
|
||||||
loginit(LevelFilter::Trace).unwrap();
|
loginit(LevelFilter::Trace).unwrap();
|
||||||
|
@ -775,7 +784,7 @@ fn main() -> anyhow::Result<()> {
|
||||||
info!("Started");
|
info!("Started");
|
||||||
loop {
|
loop {
|
||||||
trace!("users: {}", users);
|
trace!("users: {}", users);
|
||||||
if tick == 255 {
|
if tick < 255 {
|
||||||
tick += 1;
|
tick += 1;
|
||||||
} else {
|
} else {
|
||||||
tick = 1;
|
tick = 1;
|
||||||
|
|
Loading…
Reference in a new issue