CrossingOver/scenes/screens/fishing_minigame.gd
2024-03-14 00:53:46 -03:00

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