mirror of
https://github.com/Relintai/godot-steering-ai-framework.git
synced 2024-12-24 05:37:15 +01:00
fb538b72cb
The GST namespace has been added to prevent class name conflicts, and the project has been reorganized to make extensions and purpose easier.
43 lines
1.0 KiB
GDScript
43 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.
|
|
"""
|
|
|
|
|
|
onready var radius: = ($CollisionShape2D.shape as CircleShape2D).radius
|
|
|
|
onready var agent: = GSTSteeringAgent.new()
|
|
onready var accel: = GSTTargetAcceleration.new()
|
|
onready var seek: = GSTSeek.new(agent, player_agent)
|
|
|
|
var player_agent: GSTAgentLocation
|
|
var velocity: = Vector2.ZERO
|
|
var speed: float
|
|
var color: Color
|
|
|
|
|
|
func _ready() -> void:
|
|
agent.max_linear_acceleration = speed/10
|
|
agent.max_linear_speed = speed
|
|
|
|
|
|
func _draw() -> void:
|
|
draw_circle(Vector2.ZERO, radius, color)
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
if not player_agent:
|
|
return
|
|
|
|
_update_agent()
|
|
accel = seek.calculate_steering(accel)
|
|
|
|
velocity = (velocity + Vector2(accel.linear.x, accel.linear.y)).clamped(agent.max_linear_speed)
|
|
velocity = move_and_slide(velocity)
|
|
if velocity.length_squared() > 0:
|
|
update()
|
|
|
|
|
|
func _update_agent() -> void:
|
|
agent.position = Vector3(global_position.x, global_position.y, 0)
|