2020-01-16 09:44:44 +01:00
|
|
|
extends KinematicBody2D
|
|
|
|
|
|
|
|
|
|
|
|
var face: GSTFace
|
|
|
|
var agent := GSTSteeringAgent.new()
|
|
|
|
|
|
|
|
var _accel := GSTTargetAcceleration.new()
|
2020-01-16 18:31:02 +01:00
|
|
|
var _angular_drag := 0.1
|
2020-01-16 09:44:44 +01:00
|
|
|
var _cannon: Rect2
|
2020-02-03 17:07:43 +01:00
|
|
|
var _color: Color
|
2020-01-16 09:44:44 +01:00
|
|
|
|
|
|
|
onready var collision_shape := $CollisionShape2D
|
|
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
var radius = collision_shape.shape.radius
|
|
|
|
_cannon = Rect2(Vector2(-5, 0), Vector2(10, -radius*2))
|
2020-02-03 17:07:43 +01:00
|
|
|
_color = collision_shape.outer_color
|
2020-01-16 09:44:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
|
|
_accel = face.calculate_steering(_accel)
|
2020-01-22 17:55:49 +01:00
|
|
|
agent.angular_velocity = clamp(
|
|
|
|
agent.angular_velocity + _accel.angular,
|
|
|
|
-agent.angular_speed_max,
|
|
|
|
agent.angular_speed_max
|
|
|
|
)
|
2020-01-16 09:44:44 +01:00
|
|
|
agent.angular_velocity = lerp(agent.angular_velocity, 0, _angular_drag)
|
|
|
|
agent.orientation += agent.angular_velocity * delta
|
|
|
|
rotation = agent.orientation
|
|
|
|
|
|
|
|
|
|
|
|
func _draw() -> void:
|
2020-02-03 17:07:43 +01:00
|
|
|
draw_rect(_cannon, _color)
|
2020-01-16 09:44:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
func setup(
|
|
|
|
player_agent: GSTAgentLocation,
|
|
|
|
align_tolerance: float,
|
|
|
|
deceleration_radius: float,
|
2020-01-22 17:55:49 +01:00
|
|
|
angular_accel_max: float,
|
|
|
|
angular_speed_max: float
|
2020-01-16 09:44:44 +01:00
|
|
|
) -> void:
|
|
|
|
face = GSTFace.new(agent, player_agent)
|
|
|
|
|
|
|
|
face.alignment_tolerance = align_tolerance
|
|
|
|
face.deceleration_radius = deceleration_radius
|
|
|
|
|
2020-01-22 17:55:49 +01:00
|
|
|
agent.angular_acceleration_max = angular_accel_max
|
|
|
|
agent.angular_speed_max = angular_speed_max
|
2020-01-16 09:44:44 +01:00
|
|
|
agent.position = Vector3(global_position.x, global_position.y, 0)
|
|
|
|
|