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