123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- extends KinematicBody
- var gravity = Vector3.DOWN * 12 # strength of gravity
- var speed = 4 # movement speed
- var jump_speed = 6 # jump strength
- var spin = 0.1 # rotation speed
- var velocity = Vector3()
- var jump = false
- var old_pos = Vector3()
- var since_last_post = 0
- var post_interval = 250
- func get_input():
- var vy = velocity.y
- velocity = Vector3()
- if Input.is_action_pressed("move_forward"):
- velocity += -transform.basis.z * speed
- if Input.is_action_pressed("move_back"):
- velocity += transform.basis.z * speed
- if Input.is_action_pressed("strafe_right"):
- velocity += transform.basis.x * speed
- if Input.is_action_pressed("strafe_left"):
- velocity += -transform.basis.x * speed
- velocity.y = vy
-
- if Input.is_action_pressed("rotate_ccw"):
- $CameraHub.rotate_y(0.01)
- if Input.is_action_pressed("rotate_cw"):
- $CameraHub.rotate_y(-0.01)
-
- jump = false
- if Input.is_action_just_pressed("jump"):
- jump = true
- func _physics_process(delta):
- velocity += gravity * delta
- get_input()
- if jump and is_on_floor():
- velocity.y = jump_speed
- velocity = move_and_slide(velocity, Vector3.UP)
-
- func _unhandled_input(event):
- if event is InputEventMouseMotion:
- if event.relative.x > 0:
- rotate_y(-lerp(0, spin, event.relative.x/10))
- elif event.relative.x < 0:
- rotate_y(-lerp(0, spin, event.relative.x/10))
- func _process(delta):
- since_last_post += delta
- if since_last_post >= post_interval/1000 and get_tree().has_network_peer():
- if old_pos != self.get_global_transform().origin or since_last_post >= post_interval/100:
- rpc_id(0, "setTarget", get_tree().get_network_unique_id(), self.get_global_transform())
- old_pos = self.get_global_transform().origin
- since_last_post = 0
- remote func setTarget(id, trans):
- get_node("../RemotePlayers/Player "+str(id)).set_target(trans)
|