@@ -6,7 +6,7 @@ var player_name: String
66var color : Color
77var ip : String
88var respawn_position : Vector3 = Vector3 (randf_range (700.0 , 705.0 ), 200.0 , randf_range (5.0 , 10.0 ))
9- var oldpos : Transform3D
9+ var old_position : Vector3
1010# Movement
1111var gravity = ProjectSettings .get_setting ("physics/3d/default_gravity" )
1212var movement_speed : float = 5.0
@@ -16,6 +16,10 @@ var speed: float
1616var jump_force : float = 6
1717# Rotation
1818var mouse_sensitivity : float = 4.0
19+ var old_rotation : Vector3
20+ var old_camera_arm_rotation
21+ # Zoom
22+ var old_camera_arm_scale
1923
2024@onready var camera_arm = $ "SpringArm3D"
2125@onready var camera = camera_arm .get_node ("Camera3D" )
@@ -30,7 +34,7 @@ func _ready():
3034func _physics_process (delta ):
3135
3236 if client_ready == true :
33- oldpos = global_transform
37+ # old_position = global_transform
3438
3539 # if u fall from map
3640 if position .y < - 20 :
@@ -89,33 +93,63 @@ func _physics_process(delta):
8993 velocity .z = move_toward (velocity .z , 0 , speed )
9094 move_and_slide ()
9195
92- # output_udp
93- var newpos = global_transform
94- if newpos .origin .distance_to (oldpos .origin ) > 0.00001 or newpos .basis != oldpos .basis :
95- oldpos = newpos
96- for p in get_node ("/root/main/players" ).get_children ():
97- if p .get_node (str (p .name )).client_ready == true :
98- var output_udp : Dictionary = {
99- "id" : int (str (name )),
100- "position" : position ,
101- "rotation" : rotation ,
102- "camera_arm_rotation" : camera_arm .rotation }
103- var output_udp_json_string : String = JSON .stringify (output_udp )
104- $ /root/main/net/server_to_client .send_output_to_client_unreliable .rpc_id (int (str (p .get_name ())), output_udp_json_string )
105- # print("send udp: " + str(output_udp_json_string))
96+ # UDP: add player_state_udp to states_udp
97+ var player_state_udp : Dictionary = {}
98+ if position .distance_to (old_position ) > 0.00001 : # only add if changed enough
99+ old_position = position
100+ player_state_udp ["position" ] = position
101+ if rotation != old_rotation : # only add if changed
102+ old_rotation = rotation
103+ player_state_udp ["rotation" ] = rotation
104+ if camera_arm .rotation != old_camera_arm_rotation : # only add if changed
105+ old_camera_arm_rotation = camera_arm .rotation
106+ player_state_udp ["camera_arm_rotation" ] = camera_arm .rotation
107+ if ! player_state_udp .is_empty (): # only add if not empty
108+ # if states_udp doesnt have player category add it to states_udp
109+ if ! get_node ("/root/main/net" ).states_udp .has ("player" ):
110+ get_node ("/root/main/net" ).states_udp ["player" ] = {}
111+ # add player_state to states_udp
112+ get_node ("/root/main/net" ).states_udp ["player" ][name ] = player_state_udp
113+
114+ # TCP: add player_state_tcp to states_tcp
115+ var player_state_tcp : Dictionary = {}
116+ if camera_arm .scale != old_camera_arm_scale : # only add if changed
117+ old_camera_arm_scale = camera_arm .scale
118+ player_state_tcp ["camera_arm_scale" ] = camera_arm .scale
119+ if ! player_state_tcp .is_empty (): # only add if not empty
120+ # if states_tcp doesnt have player category add it to states_udp
121+ if ! get_node ("/root/main/net" ).states_tcp .has ("player" ):
122+ get_node ("/root/main/net" ).states_tcp ["player" ] = {}
123+ # add player_state to states_tcp
124+ get_node ("/root/main/net" ).states_tcp ["player" ][name ] = player_state_tcp
125+
126+ # # output_udp
127+ # var newpos = global_transform
128+ # if newpos.origin.distance_to(oldpos.origin) >0.00001 or newpos.basis != oldpos.basis:
129+ # oldpos=newpos
130+ # for p in get_node("/root/main/players").get_children():
131+ # if p.get_node(str(p.name)).client_ready == true:
132+ # var output_udp: Dictionary = {
133+ # "id": int(str(name)),
134+ # "position": position,
135+ # "rotation": rotation,
136+ # "camera_arm_rotation": camera_arm.rotation}
137+ # var output_udp_json_string: String = JSON.stringify(output_udp)
138+ # $/root/main/net/server_to_client.send_output_to_client_unreliable.rpc_id(int(str(p.get_name())), output_udp_json_string)
139+ ## print("send udp: " + str(output_udp_json_string))
106140
107141 # output_tcp
108- if $ inputs .zoom != $ inputs .old_zoom :
109- $ inputs .old_zoom = $ inputs .zoom
110- for p in get_node ("/root/main/players" ).get_children ():
111- if p .get_node (str (p .name )).client_ready == true :
112- # Network.update_remote_states(int(str(self.name)))
113- var output_tcp : Dictionary = {
114- "id" : int (str (name )),
115- "camera_arm_scale" : camera_arm .scale }
116- var output_tcp_json_string : String = JSON .stringify (output_tcp )
117- $ /root/main/net/server_to_client .send_output_to_client_reliable .rpc_id (int (str (p .get_name ())), output_tcp_json_string )
118- # print("send tcp: " + str(output_tcp_json_string))
142+ # if $inputs.zoom != $inputs.old_zoom:
143+ # $inputs.old_zoom = $inputs.zoom
144+ # for p in get_node("/root/main/players").get_children():
145+ # if p.get_node(str(p.name)).client_ready == true:
146+ ## Network.update_remote_states(int(str(self.name)))
147+ # var output_tcp: Dictionary = {
148+ # "id": int(str(name)),
149+ # "camera_arm_scale": camera_arm.scale}
150+ # var output_tcp_json_string: String = JSON.stringify(output_tcp)
151+ # $/root/main/net/server_to_client.send_output_to_client_reliable.rpc_id(int(str(p.get_name())), output_tcp_json_string)
152+ ## print("send tcp: " + str(output_tcp_json_string))
119153
120154 # Reset inputs (only some, $inputs.zoom should keep its value)
121155 $ inputs .mouse_motion = Vector2 ()
0 commit comments