87 lines
2.9 KiB
GDScript
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
|