game/player.gd

47 lines
1.5 KiB
GDScript

extends CharacterBody3D
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
var speed = 4.0 # movement speed
var jump_speed = 6.0 # determines jump height
var mouse_sensitivity = 0.002 # turning speed
var moving = false
var player_id
func get_input():
var input = Input.get_vector("strafe_left", "strafe_right", "move_forward", "move_back")
var movement_dir = transform.basis * Vector3(input.x, 0, input.y)
velocity.x = movement_dir.x * speed
velocity.z = movement_dir.z * speed
func _ready():
player_id = str(name).to_int()
$MultiplayerSynchronizer.set_multiplayer_authority(player_id)
if player_id == multiplayer.get_unique_id():
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
var camera = Camera3D.new()
$SpringArm3D.add_child(camera)
func _physics_process(delta):
if player_id != multiplayer.get_unique_id():
return
velocity.y += -gravity * delta
get_input()
if abs(velocity.x) + abs(velocity.z) > 0 && !moving:
get_node("PlayerModel/AnimationPlayer").play("Walk")
moving = true
elif abs(velocity.x) + abs(velocity.z) == 0 && moving:
get_node("PlayerModel/AnimationPlayer").play("Idle")
moving = false
move_and_slide()
#mouse input stuff
func _unhandled_input(event):
if player_id != multiplayer.get_unique_id():
return
if event is InputEventMouseMotion:
rotate_y(-event.relative.x * mouse_sensitivity)
get_node("SpringArm3D").rotate_x(-event.relative.y * mouse_sensitivity)
if event.is_action_pressed("jump") and is_on_floor():
velocity.y = jump_speed