51 lines
1.8 KiB
GDScript
51 lines
1.8 KiB
GDScript
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
|