generated from krampus/template-godot4
35 lines
785 B
GDScript
35 lines
785 B
GDScript
@tool
|
|
class_name WorldItem extends MeshInstance3D
|
|
## A collectable item in the world.
|
|
|
|
@export var item: Item:
|
|
set = _set_item
|
|
@export var interact_radius: float = 0.25:
|
|
set = _set_radius
|
|
|
|
@onready var interactive: Interactive = %Interactive
|
|
@onready var collision_shape_3d: CollisionShape3D = %CollisionShape3D
|
|
|
|
|
|
func _ready() -> void:
|
|
_set_item(item)
|
|
_set_radius(interact_radius)
|
|
|
|
|
|
func _set_item(value: Item) -> void:
|
|
item = value
|
|
if item and interactive:
|
|
interactive.label = item.name
|
|
|
|
|
|
func _set_radius(value: float) -> void:
|
|
interact_radius = value
|
|
if collision_shape_3d:
|
|
(collision_shape_3d.shape as SphereShape3D).radius = interact_radius
|
|
|
|
|
|
func _on_interactive_activated() -> void:
|
|
Player.instance.add_item(item)
|
|
# TODO: animation, sfx on collect?
|
|
queue_free()
|