49 lines
1.1 KiB
GDScript
49 lines
1.1 KiB
GDScript
extends Node2D
|
|
class_name Dog
|
|
|
|
@onready var death_box = $DeathBox
|
|
|
|
var acquired_target : Bee = null
|
|
var target_timer : float = 0.0
|
|
@export var distracted : bool = false
|
|
|
|
func _ready():
|
|
death_box.connect("body_entered", Callable(self, "_on_body_entered"))
|
|
death_box.connect("body_exited", Callable(self, "_on_body_exited"))
|
|
|
|
func _process(delta):
|
|
if acquired_target:
|
|
target_timer += delta
|
|
|
|
# Look at the target
|
|
rotation = lerp_angle(rotation, rotation + get_angle_to(acquired_target.global_position), 0.5)
|
|
|
|
if target_timer > 3.0:
|
|
# Kill the target!
|
|
acquired_target.die()
|
|
acquired_target = null
|
|
target_timer = 0.0
|
|
return
|
|
|
|
|
|
func _on_body_entered(area):
|
|
if area.is_in_group("bee") and distracted == false:
|
|
if !acquired_target:
|
|
Log.pr("Acquired target")
|
|
target_timer = 0.0
|
|
acquired_target = area
|
|
|
|
if area.is_in_group("distractor"):
|
|
Log.pr("Distracted")
|
|
acquired_target = null
|
|
distracted = true
|
|
|
|
func _on_body_exited(area):
|
|
if area == acquired_target:
|
|
Log.pr("Lost target")
|
|
acquired_target = null
|
|
target_timer = 0.0
|
|
|
|
if area.is_in_group("distractor"):
|
|
Log.pr("No longer distracted")
|
|
distracted = false
|