mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2025-12-16 13:30:07 +01:00
31 lines
1.2 KiB
GDScript
31 lines
1.2 KiB
GDScript
extends Node3D
|
|
|
|
|
|
const Character = preload("res://character.gd")
|
|
|
|
var _cam_rotation := 0.0
|
|
|
|
@onready var _camera := $CameraBase/Camera3D as Camera3D
|
|
@onready var _robot := $RobotBase as Character
|
|
|
|
|
|
func _unhandled_input(input_event: InputEvent) -> void:
|
|
if input_event is InputEventMouseButton and input_event.button_index == MOUSE_BUTTON_LEFT and input_event.pressed:
|
|
# Get closest point on navmesh for the current mouse cursor position.
|
|
var mouse_cursor_position: Vector2 = input_event.position
|
|
var camera_ray_length := 1000.0
|
|
var camera_ray_start := _camera.project_ray_origin(mouse_cursor_position)
|
|
var camera_ray_end := camera_ray_start + _camera.project_ray_normal(mouse_cursor_position) * camera_ray_length
|
|
|
|
var closest_point_on_navmesh := NavigationServer3D.map_get_closest_point_to_segment(
|
|
get_world_3d().navigation_map,
|
|
camera_ray_start,
|
|
camera_ray_end
|
|
)
|
|
_robot.set_target_position(closest_point_on_navmesh)
|
|
|
|
elif input_event is InputEventMouseMotion:
|
|
if input_event.button_mask & (MOUSE_BUTTON_MASK_MIDDLE + MOUSE_BUTTON_MASK_RIGHT):
|
|
_cam_rotation -= input_event.screen_relative.x * 0.005
|
|
$CameraBase.set_rotation(Vector3.UP * _cam_rotation)
|