mirror of
https://github.com/csd4ni3l/fishy-fingers.git
synced 2026-03-10 08:59:17 +01:00
67 lines
2.0 KiB
GDScript
67 lines
2.0 KiB
GDScript
extends Sprite2D
|
|
var nearest_fish: Area2D
|
|
var last_eat = Time.get_ticks_msec()
|
|
var flip_timer: float = 0.0
|
|
var flip_delay: float = 0.15
|
|
var current_direction: Vector2 = Vector2.ZERO
|
|
|
|
func _process(delta: float) -> void:
|
|
if get_parent().get_meta("is_original", false):
|
|
return
|
|
|
|
var min_dist: float = INF
|
|
nearest_fish = null
|
|
for fish in get_node("/root/Main/fish_parent").get_children():
|
|
if not is_instance_of(fish, Area2D):
|
|
continue
|
|
var dist = global_position.distance_to(fish.global_position)
|
|
if dist < min_dist:
|
|
min_dist = dist
|
|
nearest_fish = fish
|
|
if not is_instance_valid(nearest_fish):
|
|
return
|
|
|
|
var chase = (nearest_fish.global_position - global_position).normalized()
|
|
|
|
var separation = Vector2.ZERO
|
|
for blahaj in get_node("/root/Main").get_children():
|
|
if blahaj == get_parent():
|
|
continue
|
|
if not blahaj.is_in_group("blahaj"):
|
|
continue
|
|
var diff = get_parent().global_position - blahaj.global_position
|
|
var dist = diff.length()
|
|
if dist < 100.0 and dist > 0.0:
|
|
separation += diff.normalized() * (100.0 - dist) / 100.0
|
|
|
|
# Blend chase and separation, separation weighted more when close
|
|
var desired = (chase + separation * 2.0).normalized()
|
|
|
|
# Smoothly steer current_direction toward desired
|
|
current_direction = current_direction.lerp(desired, 8.0 * delta).normalized()
|
|
|
|
var speed = Globals.BLAHAJ_SPEED
|
|
if separation.length() > 0.5:
|
|
speed *= 2.5
|
|
|
|
get_parent().position += current_direction * speed * delta
|
|
get_parent().rotation = 0.0
|
|
|
|
var target_scale_x = -1 if current_direction.x < 0 else 1
|
|
if target_scale_x != get_parent().scale.x:
|
|
flip_timer += delta
|
|
if flip_timer >= flip_delay:
|
|
get_parent().scale.x = target_scale_x
|
|
flip_timer = 0.0
|
|
else:
|
|
flip_timer = 0.0
|
|
|
|
if not Time.get_ticks_msec() - last_eat >= 500:
|
|
return
|
|
last_eat = Time.get_ticks_msec()
|
|
for area: Area2D in get_parent().get_overlapping_areas():
|
|
if area.is_in_group("fish"):
|
|
Globals.coins += (1 + Globals.sell_cost_upgrades)
|
|
Globals.fish_per_second += 1
|
|
area.queue_free()
|