pandemonium_demo_projects/3d/rigidbody_character/player/cubio.gd

40 lines
1.1 KiB
GDScript

extends RigidBody
onready var raycast = $RayCast
onready var camera = $Target/Camera
onready var start_position = translation
func _physics_process(_delta):
if Input.is_action_just_pressed("exit"):
get_tree().quit()
if Input.is_action_just_pressed("reset_position"):
translation = start_position
return
var dir = Vector3()
dir.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
dir.z = Input.get_action_strength("move_back") - Input.get_action_strength("move_forward")
# Get the camera's transform basis, but remove the X rotation such
# that the Y axis is up and Z is horizontal.
var cam_basis = camera.global_transform.basis
var basis = cam_basis.rotated(cam_basis.x, -cam_basis.get_euler().x)
dir = basis.xform(dir)
apply_central_impulse(dir.normalized() / 10)
# Jumping code.
if on_ground() and Input.is_action_pressed("jump"):
apply_central_impulse(Vector3.UP)
# Test if there is a body below the player.
func on_ground():
if raycast.is_colliding():
return true
func _on_tcube_body_entered(body):
if body == self:
get_node("WinText").show()