extends Marker3D const DotScene = preload ("res://content/system/dot/dot.tscn") const Entity = preload ("res://content/entities/entity.gd") @onready var dots = $"../Small/Dots" @onready var main = $"/root/Main" var active_type = null var editing = R.state([]) var group_entity = null var house_small = null func _ready(): await House.body.ready # Update Group Entity R.effect(func(_arg): if house_small.value == false||editing.value.size() == 0: if group_entity != null: remove_child(group_entity) group_entity.queue_free() group_entity=null elif group_entity == null: var id=HomeApi.groups.create(editing.value.map(func(entity): return entity.entity_id)) group_entity=EntityFactory.create_entity(id, active_type) for entity_node in group_entity.get_children(): if entity_node is Movable: entity_node.disabled=true group_entity.transform=Transform3D().looking_at(to_local((main.camera.global_position)), Vector3.UP, true) add_child(group_entity) else: HomeApi.groups.update_entities(group_entity.entity_id, editing.value.map(func(entity): return entity.entity_id)) ) var dots_disabled = R.computed(func(_arg): return House.body.mini_view.small.value == false ) # Update Entities R.effect(func(_arg): if House.body.loaded.value == false: return if Store.house.state.entities.size() == 0: return for old_dot in dots.get_children(): dots.remove_child(old_dot) old_dot.free() for room in House.body.get_rooms(0): for entity in room.get_node("Entities").get_children(): var dot=DotScene.instantiate() dot.position=House.body.to_local(entity.global_position) dot.entity=entity dot.active=R.computed(func(_arg2): return editing.value.has(entity) ) dot.disabled=dots_disabled dots.add_child(dot) ) func selection_active(): return editing.value.size() > 0 func toggle(entity: Entity): if active_type == null: active_type = entity.entity_id.split(".")[0] elif active_type != entity.entity_id.split(".")[0]: return if editing.value.has(entity): editing.value.erase(entity) if editing.value.size() == 0: active_type = null else: editing.value.append(entity) editing.value = editing.value