immersive-home/app/content/system/trash_bin/trash_bin.gd

86 lines
1.7 KiB
GDScript3
Raw Normal View History

2024-05-09 13:40:41 +03:00
extends Node3D
const Entity = preload ("res://content/entities/entity.gd")
@onready var trash_bin = $trash_bin
@onready var bin_area = $trash_bin/Area3D
@onready var delete_sound = $DeleteSound
@onready var animation = $AnimationPlayer
var to_delete = []
var trash_bin_visible: bool = true:
set(value):
if trash_bin_visible == value:
return
if value:
add_child(trash_bin)
else:
if animation.is_playing():
await animation.animation_finished
remove_child(trash_bin)
trash_bin_visible = value
var trash_bin_large: bool = false:
set(value):
if trash_bin_large == value:
return
if value:
animation.play("add_trashbin")
else:
animation.play_backwards("add_trashbin")
trash_bin_large = value
func _ready():
trash_bin_visible = false
EventSystem.on_grab_down.connect(func(event: EventPointer):
trash_bin_visible=_get_entity(event.target) != null
)
EventSystem.on_grab_move.connect(func(event):
if !trash_bin_visible:
return
var entity=_get_entity(event.target)
if entity is Entity&&bin_area.overlaps_body(entity):
if !to_delete.has(entity):
to_delete.append(entity)
trash_bin_large=true
else:
to_delete.erase(entity)
trash_bin_large=false
)
EventSystem.on_grab_up.connect(func(_event: EventPointer):
if !trash_bin_visible:
return
if to_delete.size() > 0:
delete_sound.play()
for entity in to_delete:
entity.get_parent().remove_child(entity)
2024-05-09 13:40:41 +03:00
entity.queue_free()
to_delete.clear()
trash_bin_large=false
trash_bin_visible=false
2024-05-22 19:38:28 +03:00
App.house.save_all_entities()
2024-05-09 13:40:41 +03:00
)
func _get_entity(node: Node):
if node is Entity:
return node
if node.get_parent() == null:
return null
return _get_entity(node.get_parent())