pollen-not-included/scenes/scripts/dog.gd
Dan 2a9e78b52e Refactor: Added explicit typing and void return types
- Introduced explicit typing to variables and functions across multiple scripts for better code clarity.
- Specified 'void' as the return type for functions that do not return a value.
- Removed redundant code in some scripts.
2024-05-15 10:42:16 +01:00

64 lines
1.6 KiB
GDScript

extends Node2D
class_name Dog
@onready var death_box : Area2D = $DeathBox
@onready var outline : Sprite2D = $AreaHighlight
var acquired_target : Node2D = null
var target_timer : float = 0.0
@export var distracted : bool = false
var distracted_by : Node2D = null
func _ready() -> void:
death_box.connect("body_entered", Callable(self, "_on_body_entered"))
death_box.connect("body_exited", Callable(self, "_on_body_exited"))
func _process(delta : float) -> void:
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
if distracted_by:
# Look around
rotation = lerp_angle(rotation, rotation + get_angle_to(distracted_by.global_position), 0.5)
func show_outline() -> void:
outline.visible = true
func hide_outline() -> void:
outline.visible = false
func _on_body_entered(area : Node2D) -> void:
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
distracted_by = area
func _on_body_exited(area : Node2D) -> void:
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
distracted_by = null