extends CanvasGroup @export var entity_container : LayeredEntityContainer var can_plant : bool = false var held_packet : SeedpacketResource = null func _ready() -> void: LevelEventBus.state_changed.connect(on_level_state_changed) LevelEventBus.packet_deselected.connect(on_seedpacket_deselected) func _process(_delta: float) -> void: var mouse_pos = get_global_mouse_position() var indexified_mouse = FieldParams.indexify(mouse_pos - FieldParams.field_rect.position) if FieldParams.field_rect.has_point(mouse_pos) and entity_container.is_occupied(indexified_mouse,"base") == false: global_position = FieldParams.deindexify(indexified_mouse) + FieldParams.TILE / 2.0 + FieldParams.field_rect.position can_plant = true else: global_position = mouse_pos can_plant = false func _input(event: InputEvent) -> void: if held_packet != null and event.is_action_pressed("cancel_action"): stop_placement() if held_packet != null and can_plant and event.is_action_pressed("primary_action"): for child in get_children(): child.reparent(get_tree().current_scene.get_node("%Plants")) LevelEventBus.packet_placed.emit(held_packet) held_packet = null visible = false func on_seedpacket_selected(packet : SeedpacketResource) -> void: add_child(packet.scene.instantiate()) held_packet = packet visible = true func on_seedpacket_deselected(packet : SeedpacketResource) -> void: if packet == held_packet: stop_placement() func on_level_state_changed(state : LevelData.LevelStates) -> void: if state == LevelData.LevelStates.Game: LevelEventBus.state_changed.disconnect(on_level_state_changed) LevelEventBus.packet_selected.connect(on_seedpacket_selected) func stop_placement(): for child in get_children(): child.queue_free() held_packet = null visible = false