godot-steering-ai-framework/project/demos/SeekFlee/Seeker.gd
Francois Belair 57f3c4a24a Make calculate_acceleration return void
This makes the code more in line with GDQuest gdscript guidelines about
 not both transforming state and returning a value.
2020-02-06 14:46:21 -05:00

41 lines
1.0 KiB
GDScript

extends KinematicBody2D
# AI agent that uses the Seek behavior to hone in on the player's location as directly as possible.
var player_agent: GSTAgentLocation
var velocity := Vector2.ZERO
var start_speed: float
var start_accel: float
var use_seek := true
onready var agent := GSTSteeringAgent.new()
onready var accel := GSTTargetAcceleration.new()
onready var seek := GSTSeek.new(agent, player_agent)
onready var flee := GSTFlee.new(agent, player_agent)
func _ready() -> void:
agent.linear_acceleration_max = start_accel
agent.linear_speed_max = start_speed
func _physics_process(delta: float) -> void:
if not player_agent:
return
_update_agent()
if use_seek:
seek.calculate_steering(accel)
else:
flee.calculate_steering(accel)
velocity = (velocity + Vector2(accel.linear.x, accel.linear.y)).clamped(agent.linear_speed_max)
velocity = move_and_slide(velocity)
func _update_agent() -> void:
agent.position.x = global_position.x
agent.position.y = global_position.y
agent.linear_velocity.x = velocity.x
agent.linear_velocity.y = velocity.y