projektluzid/player.gd

87 lines
2.9 KiB
GDScript

extends RigidBody3D
# Configure options
var mouse_sensitivity := 0.001
var twist_input := 0.0
var pitch_input := 0.0
#@onready var levelcore = get_node("/root/Level_Core/LevelCore")
# Do not touch this part of the code
@onready var twist_pivot := $TwistPivot
@onready var pitch_pivot := $TwistPivot/PitchPivot
var levelcore: Node
var checkpoint: Vector3
func _ready() -> void:
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
while not get_node_or_null("/Level_Core/LevelCore"):
await get_tree().process_frame # Yield until the next frame
levelcore = get_node("/Level_Core/LevelCore")
checkpoint = levelcore.checkpoint
var player = get_node("/player/Player")
# If touches object
var touched = false
func teleport_to_checkpoint():
if levelcore.has_variable(checkpoint):
var target_position = levelcore.checkpoint
global_transform.origin = target_position
print("teleport to ", target_position, " successful")
else:
print("checkpoint ", checkpoint, " does not exist")
func _integrate_forces(state):
while not get_node_or_null("/root/Level_Core/LevelCore"):
await get_tree().process_frame
levelcore = get_node("/root/Level_Core/LevelCore")
print("levelcore set!")
for i in range(state.get_contact_count()):
var collider = state.get_contact_collider_object(i)
if collider is StaticBody3D and collider.name == "StaticBody3D_S1":
checkpoint = levelcore.checkpoint1
print("chat we hit the checkpoint one")
#func _integrate_forces(state):
# for i in range(state.get_contact_count()):
# var collider = state.get_contact_collider_object(i)
# print("Collided with: ", collider)
# print("Name: ", collider.name)
# if collider is StaticBody3D and collider.name == "StaticBody3D_S1":
# touched = true
# print(">>> MATCH! <<<")
#func _integrate_forces(state):
# for i in range(state.get_contact_count()):
# var collider = state.get_contact_collider_object(i)
# print("Collision with: ", collider)
# if collider:
# print("Name: ", collider.name)
func _process(delta: float) -> void:
var input := Vector3.ZERO
input.x = Input.get_axis("move_left", "move_right")
input.z = Input.get_axis("move_forward", "move_back")
# apply_central_force(twist_pivot.basis * input * 3000.0 * delta)
apply_central_force(twist_pivot.basis * input * 6000.0 * delta)
if Input.is_action_just_pressed("proluz_ui_pause"):
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
if Input.is_action_just_pressed("proluz_ui_grab"):
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
twist_pivot.rotate_y(twist_input)
pitch_pivot.rotate_x(pitch_input)
pitch_pivot.rotation.x = clamp(pitch_pivot.rotation.x, deg_to_rad(-50), deg_to_rad(50))
twist_input = 0.0
pitch_input = 0.0
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventMouseMotion:
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
twist_input = - event.relative.x * mouse_sensitivity
pitch_input = - event.relative.y * mouse_sensitivity