Refactor var names for consistency aka min/max

This commit is contained in:
Francois Belair 2020-01-22 11:55:49 -05:00
parent 30a1a299d7
commit 8228694713
32 changed files with 209 additions and 202 deletions

View File

@ -1,8 +1,8 @@
extends Node2D
export(float, 0, 2000, 40) var max_linear_speed := 800.0 setget set_max_linear_speed
export(float, 0, 200, 2.0) var max_linear_acceleration := 80.0 setget set_max_linear_acceleration
export(float, 0, 2000, 40) var linear_speed_max := 800.0 setget set_linear_speed_max
export(float, 0, 200, 2.0) var linear_acceleration_max := 80.0 setget set_linear_acceleration_max
export(float, 0, 100, 0.1) var arrival_tolerance := 25.0 setget set_arrival_tolerance
export(float, 0, 500, 10) var deceleration_radius := 125.0 setget set_deceleration_radius
@ -16,8 +16,8 @@ onready var arriver := $Arriver
func _ready() -> void:
arriver.setup(
max_linear_speed,
max_linear_acceleration,
linear_speed_max,
linear_acceleration_max,
arrival_tolerance,
deceleration_radius
)
@ -51,17 +51,17 @@ func set_deceleration_radius(value: float) -> void:
arriver.arrive.deceleration_radius = value
func set_max_linear_speed(value: float) -> void:
max_linear_speed = value
func set_linear_speed_max(value: float) -> void:
linear_speed_max = value
if not is_inside_tree():
return
arriver.agent.max_linear_speed = value
arriver.agent.linear_speed_max = value
func set_max_linear_acceleration(value: float) -> void:
max_linear_acceleration = value
func set_linear_acceleration_max(value: float) -> void:
linear_acceleration_max = value
if not is_inside_tree():
return
arriver.agent.max_linear_acceleration = value
arriver.agent.linear_acceleration_max = value

View File

@ -14,18 +14,18 @@ func _physics_process(delta: float) -> void:
_update_agent()
_accel = arrive.calculate_steering(_accel)
_velocity += Vector2(_accel.linear.x, _accel.linear.y)
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag).clamped(agent.max_linear_speed)
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag).clamped(agent.linear_speed_max)
_velocity = move_and_slide(_velocity)
func setup(
max_linear_speed: float,
max_linear_acceleration: float,
linear_speed_max: float,
linear_acceleration_max: float,
arrival_tolerance: float,
deceleration_radius: float
) -> void:
agent.max_linear_speed = max_linear_speed
agent.max_linear_acceleration = max_linear_acceleration
agent.linear_speed_max = linear_speed_max
agent.linear_acceleration_max = linear_acceleration_max
agent.position = Vector3(global_position.x, global_position.y, 0)
arrive.deceleration_radius = deceleration_radius
arrive.arrival_tolerance = arrival_tolerance

View File

@ -1,28 +1,28 @@
extends Node2D
export(float, 0, 2000, 40) var max_linear_speed := 350.0 setget set_max_linear_speed
export(float, 0, 100, 2) var max_linear_acceleration := 40.0 setget set_max_linear_accel
export(float, 0, 2000, 40) var linear_speed_max := 350.0 setget set_linear_speed_max
export(float, 0, 100, 2) var linear_acceleration_max := 40.0 setget set_linear_accel_max
export(float, 0, 500, 10) var proximity_radius := 140.0 setget set_proximity_radius
export var draw_proximity := true setget set_draw_proximity
onready var spawner := $Spawner
func set_max_linear_speed(value: float) -> void:
max_linear_speed = value
func set_linear_speed_max(value: float) -> void:
linear_speed_max = value
if not is_inside_tree():
return
spawner.set_max_linear_speed(value)
spawner.set_linear_speed_max(value)
func set_max_linear_accel(value: float) -> void:
max_linear_acceleration = value
func set_linear_accel_max(value: float) -> void:
linear_acceleration_max = value
if not is_inside_tree():
return
spawner.set_max_linear_accel(value)
spawner.set_linear_accel_max(value)
func set_proximity_radius(value: float) -> void:

View File

@ -7,7 +7,6 @@
[node name="AvoidCollisionsDemo" type="Node2D"]
script = ExtResource( 2 )
max_linear_speed = 360.0
proximity_radius = 100.0
[node name="Spawner" type="Node2D" parent="."]

View File

@ -1,15 +1,6 @@
extends KinematicBody2D
onready var collision := $CollisionShape2D
onready var agent := GSTSteeringAgent.new()
onready var proximity := GSTRadiusProximity.new(agent, [], 140)
onready var avoid := GSTAvoidCollisions.new(agent, proximity)
onready var target := GSTAgentLocation.new()
onready var seek := GSTSeek.new(agent, target)
onready var priority := GSTPriority.new(agent, 0.0001)
onready var sprite := $Sprite
var draw_proximity: bool
var _boundary_right: float
@ -20,6 +11,15 @@ var _velocity := Vector2.ZERO
var _direction := Vector2()
var _drag: = 0.1
onready var collision := $CollisionShape2D
onready var agent := GSTSteeringAgent.new()
onready var proximity := GSTRadiusProximity.new(agent, [], 140)
onready var avoid := GSTAvoidCollisions.new(agent, proximity)
onready var target := GSTAgentLocation.new()
onready var seek := GSTSeek.new(agent, target)
onready var priority := GSTPriority.new(agent, 0.0001)
onready var sprite := $Sprite
func _draw() -> void:
if draw_proximity:
@ -31,13 +31,13 @@ func _physics_process(delta: float) -> void:
_accel = priority.calculate_steering(_accel)
_velocity += Vector2(_accel.linear.x, _accel.linear.y)
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag)
_velocity = _velocity.clamped(agent.max_linear_speed)
_velocity = _velocity.clamped(agent.linear_speed_max)
_velocity = move_and_slide(_velocity)
func setup(
max_linear_speed: float,
max_linear_accel: float,
linear_speed_max: float,
linear_accel_max: float,
proximity_radius: float,
boundary_right: float,
boundary_bottom: float,
@ -47,8 +47,8 @@ func setup(
rng.randomize()
_direction = Vector2(rng.randf_range(-1, 1), rng.randf_range(-1, 1)).normalized()
_update_agent()
agent.max_linear_speed = max_linear_speed
agent.max_linear_acceleration = max_linear_accel
agent.linear_speed_max = linear_speed_max
agent.linear_acceleration_max = linear_accel_max
proximity.radius = proximity_radius
_boundary_bottom = boundary_bottom
_boundary_right = boundary_right
@ -65,22 +65,22 @@ func set_proximity_agents(agents: Array) -> void:
proximity.agents = agents
func set_random_nonoverlapping_position(others: Array, min_distance_from_boundary: float) -> void:
func set_random_nonoverlapping_position(others: Array, distance_from_boundary_min: float) -> void:
var rng := RandomNumberGenerator.new()
rng.randomize()
var max_tries := max(100, others.size() * others.size())
while max_tries >= 0:
max_tries -= 1
var tries_max := max(100, others.size() * others.size())
while tries_max > 0:
tries_max -= 1
global_position.x = rng.randf_range(
min_distance_from_boundary, _boundary_right-min_distance_from_boundary
distance_from_boundary_min, _boundary_right-distance_from_boundary_min
)
global_position.y = rng.randf_range(
min_distance_from_boundary, _boundary_bottom-min_distance_from_boundary
distance_from_boundary_min, _boundary_bottom-distance_from_boundary_min
)
var done := true
for i in range(others.size()):
var other: Node2D = others[i]
if other.global_position.distance_to(position) <= _radius*2 + min_distance_from_boundary:
if other.global_position.distance_to(position) <= _radius*2 + distance_from_boundary_min:
done = false
if done:
break

View File

@ -18,8 +18,8 @@ func _ready() -> void:
var avoider := avoider_template.instance()
add_child(avoider)
avoider.setup(
owner.max_linear_speed,
owner.max_linear_acceleration,
owner.linear_speed_max,
owner.linear_acceleration_max,
owner.proximity_radius,
boundaries.x,
boundaries.y,
@ -39,14 +39,14 @@ func _physics_process(delta: float) -> void:
child.global_position = child.global_position.posmodv(boundaries)
func set_max_linear_speed(value: float) -> void:
func set_linear_speed_max(value: float) -> void:
for child in get_children():
child.agent.max_linear_speed = value
child.agent.linear_speed_max = value
func set_max_linear_accel(value: float) -> void:
func set_linear_accel_max(value: float) -> void:
for child in get_children():
child.agent.max_linear_acceleration = value
child.agent.linear_acceleration_max = value
func set_proximity_radius(value: float) -> void:

View File

@ -1,16 +1,16 @@
extends Node2D
export(int, 0, 359, 2) var angular_speed_max := 120 setget set_angular_speed_max
export(int, 0, 359, 2) var angular_accel_max := 10 setget set_angular_accel_max
export(int, 0, 180, 2) var align_tolerance := 5 setget set_align_tolerance
export(int, 0, 359, 2) var deceleration_radius := 45 setget set_deceleration_radius
export(float, 0, 1000, 40) var player_speed := 600.0 setget set_player_speed
onready var player := $Player
onready var gui := $GUI
onready var turret := $Turret
export(int, 0, 359, 2) var max_angular_speed := 120 setget set_max_angular_speed
export(int, 0, 359, 2) var max_angular_accel := 10 setget set_max_angular_accel
export(int, 0, 180, 2) var align_tolerance := 5 setget set_align_tolerance
export(int, 0, 359, 2) var deceleration_radius := 45 setget set_deceleration_radius
export(float, 0, 1000, 40) var player_speed := 600.0 setget set_player_speed
func _ready() -> void:
player.speed = player_speed
@ -18,8 +18,8 @@ func _ready() -> void:
player.agent,
deg2rad(align_tolerance),
deg2rad(deceleration_radius),
deg2rad(max_angular_accel),
deg2rad(max_angular_speed)
deg2rad(angular_accel_max),
deg2rad(angular_speed_max)
)
@ -39,20 +39,20 @@ func set_deceleration_radius(value: int) -> void:
turret.face.deceleration_radius = deg2rad(value)
func set_max_angular_accel(value: int) -> void:
max_angular_accel = value
func set_angular_accel_max(value: int) -> void:
angular_accel_max = value
if not is_inside_tree():
return
turret.agent.max_angular_acceleration = deg2rad(value)
turret.agent.angular_acceleration_max = deg2rad(value)
func set_max_angular_speed(value: int) -> void:
max_angular_speed = value
func set_angular_speed_max(value: int) -> void:
angular_speed_max = value
if not is_inside_tree():
return
turret.agent.max_angular_speed = deg2rad(value)
turret.agent.angular_speed_max = deg2rad(value)
func set_player_speed(value: float) -> void:

View File

@ -18,7 +18,11 @@ func _ready() -> void:
func _physics_process(delta: float) -> void:
_accel = face.calculate_steering(_accel)
agent.angular_velocity += _accel.angular
agent.angular_velocity = clamp(
agent.angular_velocity + _accel.angular,
-agent.angular_speed_max,
agent.angular_speed_max
)
agent.angular_velocity = lerp(agent.angular_velocity, 0, _angular_drag)
agent.orientation += agent.angular_velocity * delta
rotation = agent.orientation
@ -32,15 +36,15 @@ func setup(
player_agent: GSTAgentLocation,
align_tolerance: float,
deceleration_radius: float,
max_angular_accel: float,
max_angular_speed: 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.max_angular_acceleration = max_angular_accel
agent.max_angular_speed = max_angular_speed
agent.angular_acceleration_max = angular_accel_max
agent.angular_speed_max = angular_speed_max
agent.position = Vector3(global_position.x, global_position.y, 0)

View File

@ -1,8 +1,8 @@
extends Node2D
export(float, 0, 2000, 40) var max_linear_speed := 600.0 setget set_max_linear_speed
export(float, 0, 200, 10.0) var max_linear_acceleration := 40.0 setget set_max_linear_acceleration
export(float, 0, 2000, 40) var linear_speed_max := 600.0 setget set_linear_speed_max
export(float, 0, 200, 10.0) var linear_acceleration_max := 40.0 setget set_linear_acceleration_max
export(float, 0, 100, 0.1) var arrival_tolerance := 10.0 setget set_arrival_tolerance
export(float, 0, 500, 10) var deceleration_radius := 100.0 setget set_deceleration_radius
export(float, 0, 5, 0.1) var predict_time := 0.3 setget set_predict_time
@ -16,27 +16,27 @@ func _ready() -> void:
follower.setup(
path_offset,
predict_time,
max_linear_acceleration,
max_linear_speed,
linear_acceleration_max,
linear_speed_max,
deceleration_radius,
arrival_tolerance
)
func set_max_linear_speed(value: float) -> void:
max_linear_speed = value
func set_linear_speed_max(value: float) -> void:
linear_speed_max = value
if not is_inside_tree():
return
follower.agent.max_linear_speed = value
follower.agent.linear_speed_max = value
func set_max_linear_acceleration(value: float) -> void:
max_linear_acceleration = value
func set_linear_acceleration_max(value: float) -> void:
linear_acceleration_max = value
if not is_inside_tree():
return
follower.agent.max_linear_acceleration = value
follower.agent.linear_acceleration_max = value
func set_arrival_tolerance(value: float) -> void:

View File

@ -1,6 +1,11 @@
extends KinematicBody2D
var _velocity := Vector2.ZERO
var _accel := GSTTargetAcceleration.new()
var _valid := false
var _drag := 0.1
onready var agent := GSTSteeringAgent.new()
onready var path := GSTPath.new([
Vector3(global_position.x, global_position.y, 0),
@ -8,25 +13,20 @@ onready var path := GSTPath.new([
], true)
onready var follow := GSTFollowPath.new(agent, path, 0, 0)
var _velocity := Vector2.ZERO
var _accel := GSTTargetAcceleration.new()
var _valid := false
var _drag := 0.1
func setup(
path_offset: float,
predict_time: float,
max_accel: float,
max_speed: float,
accel_max: float,
speed_max: float,
decel_radius: float,
arrival_tolerance: float
) -> void:
owner.drawer.connect("path_established", self, "_on_Drawer_path_established")
follow.path_offset = path_offset
follow.prediction_time = predict_time
agent.max_linear_acceleration = max_accel
agent.max_linear_speed = max_speed
agent.linear_acceleration_max = accel_max
agent.linear_speed_max = speed_max
follow.deceleration_radius = decel_radius
follow.arrival_tolerance = arrival_tolerance
@ -37,7 +37,7 @@ func _physics_process(delta: float) -> void:
_accel = follow.calculate_steering(_accel)
_velocity += Vector2(_accel.linear.x, _accel.linear.y)
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag)
_velocity = _velocity.clamped(agent.max_linear_speed)
_velocity = _velocity.clamped(agent.linear_speed_max)
_velocity = move_and_slide(_velocity)

View File

@ -3,8 +3,8 @@ extends Node2D
onready var spawner := $Spawner
export(float, 0, 2000, 40.0) var max_linear_speed := 600.0 setget set_max_linear_speed
export(float, 0, 200, 2.0) var max_linear_accel := 40.0 setget set_max_linear_accel
export(float, 0, 2000, 40.0) var linear_speed_max := 600.0 setget set_linear_speed_max
export(float, 0, 200, 2.0) var linear_accel_max := 40.0 setget set_linear_accel_max
export(float, 0, 300, 2.0) var proximity_radius := 140.0 setget set_proximity_radius
export(float, 0, 10000, 100) var separation_decay_coefficient := 2000.0 setget set_separation_decay_coef
export(float, 0, 2, 0.1) var cohesion_strength := 0.1 setget set_cohesion_strength
@ -14,8 +14,8 @@ export var show_proximity_radius := true setget set_show_proximity_radius
func _ready() -> void:
spawner.setup(
max_linear_speed,
max_linear_accel,
linear_speed_max,
linear_accel_max,
proximity_radius,
separation_decay_coefficient,
cohesion_strength,
@ -24,20 +24,20 @@ func _ready() -> void:
)
func set_max_linear_speed(value: float) -> void:
max_linear_speed = value
func set_linear_speed_max(value: float) -> void:
linear_speed_max = value
if not is_inside_tree():
return
spawner.set_max_linear_speed(value)
spawner.set_linear_speed_max(value)
func set_max_linear_accel(value: float) -> void:
max_linear_accel = value
func set_linear_accel_max(value: float) -> void:
linear_accel_max = value
if not is_inside_tree():
return
spawner.set_max_linear_accel(value)
spawner.set_linear_accel_max(value)
func set_proximity_radius(value: float) -> void:

View File

@ -14,8 +14,8 @@ var _velocity := Vector2()
func setup(
max_linear_speed: float,
max_linear_accel: float,
linear_speed_max: float,
linear_accel_max: float,
proximity_radius: float,
separation_decay_coefficient: float,
cohesion_strength: float,
@ -24,8 +24,8 @@ func setup(
_color = Color(rand_range(0.5, 1), rand_range(0.25, 1), rand_range(0, 1))
$Sprite.modulate = _color
agent.max_linear_acceleration = max_linear_accel
agent.max_linear_speed = max_linear_speed
agent.linear_acceleration_max = linear_accel_max
agent.linear_speed_max = linear_speed_max
proximity = GSTRadiusProximity.new(agent, [], proximity_radius)
separation = GSTSeparation.new(agent, proximity)
@ -47,7 +47,7 @@ func _physics_process(delta: float) -> void:
acceleration = blend.calculate_steering(acceleration)
_velocity += Vector2(acceleration.linear.x, acceleration.linear.y)
_velocity = _velocity.linear_interpolate(Vector2.ZERO, 0.1)
_velocity = _velocity.clamped(agent.max_linear_speed)
_velocity = _velocity.clamped(agent.linear_speed_max)
move_and_slide(_velocity)

View File

@ -5,8 +5,8 @@ export var member: PackedScene
func setup(
max_linear_speed: float,
max_linear_accel: float,
linear_speed_max: float,
linear_accel_max: float,
proximity_radius: float,
separation_decay_coefficient: float,
cohesion_strength: float,
@ -20,8 +20,8 @@ func setup(
follower.position += Vector2(rand_range(-60, 60), rand_range(-60, 60))
followers.append(follower)
follower.setup(
max_linear_speed,
max_linear_accel,
linear_speed_max,
linear_accel_max,
proximity_radius,
separation_decay_coefficient,
cohesion_strength,
@ -37,14 +37,14 @@ func setup(
i.proximity.agents = agents
func set_max_linear_speed(value: float) -> void:
func set_linear_speed_max(value: float) -> void:
for child in get_children():
child.agent.max_linear_speed = value
child.agent.linear_speed_max = value
func set_max_linear_accel(value: float) -> void:
func set_linear_accel_max(value: float) -> void:
for child in get_children():
child.agent.max_linear_acceleration = value
child.agent.linear_acceleration_max = value
func set_proximity_radius(value: float) -> void:

View File

@ -2,18 +2,18 @@ extends KinematicBody2D
# Controls the player ship's movements based on player input.
onready var agent := GSTSteeringAgent.new()
export var thruster_strength := 175.0
export var side_thruster_strength := 10.0
export var max_velocity := 300.0
export var max_angular_velocity := 2.0
export var velocity_max := 300.0
export var angular_velocity_max := 2.0
export var angular_drag := 0.025
export var linear_drag := 0.025
var _linear_velocity := Vector2()
var _angular_velocity := 0.0
onready var agent := GSTSteeringAgent.new()
func _physics_process(delta: float) -> void:
var movement := _get_movement()
@ -21,7 +21,7 @@ func _physics_process(delta: float) -> void:
movement.x,
_angular_velocity,
side_thruster_strength,
max_angular_velocity,
angular_velocity_max,
angular_drag,
delta
)
@ -33,7 +33,7 @@ func _physics_process(delta: float) -> void:
Vector2.UP.rotated(rotation),
linear_drag,
thruster_strength,
max_velocity,
velocity_max,
delta
)
@ -45,14 +45,14 @@ func _calculate_angular_velocity(
horizontal_movement: float,
current_velocity: float,
thruster_strength: float,
max_velocity: float,
velocity_max: float,
ship_drag: float,
delta: float
) -> float:
var velocity := clamp(
current_velocity + thruster_strength * horizontal_movement * delta,
-max_velocity,
max_velocity
-velocity_max,
velocity_max
)
velocity = lerp(velocity, 0, ship_drag)
@ -66,7 +66,7 @@ func _calculate_linear_velocity(
facing_direction: Vector2,
ship_drag_coefficient: float,
strength: float,
max_speed: float,
speed_max: float,
delta: float
) -> Vector2:
var actual_strength := 0.0
@ -78,7 +78,7 @@ func _calculate_linear_velocity(
var velocity := current_velocity + facing_direction * actual_strength * delta
velocity = velocity.linear_interpolate(Vector2.ZERO, ship_drag_coefficient)
return velocity.clamped(max_speed)
return velocity.clamped(speed_max)
func _get_movement() -> Vector2:

View File

@ -1,8 +1,8 @@
extends Node2D
export(float, 0, 2000, 40) var max_linear_speed := 120.0 setget set_max_linear_speed
export(float, 0, 200, 2) var max_linear_accel := 10.0 setget set_max_linear_accel
export(float, 0, 2000, 40) var linear_speed_max := 120.0 setget set_linear_speed_max
export(float, 0, 200, 2) var linear_accel_max := 10.0 setget set_linear_accel_max
export(float, 0, 5, 0.1) var predict_time := 1.0 setget set_predict_time
onready var pursuer := $BoundaryManager/Pursuer
@ -10,26 +10,26 @@ onready var seeker := $BoundaryManager/Seeker
func _ready() -> void:
pursuer.setup(predict_time, max_linear_speed, max_linear_accel)
seeker.setup(predict_time, max_linear_speed, max_linear_accel)
pursuer.setup(predict_time, linear_speed_max, linear_accel_max)
seeker.setup(predict_time, linear_speed_max, linear_accel_max)
func set_max_linear_speed(value: float) -> void:
max_linear_speed = value
func set_linear_speed_max(value: float) -> void:
linear_speed_max = value
if not is_inside_tree():
return
pursuer.agent.max_linear_speed = value
seeker.agent.max_linear_speed = value
pursuer.agent.linear_speed_max = value
seeker.agent.linear_speed_max = value
func set_max_linear_accel(value: float) -> void:
max_linear_accel = value
func set_linear_accel_max(value: float) -> void:
linear_accel_max = value
if not is_inside_tree():
return
pursuer.agent.max_linear_acceleration = value
seeker.agent.max_linear_acceleration = value
pursuer.agent.linear_acceleration_max = value
seeker.agent.linear_acceleration_max = value
func set_predict_time(value: float) -> void:
@ -37,4 +37,4 @@ func set_predict_time(value: float) -> void:
if not is_inside_tree():
return
pursuer._behavior.max_predict_time = value
pursuer._behavior.predict_time_max = value

View File

@ -12,7 +12,8 @@ script = ExtResource( 4 )
__meta__ = {
"_editor_description_": "Toy demo to demonstrate the use of the Pursue contrasted to the more naive Seek steering behavior."
}
max_linear_speed = 200.0
linear_speed_max = 240.0
linear_accel_max = 40.0
[node name="BoundaryManager" type="Node2D" parent="."]
script = ExtResource( 3 )
@ -24,7 +25,6 @@ collision_mask = 2
script = ExtResource( 2 )
thruster_strength = 600.0
side_thruster_strength = 20.0
max_velocity = 900.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="BoundaryManager/Player"]
polygon = PoolVector2Array( 0, -32, -24, 32, 24, 32 )

View File

@ -2,10 +2,6 @@ extends KinematicBody2D
# Represents a ship that chases after the player.
onready var agent := GSTSteeringAgent.new()
onready var accel := GSTTargetAcceleration.new()
onready var player_agent: GSTSteeringAgent = owner.find_node("Player", true, false).agent
export var use_seek: bool = false
var _orient_behavior: GSTSteeringBehavior
@ -16,6 +12,10 @@ var _linear_drag_coefficient := 0.025
var _angular_velocity := 0.0
var _angular_drag := 0.1
onready var agent := GSTSteeringAgent.new()
onready var accel := GSTTargetAcceleration.new()
onready var player_agent: GSTSteeringAgent = owner.find_node("Player", true, false).agent
func _ready() -> void:
set_physics_process(false)
@ -29,20 +29,20 @@ func _physics_process(delta: float) -> void:
_angular_velocity = clamp(
lerp(_angular_velocity, 0, _angular_drag),
-agent.max_angular_speed,
agent.max_angular_speed
-agent.angular_speed_max,
agent.angular_speed_max
)
rotation += _angular_velocity * delta
accel = _behavior.calculate_steering(accel)
_linear_velocity += Vector2(accel.linear.x, accel.linear.y)
_linear_velocity = _linear_velocity.clamped(agent.linear_speed_max)
_linear_velocity = _linear_velocity.linear_interpolate(Vector2.ZERO, _linear_drag_coefficient)
_linear_velocity = _linear_velocity.clamped(agent.max_linear_speed)
_linear_velocity = move_and_slide(_linear_velocity)
func setup(predict_time: float, max_linear_speed: float, max_linear_accel: float) -> void:
func setup(predict_time: float, linear_speed_max: float, linear_accel_max: float) -> void:
if use_seek:
_behavior = GSTSeek.new(agent, player_agent)
else:
@ -52,10 +52,10 @@ func setup(predict_time: float, max_linear_speed: float, max_linear_accel: float
_orient_behavior.alignment_tolerance = 0.001
_orient_behavior.deceleration_radius = PI/2
agent.max_angular_acceleration = 2
agent.max_angular_speed = 5
agent.max_linear_acceleration = max_linear_accel
agent.max_linear_speed = max_linear_speed
agent.angular_acceleration_max = deg2rad(10)
agent.angular_speed_max = deg2rad(45)
agent.linear_acceleration_max = linear_accel_max
agent.linear_speed_max = linear_speed_max
_update_agent()
set_physics_process(true)

View File

@ -5,8 +5,8 @@ extends Node2D
enum Mode { FLEE, SEEK }
export(Mode) var behavior_mode := Mode.SEEK setget set_behavior_mode
export(float, 0, 2000, 40) var max_linear_speed := 200.0 setget set_max_linear_speed
export(float, 0, 500, 0.5) var max_linear_accel := 10.0 setget set_max_linear_accel
export(float, 0, 2000, 40) var linear_speed_max := 200.0 setget set_linear_speed_max
export(float, 0, 500, 0.5) var linear_accel_max := 10.0 setget set_linear_accel_max
export(float) var player_speed := 600.0 setget set_player_speed
var camera_boundaries: Rect2
@ -37,8 +37,8 @@ func _ready() -> void:
var entity: KinematicBody2D = spawner.Entity.instance()
entity.global_position = new_pos
entity.player_agent = player.agent
entity.start_speed = max_linear_speed
entity.start_accel = max_linear_accel
entity.start_speed = linear_speed_max
entity.start_accel = linear_accel_max
spawner.add_child(entity)
@ -56,22 +56,22 @@ func set_behavior_mode(mode: int) -> void:
child.use_seek = false
func set_max_linear_speed(value: float) -> void:
max_linear_speed = value
func set_linear_speed_max(value: float) -> void:
linear_speed_max = value
if not is_inside_tree():
return
for child in spawner.get_children():
child.agent.max_linear_speed = value
child.agent.linear_speed_max = value
func set_max_linear_accel(value: float) -> void:
max_linear_accel = value
func set_linear_accel_max(value: float) -> void:
linear_accel_max = value
if not is_inside_tree():
return
for child in spawner.get_children():
child.agent.max_linear_acceleration = value
child.agent.linear_acceleration_max = value
func set_player_speed(value: float) -> void:

View File

@ -2,21 +2,21 @@ extends KinematicBody2D
# AI agent that uses the Seek behavior to hone in on the player's location as directly as possible.
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)
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.max_linear_acceleration = start_accel
agent.max_linear_speed = start_speed
agent.linear_acceleration_max = start_accel
agent.linear_speed_max = start_speed
func _physics_process(delta: float) -> void:
@ -29,7 +29,7 @@ func _physics_process(delta: float) -> void:
else:
accel = flee.calculate_steering(accel)
velocity = (velocity + Vector2(accel.linear.x, accel.linear.y)).clamped(agent.max_linear_speed)
velocity = (velocity + Vector2(accel.linear.x, accel.linear.y)).clamped(agent.linear_speed_max)
velocity = move_and_slide(velocity)

View File

@ -21,7 +21,7 @@ func _arrive(acceleration: GSTTargetAcceleration, target_position: Vector3) -> G
if distance <= arrival_tolerance:
acceleration.set_zero()
else:
var desired_speed := agent.max_linear_speed
var desired_speed := agent.linear_speed_max
if distance <= deceleration_radius:
desired_speed *= distance / deceleration_radius
@ -30,7 +30,7 @@ func _arrive(acceleration: GSTTargetAcceleration, target_position: Vector3) -> G
desired_velocity = (desired_velocity - agent.linear_velocity) * 1.0 / time_to_reach
acceleration.linear = GSTUtils.clampedv3(desired_velocity, agent.max_linear_acceleration)
acceleration.linear = GSTUtils.clampedv3(desired_velocity, agent.linear_acceleration_max)
acceleration.angular = 0
return acceleration

View File

@ -33,7 +33,7 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
else:
acceleration.linear = first_relative_position + (first_relative_velocity * shortest_time)
acceleration.linear = acceleration.linear.normalized() * -agent.max_linear_acceleration
acceleration.linear = acceleration.linear.normalized() * -agent.linear_acceleration_max
acceleration.angular = 0
return acceleration

View File

@ -38,7 +38,11 @@ func _calculate_steering(blended_accel: GSTTargetAcceleration) -> GSTTargetAccel
blended_accel.add_scaled_accel(_accel, bw.weight)
blended_accel.linear = GSTUtils.clampedv3(blended_accel.linear, agent.max_linear_acceleration)
blended_accel.angular = min(blended_accel.angular, agent.max_angular_acceleration)
blended_accel.linear = GSTUtils.clampedv3(blended_accel.linear, agent.linear_acceleration_max)
blended_accel.angular = clamp(
blended_accel.angular,
-agent.angular_acceleration_max,
agent.angular_acceleration_max
)
return blended_accel

View File

@ -17,7 +17,7 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
var neighbor_count = proximity.find_neighbors(_callback)
if neighbor_count > 0:
center_of_mass *= 1.0 / neighbor_count
acceleration.linear = (center_of_mass - agent.position).normalized() * agent.max_linear_acceleration
acceleration.linear = (center_of_mass - agent.position).normalized() * agent.linear_acceleration_max
return acceleration

View File

@ -2,15 +2,15 @@ class_name GSTEvade
extends GSTPursue
# Calculates acceleration to take an agent away from where a target agent will be.
# # The `max_predict_time` variable represents how far ahead to calculate the intersection point.
# # The `predict_time_max` variable represents how far ahead to calculate the intersection point.
func _init(
agent: GSTSteeringAgent,
target: GSTSteeringAgent,
max_predict_time := 1.0).(agent, target, max_predict_time):
predict_time_max := 1.0).(agent, target, predict_time_max):
pass
func _get_modified_acceleration() -> float:
return -agent.max_linear_acceleration
return -agent.linear_acceleration_max

View File

@ -9,7 +9,7 @@ func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent, target) ->
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
acceleration.linear = (
(agent.position - target.position).normalized() * agent.max_linear_acceleration)
(agent.position - target.position).normalized() * agent.linear_acceleration_max)
acceleration.angular = 0
return acceleration

View File

@ -41,7 +41,7 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
return _arrive(acceleration, target_position)
acceleration.linear = (target_position - agent.position).normalized()
acceleration.linear *= agent.max_linear_acceleration
acceleration.linear *= agent.linear_acceleration_max
acceleration.angular = 0
return acceleration

View File

@ -22,7 +22,7 @@ func _match_orientation(acceleration: GSTTargetAcceleration, desired_orientation
if rotation_size <= alignment_tolerance:
acceleration.set_zero()
else:
var desired_rotation := agent.max_angular_speed
var desired_rotation := agent.angular_speed_max
if rotation_size <= deceleration_radius:
desired_rotation *= rotation_size / deceleration_radius
@ -32,8 +32,8 @@ func _match_orientation(acceleration: GSTTargetAcceleration, desired_orientation
acceleration.angular = (desired_rotation - agent.angular_velocity) / time_to_reach
var limited_acceleration := abs(acceleration.angular)
if limited_acceleration > agent.max_angular_acceleration:
acceleration.angular *= agent.max_angular_acceleration / limited_acceleration
if limited_acceleration > agent.angular_acceleration_max:
acceleration.angular *= agent.angular_acceleration_max / limited_acceleration
acceleration.linear = Vector3.ZERO

View File

@ -7,11 +7,11 @@ extends GSTSteeringBehavior
var _behaviors := []
var last_selected_index: int
var threshold_for_zero: float
var zero_threshold: float
func _init(agent: GSTSteeringAgent, threshold_for_zero := 0.001).(agent) -> void:
self.threshold_for_zero = threshold_for_zero
func _init(agent: GSTSteeringAgent, zero_threshold := 0.001).(agent) -> void:
self.zero_threshold = zero_threshold
func add(behavior: GSTSteeringBehavior) -> void:
@ -26,7 +26,7 @@ func get_behavior_at(index: int) -> GSTSteeringBehavior:
func _calculate_steering(accel: GSTTargetAcceleration) -> GSTTargetAcceleration:
var threshold_squared := threshold_for_zero * threshold_for_zero
var threshold_squared := zero_threshold * zero_threshold
last_selected_index = -1

View File

@ -2,19 +2,19 @@ class_name GSTPursue
extends GSTSteeringBehavior
# Calculates acceleration to take an agent to intersect with where a target agent will be.
# # The `max_predict_time` variable represents how far ahead to calculate the intersection point.
# # The `predict_time_max` variable represents how far ahead to calculate the intersection point.
var target: GSTSteeringAgent
var max_predict_time: float
var predict_time_max: float
func _init(
agent: GSTSteeringAgent,
target: GSTSteeringAgent,
max_predict_time := 1.0).(agent) -> void:
predict_time_max := 1.0).(agent) -> void:
self.target = target
self.max_predict_time = max_predict_time
self.predict_time_max = predict_time_max
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
@ -22,11 +22,11 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
var distance_squared := (target_position - agent.position).length_squared()
var speed_squared := agent.linear_velocity.length_squared()
var predict_time := max_predict_time
var predict_time := predict_time_max
if speed_squared > 0:
var predict_time_squared := distance_squared / speed_squared
if predict_time_squared < max_predict_time * max_predict_time:
if predict_time_squared < predict_time_max * predict_time_max:
predict_time = sqrt(predict_time_squared)
acceleration.linear = ((
@ -39,4 +39,4 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
func _get_modified_acceleration() -> float:
return agent.max_linear_acceleration
return agent.linear_acceleration_max

View File

@ -12,7 +12,7 @@ func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent) -> void:
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
acceleration.linear = (
(target.position - agent.position).normalized() * agent.max_linear_acceleration)
(target.position - agent.position).normalized() * agent.linear_acceleration_max)
acceleration.angular = 0
return acceleration

View File

@ -28,11 +28,11 @@ func report_neighbor(neighbor: GSTSteeringAgent) -> bool:
var to_agent := agent.position - neighbor.position
var distance_squared := to_agent.length_squared()
var max_acceleration := agent.max_linear_acceleration
var acceleration_max := agent.linear_acceleration_max
var strength := decay_coefficient / distance_squared
if strength > max_acceleration:
strength = max_acceleration
if strength > acceleration_max:
strength = acceleration_max
acceleration.linear += to_agent * (strength / sqrt(distance_squared))

View File

@ -4,10 +4,10 @@ class_name GSTSteeringAgent
var zero_linear_speed_threshold := 0.01
var max_linear_speed := 0.0
var max_linear_acceleration := 0.0
var max_angular_speed := 0.0
var max_angular_acceleration := 0.0
var linear_speed_max := 0.0
var linear_acceleration_max := 0.0
var angular_speed_max := 0.0
var angular_acceleration_max := 0.0
var linear_velocity := Vector3.ZERO
var angular_velocity := 0.0
var bounding_radius := 0.0