You could make the box only draggable when a flag has been set via the mouse_entered
event, then set that flag to false using mouse_exited
. Likewise, when you react to the mouse_entered
event, you could emit a signal to the player, setting a similar but opposite flag, i.e., when the box is draggable, the player can't shoot, and when the box is not draggable, the player can shoot.
Alternatively, instead of signals, you could create an autoloaded script, and store that state there, which would be accessible from both the player and box scripts.
player.gd
var can_shoot = false
func _ready():
connect_box_signals()
func connect_box_signals():
for box in get_tree().get_nodes_in_group("draggable_box"):
box.connect("toggle_player_shooting", self, "toggle_shooting")
func disable_shooting(enabled : bool):
can_shoot = enabled
func _unhandled_input(event):
if can_shoot && event is InputEventMouseButton && event.button_index == BUTTON_LEFT && event.pressed:
# shoot...
box.gd
signal toggle_player_shooting
var is_draggable = false
func _on_BoxArea_mouse_entered():
is_draggable = true
emit_signal("toggle_player_shooting", false)
func _on_BoxArea_mouse_exited():
is_draggable = false
emit_signal("toggle_player_shooting", true)
func _input_event(viewport, event, shape_idx):
if is_draggable && event is InputEventMouseButton && event.button_index == BUTTON_LEFT && event.pressed:
# drag or drop the box