godot-steering-ai-framework/project/demos/seek_and_flee/Seeker.gd
Nathan Lovato 8fb4f4c51a Replace multiline comments with comment blocks
The use of multiline blocks in GDSCript for comments leaves them in the
final compiled file, increasing size and potentially processing for no
end-user gain.
2020-01-12 10:21:43 -05:00

52 lines
1.3 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 collision_shape: = $CollisionShape2D
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)
onready var _active_behavior: = seek
var player_agent: GSTAgentLocation
var velocity: = Vector2.ZERO
var speed: float
var color: Color
var radius: = 0.0
func _ready() -> void:
agent.max_linear_acceleration = speed/10
agent.max_linear_speed = speed
radius = collision_shape.shape.radius
func _draw() -> void:
draw_circle(Vector2.ZERO, radius, color)
func _physics_process(delta: float) -> void:
if not player_agent:
return
_update_agent()
accel = _active_behavior.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)
func _on_GUI_mode_changed(mode: int) -> void:
if mode == 0:
_active_behavior = seek
else:
_active_behavior = flee