78 lines
2.3 KiB
GDScript
78 lines
2.3 KiB
GDScript
extends Node2D
|
|
|
|
var all_targets = []
|
|
var targets_in_net = []
|
|
var grabbed_target = null
|
|
var boat_is_moving = false
|
|
var net_is_dropped = false
|
|
|
|
var fishing_target_packed_scene: PackedScene = preload("res://scenes/logic/fishing_target.tscn")
|
|
|
|
signal fished(name: String)
|
|
signal fished_all_targets
|
|
|
|
# Debug autostart
|
|
#func _ready():
|
|
# start_fishing_minigame(
|
|
# [{"name": "test1", "sprite": load("res://images/sprites/fishing_targets/test.png")}],
|
|
# 0.0,
|
|
# false,
|
|
# )
|
|
|
|
func _process(delta):
|
|
if boat_is_moving and net_is_dropped:
|
|
$ReleasedNet.position += Vector2.UP * 70.0 * delta
|
|
|
|
func play_sfx(sfx):
|
|
if $"../VNInterpreter".can_play_sfx():
|
|
#SoundManager.play("fishing_sfx", sfx)
|
|
SoundManager.play_varied("fishing_sfx", sfx, 1.0, FileGlobals.get_global_data("volume", 0.0))
|
|
|
|
func start_fishing_minigame(targets, difficulty, is_moving = false):
|
|
all_targets = targets
|
|
boat_is_moving = is_moving
|
|
if boat_is_moving:
|
|
$Background.play("fishing_moving")
|
|
else:
|
|
$Background.play("fishing_stopped")
|
|
$Net.visible = true
|
|
$Net/Button.disabled = false
|
|
for i in all_targets.size():
|
|
var target = fishing_target_packed_scene.instantiate()
|
|
target.init_target(i, all_targets[i]["sprite"], difficulty)
|
|
$FishingTargets.add_child(target)
|
|
|
|
func _on_net_dropped(dropped_position):
|
|
$ReleasedNet.play("default")
|
|
net_is_dropped = true
|
|
$ReleasedNet.position = dropped_position + 140 * Vector2.DOWN
|
|
$ReleasedNet.visible = true
|
|
$AnimationPlayer.play("drop_net")
|
|
|
|
func _on_animation_player_animation_finished(anim_name):
|
|
if anim_name == "drop_net":
|
|
play_sfx("net_splash")
|
|
$ReleasedNet.play("grab_underwater")
|
|
$ReleasedNet/DisappearTimer.start()
|
|
if targets_in_net.size() >= 1:
|
|
grabbed_target = targets_in_net.pop_back()
|
|
# Stop target's movement and set position to inside the net
|
|
grabbed_target.grab_with($ReleasedNet)
|
|
else:
|
|
grabbed_target = null
|
|
|
|
func _on_released_net_target_entered(target):
|
|
targets_in_net.append(target)
|
|
|
|
func _on_released_net_target_exited(target):
|
|
targets_in_net.erase(target)
|
|
|
|
func _on_released_net_disappear_timer_timeout():
|
|
if grabbed_target:
|
|
fished.emit(all_targets[grabbed_target.index]["name"])
|
|
if $FishingTargets.get_child_count() <= 1:
|
|
fished_all_targets.emit()
|
|
grabbed_target.queue_free()
|
|
grabbed_target = null
|
|
net_is_dropped = false
|
|
$ReleasedNet.visible = false
|