47 lines
1.5 KiB
GDScript
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
|