61 lines
1.0 KiB
GDScript
61 lines
1.0 KiB
GDScript
class_name Interactable
|
|
extends Node
|
|
|
|
signal action_stoped
|
|
signal object_placed()
|
|
|
|
|
|
@export var area: Area3D
|
|
var build_name: String = "None"
|
|
|
|
|
|
var can_pick: bool
|
|
|
|
var can_store: bool
|
|
var stored_items: Array
|
|
|
|
var max_person_using
|
|
var persons_using: Array
|
|
var persons_position: Array
|
|
|
|
func start_action(person, object):
|
|
print("action!")
|
|
|
|
|
|
func stop_action(person, object):
|
|
person.is_in_action = false
|
|
var pose = find_pose(person)
|
|
pose.remove_person()
|
|
person.visible = true
|
|
action_stoped.emit()
|
|
|
|
func add_person_using(person):
|
|
persons_using.append(person)
|
|
|
|
func remove_person_using(person):
|
|
persons_using.erase(person)
|
|
|
|
|
|
func set_person_pos(person):
|
|
for pose in persons_position:
|
|
if pose.is_free:
|
|
pose.set_person(person)
|
|
break
|
|
|
|
|
|
func find_pose(person):
|
|
return persons_position[persons_position.find(person)]
|
|
|
|
func can_be_used():
|
|
var used_poses = 0
|
|
for pose in persons_position:
|
|
if !pose.is_free:
|
|
used_poses += 1
|
|
if used_poses < max_person_using:
|
|
return true
|
|
else:
|
|
return false
|
|
|
|
func create():
|
|
pass
|