mirror of
https://github.com/Relintai/godot-steering-ai-framework.git
synced 2024-11-10 00:52:10 +01:00
41 lines
1.1 KiB
GDScript
41 lines
1.1 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:
|
|
accel = seek.calculate_steering(accel)
|
|
else:
|
|
accel = 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
|