Files
hdheist/Player.gd
T
2024-03-30 23:01:14 +01:00

64 lines
2.0 KiB
GDScript

extends CharacterBody3D
const SPEED = 5.0
const JUMP_VELOCITY = 4.5
var synced_position := Vector3.ZERO
var synced_rotation := Vector3.ZERO
# Get the gravity from the project settings to be synced with RigidDynamicBody nodes.
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
var has_control = false
func _ready():
has_control = name == str(multiplayer.get_unique_id())
print( 'I am ' + str(multiplayer.get_unique_id()))
print( 'or ' + str(multiplayer.get_remote_sender_id()))
has_control = !Globals.is_server
if Globals.is_server == false && has_control:
print ( 'Taking control!')
get_node("Camera3D").current = true
func _physics_process(delta):
if not has_control:
position = synced_position
rotation = synced_rotation
return
# Add the gravity.
if not is_on_floor():
velocity.y -= gravity * delta
# Handle Jump.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
var input_dir = Input.get_vector("strafe_left", "strafe_right", "move_forward", "move_backward")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
move_and_slide()
if Input.is_action_pressed("look_left"):
rotation.y += 0.02
if Input.is_action_pressed("look_right"):
rotation.y -= 0.02
rpc_id(1, StringName('update_server'), position, rotation)
#update_server(position, rotation).rpc()
@rpc("any_peer", "call_remote", "unreliable_ordered")
func update_server(pos: Vector3, rot: Vector3):
if not multiplayer.is_server():
return
#if name != str(multiplayer.get_remote_sender_id()):
##print ("foei?")
#return
synced_position = pos
synced_rotation = rot