cirnogodot/addons/tattomoosa.vision_cone_3d/examples/example_src/VisionConeDemoControls.gd

71 lines
2.8 KiB
GDScript3
Raw Normal View History

2025-06-27 15:06:33 +02:00
extends PanelContainer
@export var vision_cone : VisionCone3D
@export var cameras : Array[Camera3D] = []
@onready var vision_test_center_checkbox : CheckBox = %VisionTestCenterCheckBox
@onready var vision_test_scatter_checkbox : CheckBox = %VisionTestScatterCheckBox
@onready var raycast_count_slider : Slider = %RaycastsPerFrameSlider
@onready var angle_slider : Slider = %AngleSlider
@onready var range_slider : Slider = %RangeSlider
@onready var rotation_slider : Slider = %ObserverRotationSlider
@onready var position_slider : Slider = %ObserverPositionSlider
@onready var max_bodies_slider : Slider = %MaxBodiesSlider
@onready var switch_camera_button : Button = %SwitchCameraButton
func _ready():
vision_test_center_checkbox.toggled.connect(_set_center)
vision_test_scatter_checkbox.toggled.connect(_set_scatter)
raycast_count_slider.value_changed.connect(func(value: float): vision_cone.vision_test_shape_max_probe_count = value)
angle_slider.value_changed.connect(func(value: float): vision_cone.angle = value)
range_slider.value_changed.connect(func(value: float): vision_cone.range = value)
rotation_slider.value_changed.connect(func(value: float): vision_cone.get_parent().rotation_degrees.y = -value)
position_slider.value_changed.connect(func(value: float): vision_cone.get_parent().position.x = value)
max_bodies_slider.value_changed.connect(func(value: float): vision_cone.vision_test_max_body_count = value)
if cameras.is_empty():
switch_camera_button.hide()
else:
cameras[0].current = true
switch_camera_button.text = "Current Camera: " + cameras[0].name
switch_camera_button.pressed.connect(
func():
for i in cameras.size():
var cam := cameras[i]
if cam.current:
cam.current = false
var next_cam : Camera3D
if (i + 1) < cameras.size():
next_cam = cameras[i + 1]
else:
next_cam = cameras[0]
next_cam.current = true
switch_camera_button.text = "Current Camera: " + next_cam.name
return
)
angle_slider.value = vision_cone.angle
range_slider.value = vision_cone.range
max_bodies_slider.value = vision_cone.vision_test_max_body_count
raycast_count_slider.value = vision_cone.vision_test_shape_max_probe_count
if vision_cone.get_parent() is CharacterBody3D:
vision_cone.get_parent().rotation_degrees.y = -rotation_slider.value
vision_cone.get_parent().position.x = position_slider.value
else:
rotation_slider.get_parent().hide()
position_slider.get_parent().hide()
_set_center(vision_test_center_checkbox.button_pressed)
_set_scatter(vision_test_scatter_checkbox.button_pressed)
size.y = 0
func _set_center(value: bool):
if !value:
return
vision_cone.vision_test_mode = VisionCone3D.VisionTestMode.SAMPLE_CENTER
func _set_scatter(value: bool):
if !value:
return
vision_cone.vision_test_mode = VisionCone3D.VisionTestMode.SAMPLE_RANDOM_VERTICES