64 lines
1.5 KiB
GDScript
64 lines
1.5 KiB
GDScript
extends Sprite2D
|
|
|
|
signal net_dropped(dropped_position: Vector2)
|
|
|
|
var sprite_rest = preload("res://images/sprites/fishing_net/ground.png")
|
|
var sprite_grabbed = preload("res://images/sprites/fishing_net/grabbed.png")
|
|
|
|
var can_move = false
|
|
var dragging = false
|
|
var using_mouse = false
|
|
var offs = Vector2.ZERO
|
|
var starting_position = Vector2.ZERO
|
|
|
|
func _ready():
|
|
starting_position = position
|
|
|
|
func _process(delta):
|
|
if not visible:
|
|
return
|
|
if can_move and Input.is_action_just_pressed("ui_accept"):
|
|
dragging = true
|
|
using_mouse = false
|
|
begin_dragging()
|
|
elif dragging and not using_mouse and Input.is_action_just_released("ui_accept"):
|
|
stop_dragging()
|
|
if dragging:
|
|
if using_mouse:
|
|
position = get_global_mouse_position() - offs
|
|
else:
|
|
position += Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") * delta * 400
|
|
|
|
func begin_dragging():
|
|
texture = sprite_grabbed
|
|
$Shadow.visible = true
|
|
$"..".play_sfx("net_picked_up")
|
|
if using_mouse:
|
|
offs = get_global_mouse_position() - global_position
|
|
else:
|
|
offs = Vector2.ZERO
|
|
|
|
func stop_dragging():
|
|
dragging = false
|
|
visible = false
|
|
$Shadow.visible = false
|
|
texture = sprite_rest
|
|
$Button.disabled = true
|
|
$ResetTimer.start()
|
|
net_dropped.emit(position)
|
|
position = starting_position
|
|
|
|
func _on_button_down():
|
|
dragging = true
|
|
using_mouse = true
|
|
begin_dragging()
|
|
|
|
func _on_button_up():
|
|
stop_dragging()
|
|
|
|
func _on_reset_timer_timeout():
|
|
texture = sprite_rest
|
|
$Button.disabled = false
|
|
visible = true
|
|
if can_move:
|
|
$"..".play_sfx("net_returns")
|