Added interactable
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
extends Node
|
||||
class_name Interactable
|
||||
|
||||
signal on_hit
|
||||
|
||||
func hit()->void:
|
||||
on_hit.emit()
|
||||
@@ -0,0 +1 @@
|
||||
uid://d1pa8ssvmxbn
|
||||
@@ -0,0 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://be7u1kn41g2ww"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d1pa8ssvmxbn" path="res://addons/interaction/interactable.gd" id="1_8h68r"]
|
||||
|
||||
[node name="Interactable" type="Area3D"]
|
||||
script = ExtResource("1_8h68r")
|
||||
@@ -0,0 +1,17 @@
|
||||
extends Node3D
|
||||
@onready var ray_cast: RayCast3D = $RayCast3D
|
||||
|
||||
const Interactable = preload("uid://d1pa8ssvmxbn")
|
||||
|
||||
@export var max_distance: float = 100
|
||||
|
||||
func _ready() -> void:
|
||||
ray_cast.target_position = Vector3(0,0,-max_distance)
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("interact"):
|
||||
if ray_cast.is_colliding():
|
||||
var collider = ray_cast.get_collider()
|
||||
if collider.get_script() == Interactable:
|
||||
var interactable: Interactable = collider
|
||||
interactable.hit()
|
||||
@@ -0,0 +1 @@
|
||||
uid://cqf6w5rp1hjcs
|
||||
@@ -0,0 +1,10 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dlryddjharg35"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cqf6w5rp1hjcs" path="res://addons/interaction/interaction_ray.gd" id="1_jlrgf"]
|
||||
|
||||
[node name="InteractionRay" type="Node3D"]
|
||||
script = ExtResource("1_jlrgf")
|
||||
|
||||
[node name="RayCast3D" type="RayCast3D" parent="."]
|
||||
target_position = Vector3(0, 0, -1)
|
||||
collide_with_areas = true
|
||||
Reference in New Issue
Block a user