godot-steering-ai-framework/project/demos/Face/Turret.gd
Răzvan C. Rădulescu 1baed58659 Review smart agents
I made minimal changes, mostly cosmetic like so:

- rename KinematicMovementType to MovementType since
  GSTKinematicBody2DAgent.KinematicMovementType.COLLIDE for example is
  really more than a mouthful with repeated Kinematic in the name
- add optional movement_type parameter to the constructor, otherwise
  we'd be forced to construct the object and then specify as an
  aditional step the type of movement if we want something else than the
  default
- rewrote the constructor to yield on ready and removed _on_body_ready
- renamed _apply_steering to apply_steering as this is a public method
- renamed _on_SceneTree_frame to _on_SceneTree_physics_frame
2020-02-07 12:29:45 +02:00

45 lines
1.0 KiB
GDScript

extends KinematicBody2D
var face: GSTFace
var agent := GSTKinematicBody2DAgent.new(self)
var _accel := GSTTargetAcceleration.new()
var _angular_drag := 0.1
var _cannon: Rect2
var _color: Color
onready var collision_shape := $CollisionShape2D
func _ready() -> void:
var radius = collision_shape.shape.radius
_cannon = Rect2(Vector2(-5, 0), Vector2(10, -radius*2))
_color = collision_shape.outer_color
func _physics_process(delta: float) -> void:
face.calculate_steering(_accel)
agent.apply_steering(_accel, delta)
func _draw() -> void:
draw_rect(_cannon, _color)
func setup(
player_agent: GSTAgentLocation,
align_tolerance: float,
deceleration_radius: float,
angular_accel_max: float,
angular_speed_max: float
) -> void:
face = GSTFace.new(agent, player_agent)
face.alignment_tolerance = align_tolerance
face.deceleration_radius = deceleration_radius
agent.angular_acceleration_max = angular_accel_max
agent.angular_speed_max = angular_speed_max
agent.angular_drag_percentage = _angular_drag