WIP: Migrating to node3ds

This commit is contained in:
Nikolai Rodionov 2025-02-09 23:05:59 +01:00
parent 95ee0542cf
commit 6441456788
Signed by: allanger
GPG Key ID: 09F8B434D0FDD99B
3 changed files with 27 additions and 16 deletions

View File

@ -20,22 +20,30 @@ func _process(delta):
# Record the latest server position with timestamp
global_rotation = owner_placeholder.global_rotation
var server_pos = owner_placeholder.global_transform.origin
pseudo_velocity = (server_pos - previous_position) / delta
previous_position = server_pos # Store for next frame
position_buffer.append([Time.get_ticks_msec() / 1000.0, server_pos])
# -- This code is 100% generated by chatGPT and I can't understand it fully yet
while position_buffer.size() > 2 and position_buffer[1][0] < (Time.get_ticks_msec() / 1000.0) - interpolation_delay:
position_buffer.pop_front()
if position_buffer.size() >= 2:
var t_now = (Time.get_ticks_msec() / 1000.0) - interpolation_delay
var prev_point = position_buffer[0]
var next_point = position_buffer[1]
var position_difference := global_position - owner_placeholder.global_position
if is_vector_a_lower_than_b(position_difference, Vector3(0.3, 0.3, 0.3)) and \
is_vector_a_lower_than_b(Vector3(-0.3, -0.3, -0.3), position_difference):
var server_pos = owner_placeholder.global_transform.origin
pseudo_velocity = (server_pos - previous_position) / delta
previous_position = server_pos # Store for next frame
position_buffer.append([Time.get_ticks_msec() / 1000.0, server_pos])
while position_buffer.size() > 2 and position_buffer[1][0] < (Time.get_ticks_msec() / 1000.0) - interpolation_delay:
position_buffer.pop_front()
if position_buffer.size() >= 2:
var t_now = (Time.get_ticks_msec() / 1000.0) - interpolation_delay
var prev_point = position_buffer[0]
var next_point = position_buffer[1]
var alpha = (t_now - prev_point[0]) / (next_point[0] - prev_point[0])
alpha = clamp(alpha, 0.0, 1.0)
global_transform.origin = prev_point[1].lerp(next_point[1], alpha)
var alpha = (t_now - prev_point[0]) / (next_point[0] - prev_point[0])
alpha = clamp(alpha, 0.0, 1.0)
global_transform.origin = prev_point[1].lerp(next_point[1], alpha)
else:
global_position = owner_placeholder.global_position
func _ready() -> void:
set_multiplayer_authority(multiplayer.get_unique_id())
@ -87,3 +95,6 @@ func _on_area_body_part_hit(damage: int) -> void:
owner_placeholder.take_damage(damage)
else:
push_warning("Node doesn't know how to take the damage")
func is_vector_a_lower_than_b(vec_a: Vector3, vec_b: Vector3) -> bool:
return vec_a.x < vec_b.x and vec_a.y < vec_b.y and vec_a.z < vec_b.z

View File

@ -769,7 +769,7 @@ fog_height = 15.06
script = ExtResource("1_10iai")
[node name="World" type="Node3D" parent="."]
transform = Transform3D(0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, 0, 0, 0)
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
[node name="Floor" type="Node3D" parent="World"]
transform = Transform3D(2, 0, 0, 0, 0.002625, -1.54869e-14, 0, 5.82867e-17, 0.697466, 12.1, -0.15, -4.9848)

View File

@ -62,7 +62,7 @@ func _physics_process(delta: float) -> void:
@rpc("authority", "call_remote", "unreliable_ordered")
func update_position(real_position: Vector3):
shared_node.global_position = lerp(shared_node.global_position, real_position, 2.0)
shared_node.global_position = lerp(shared_node.global_position, real_position, 1.0)
@rpc("any_peer", "call_local", "unreliable")
func jump():