47 lines
1.5 KiB
GDScript
47 lines
1.5 KiB
GDScript
extends RigidBody2D
|
|
|
|
var index = -1
|
|
var difficulty = 0.0
|
|
var catched_by = null
|
|
var current_direction = Vector2.ZERO
|
|
var minimum_speed = 0.0
|
|
|
|
func init_target(target_index, target_sprite, fishing_difficulty):
|
|
index = target_index
|
|
difficulty = fishing_difficulty
|
|
global_position = Vector2(randf_range(100, 700), randf_range(100, 340))
|
|
$Sprite2D.texture = target_sprite
|
|
minimum_speed = lerp(5.0, 150.0, difficulty)
|
|
linear_velocity = Vector2(0.5 - randf(), 0.5 - randf()).normalized() * 2 * minimum_speed
|
|
change_direction(true)
|
|
|
|
func _process(delta):
|
|
if catched_by:
|
|
global_position = catched_by.global_position
|
|
else:
|
|
if linear_velocity.length() < minimum_speed:
|
|
linear_velocity *= 1.25
|
|
if constant_force.length() > 5 * minimum_speed:
|
|
constant_force *= 0.5
|
|
else:
|
|
add_constant_central_force(current_direction * delta)
|
|
|
|
func change_direction(init: bool = false):
|
|
current_direction = (Vector2(400, 220) - global_position) \
|
|
.rotated(deg_to_rad(randf_range(-30, 30))) \
|
|
.normalized() * lerp(0.0, 40.0, difficulty)
|
|
apply_torque_impulse(randf_range(-1.0, 1.0) * difficulty)
|
|
# This conditional only exists because Godot is weird with Timers
|
|
if init:
|
|
$MovementTimer.wait_time = randf_range(2.0, 4.0)
|
|
$MovementTimer.autostart = true
|
|
else:
|
|
$MovementTimer.start(randf_range(2.0, 4.0))
|
|
|
|
func _on_movement_timer_timeout():
|
|
change_direction()
|
|
|
|
func grab_with(net_sprite_2d: AnimatedSprite2D):
|
|
catched_by = net_sprite_2d
|
|
$MovementTimer.paused = true
|
|
global_position = catched_by.global_position
|