mirror of
https://github.com/Relintai/godot-steering-ai-framework.git
synced 2024-11-14 04:57:19 +01:00
Make calculate_acceleration return void
This makes the code more in line with GDQuest gdscript guidelines about not both transforming state and returning a value.
This commit is contained in:
parent
9a207be03f
commit
57f3c4a24a
@ -12,7 +12,7 @@ var _drag := 0.1
|
|||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
_update_agent()
|
_update_agent()
|
||||||
_accel = arrive.calculate_steering(_accel)
|
arrive.calculate_steering(_accel)
|
||||||
_velocity += Vector2(_accel.linear.x, _accel.linear.y)
|
_velocity += Vector2(_accel.linear.x, _accel.linear.y)
|
||||||
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag).clamped(agent.linear_speed_max)
|
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag).clamped(agent.linear_speed_max)
|
||||||
_velocity = move_and_slide(_velocity)
|
_velocity = move_and_slide(_velocity)
|
||||||
|
@ -28,7 +28,7 @@ func _draw() -> void:
|
|||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
_update_agent()
|
_update_agent()
|
||||||
_accel = priority.calculate_steering(_accel)
|
priority.calculate_steering(_accel)
|
||||||
_velocity += Vector2(_accel.linear.x, _accel.linear.y)
|
_velocity += Vector2(_accel.linear.x, _accel.linear.y)
|
||||||
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag)
|
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag)
|
||||||
_velocity = _velocity.clamped(agent.linear_speed_max)
|
_velocity = _velocity.clamped(agent.linear_speed_max)
|
||||||
|
@ -19,7 +19,7 @@ func _ready() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
_accel = face.calculate_steering(_accel)
|
face.calculate_steering(_accel)
|
||||||
agent.angular_velocity = clamp(
|
agent.angular_velocity = clamp(
|
||||||
agent.angular_velocity + _accel.angular,
|
agent.angular_velocity + _accel.angular,
|
||||||
-agent.angular_speed_max,
|
-agent.angular_speed_max,
|
||||||
|
@ -34,7 +34,7 @@ func setup(
|
|||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if _valid:
|
if _valid:
|
||||||
_update_agent()
|
_update_agent()
|
||||||
_accel = follow.calculate_steering(_accel)
|
follow.calculate_steering(_accel)
|
||||||
_velocity += Vector2(_accel.linear.x, _accel.linear.y)
|
_velocity += Vector2(_accel.linear.x, _accel.linear.y)
|
||||||
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag)
|
_velocity = _velocity.linear_interpolate(Vector2.ZERO, _drag)
|
||||||
_velocity = _velocity.clamped(agent.linear_speed_max)
|
_velocity = _velocity.clamped(agent.linear_speed_max)
|
||||||
|
@ -46,7 +46,7 @@ func _physics_process(delta: float) -> void:
|
|||||||
agent.position.x = global_position.x
|
agent.position.x = global_position.x
|
||||||
agent.position.y = global_position.y
|
agent.position.y = global_position.y
|
||||||
if blend:
|
if blend:
|
||||||
acceleration = blend.calculate_steering(acceleration)
|
blend.calculate_steering(acceleration)
|
||||||
_velocity += Vector2(acceleration.linear.x, acceleration.linear.y)
|
_velocity += Vector2(acceleration.linear.x, acceleration.linear.y)
|
||||||
_velocity = _velocity.linear_interpolate(Vector2.ZERO, 0.1)
|
_velocity = _velocity.linear_interpolate(Vector2.ZERO, 0.1)
|
||||||
_velocity = _velocity.clamped(agent.linear_speed_max)
|
_velocity = _velocity.clamped(agent.linear_speed_max)
|
||||||
|
@ -25,11 +25,11 @@ func _ready() -> void:
|
|||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
_update_agent()
|
_update_agent()
|
||||||
|
|
||||||
accel = _behavior.calculate_steering(accel)
|
_behavior.calculate_steering(accel)
|
||||||
|
|
||||||
_direction_face.position = agent.position + accel.linear.normalized()
|
_direction_face.position = agent.position + accel.linear.normalized()
|
||||||
|
|
||||||
accel = _orient_behavior.calculate_steering(accel)
|
_orient_behavior.calculate_steering(accel)
|
||||||
_angular_velocity += accel.angular
|
_angular_velocity += accel.angular
|
||||||
|
|
||||||
_angular_velocity = clamp(
|
_angular_velocity = clamp(
|
||||||
|
@ -25,9 +25,9 @@ func _physics_process(delta: float) -> void:
|
|||||||
|
|
||||||
_update_agent()
|
_update_agent()
|
||||||
if use_seek:
|
if use_seek:
|
||||||
accel = seek.calculate_steering(accel)
|
seek.calculate_steering(accel)
|
||||||
else:
|
else:
|
||||||
accel = flee.calculate_steering(accel)
|
flee.calculate_steering(accel)
|
||||||
|
|
||||||
velocity = (velocity + Vector2(accel.linear.x, accel.linear.y)).clamped(agent.linear_speed_max)
|
velocity = (velocity + Vector2(accel.linear.x, accel.linear.y)).clamped(agent.linear_speed_max)
|
||||||
velocity = move_and_slide(velocity)
|
velocity = move_and_slide(velocity)
|
||||||
|
@ -19,7 +19,7 @@ func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent) -> void:
|
|||||||
self.target = target
|
self.target = target
|
||||||
|
|
||||||
|
|
||||||
func _arrive(acceleration: GSTTargetAcceleration, target_position: Vector3) -> GSTTargetAcceleration:
|
func _arrive(acceleration: GSTTargetAcceleration, target_position: Vector3) -> void:
|
||||||
var to_target := target_position - agent.position
|
var to_target := target_position - agent.position
|
||||||
var distance := to_target.length()
|
var distance := to_target.length()
|
||||||
|
|
||||||
@ -38,8 +38,6 @@ func _arrive(acceleration: GSTTargetAcceleration, target_position: Vector3) -> G
|
|||||||
acceleration.linear = GSTUtils.clampedv3(desired_velocity, agent.linear_acceleration_max)
|
acceleration.linear = GSTUtils.clampedv3(desired_velocity, agent.linear_acceleration_max)
|
||||||
acceleration.angular = 0
|
acceleration.angular = 0
|
||||||
|
|
||||||
return acceleration
|
|
||||||
|
|
||||||
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
_arrive(acceleration, target.position)
|
||||||
return _arrive(acceleration, target.position)
|
|
||||||
|
@ -16,7 +16,7 @@ func _init(agent: GSTSteeringAgent, proximity: GSTProximity).(agent, proximity)
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
_shortest_time = INF
|
_shortest_time = INF
|
||||||
_first_neighbor = null
|
_first_neighbor = null
|
||||||
_first_minimum_separation = 0
|
_first_minimum_separation = 0
|
||||||
@ -37,8 +37,6 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
|
|||||||
acceleration.linear = acceleration.linear.normalized() * -agent.linear_acceleration_max
|
acceleration.linear = acceleration.linear.normalized() * -agent.linear_acceleration_max
|
||||||
acceleration.angular = 0
|
acceleration.angular = 0
|
||||||
|
|
||||||
return acceleration
|
|
||||||
|
|
||||||
|
|
||||||
# Callback for the proximity to call when finding neighbors. Keeps track of every `neighbor`
|
# Callback for the proximity to call when finding neighbors. Keeps track of every `neighbor`
|
||||||
# that was found but only keeps the one the owning agent will most likely collide with.
|
# that was found but only keeps the one the owning agent will most likely collide with.
|
||||||
|
@ -33,7 +33,7 @@ func get_behavior_at(index: int) -> Dictionary:
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(blended_accel: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(blended_accel: GSTTargetAcceleration) -> void:
|
||||||
blended_accel.set_zero()
|
blended_accel.set_zero()
|
||||||
|
|
||||||
for i in range(_behaviors.size()):
|
for i in range(_behaviors.size()):
|
||||||
@ -48,5 +48,3 @@ func _calculate_steering(blended_accel: GSTTargetAcceleration) -> GSTTargetAccel
|
|||||||
-agent.angular_acceleration_max,
|
-agent.angular_acceleration_max,
|
||||||
agent.angular_acceleration_max
|
agent.angular_acceleration_max
|
||||||
)
|
)
|
||||||
|
|
||||||
return blended_accel
|
|
||||||
|
@ -11,14 +11,13 @@ func _init(agent: GSTSteeringAgent, proximity: GSTProximity).(agent, proximity)
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
acceleration.set_zero()
|
acceleration.set_zero()
|
||||||
_center_of_mass = Vector3.ZERO
|
_center_of_mass = Vector3.ZERO
|
||||||
var neighbor_count = proximity._find_neighbors(_callback)
|
var neighbor_count = proximity._find_neighbors(_callback)
|
||||||
if neighbor_count > 0:
|
if neighbor_count > 0:
|
||||||
_center_of_mass *= 1.0 / neighbor_count
|
_center_of_mass *= 1.0 / neighbor_count
|
||||||
acceleration.linear = (_center_of_mass - agent.position).normalized() * agent.linear_acceleration_max
|
acceleration.linear = (_center_of_mass - agent.position).normalized() * agent.linear_acceleration_max
|
||||||
return acceleration
|
|
||||||
|
|
||||||
|
|
||||||
# Callback for the proximity to call when finding neighbors. Adds `neighbor`'s position
|
# Callback for the proximity to call when finding neighbors. Adds `neighbor`'s position
|
||||||
|
@ -8,17 +8,16 @@ func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent, target) ->
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _face(acceleration: GSTTargetAcceleration, target_position: Vector3) -> GSTTargetAcceleration:
|
func _face(acceleration: GSTTargetAcceleration, target_position: Vector3) -> void:
|
||||||
var to_target := target_position - agent.position
|
var to_target := target_position - agent.position
|
||||||
var distance_squared := to_target.length_squared()
|
var distance_squared := to_target.length_squared()
|
||||||
|
|
||||||
if distance_squared < agent.zero_linear_speed_threshold:
|
if distance_squared < agent.zero_linear_speed_threshold:
|
||||||
acceleration.set_zero()
|
acceleration.set_zero()
|
||||||
return acceleration
|
|
||||||
else:
|
else:
|
||||||
var orientation = GSTUtils.vector3_to_angle(to_target)
|
var orientation = GSTUtils.vector3_to_angle(to_target)
|
||||||
return _match_orientation(acceleration, orientation)
|
_match_orientation(acceleration, orientation)
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
return _face(acceleration, target.position)
|
_face(acceleration, target.position)
|
||||||
|
@ -7,9 +7,7 @@ func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent, target) ->
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
acceleration.linear = (
|
acceleration.linear = (
|
||||||
(agent.position - target.position).normalized() * agent.linear_acceleration_max)
|
(agent.position - target.position).normalized() * agent.linear_acceleration_max)
|
||||||
acceleration.angular = 0
|
acceleration.angular = 0
|
||||||
|
|
||||||
return acceleration
|
|
||||||
|
@ -25,7 +25,7 @@ func _init(
|
|||||||
self.prediction_time = prediction_time
|
self.prediction_time = prediction_time
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
var location := (
|
var location := (
|
||||||
agent.position if prediction_time == 0
|
agent.position if prediction_time == 0
|
||||||
else agent.position + (agent.linear_velocity * prediction_time))
|
else agent.position + (agent.linear_velocity * prediction_time))
|
||||||
@ -38,13 +38,13 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
|
|||||||
if is_arrive_enabled and path.is_open:
|
if is_arrive_enabled and path.is_open:
|
||||||
if path_offset >= 0:
|
if path_offset >= 0:
|
||||||
if target_distance > path.length - deceleration_radius:
|
if target_distance > path.length - deceleration_radius:
|
||||||
return _arrive(acceleration, target_position)
|
_arrive(acceleration, target_position)
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
if target_distance < deceleration_radius:
|
if target_distance < deceleration_radius:
|
||||||
return _arrive(acceleration, target_position)
|
_arrive(acceleration, target_position)
|
||||||
|
return
|
||||||
|
|
||||||
acceleration.linear = (target_position - agent.position).normalized()
|
acceleration.linear = (target_position - agent.position).normalized()
|
||||||
acceleration.linear *= agent.linear_acceleration_max
|
acceleration.linear *= agent.linear_acceleration_max
|
||||||
acceleration.angular = 0
|
acceleration.angular = 0
|
||||||
|
|
||||||
return acceleration
|
|
||||||
|
@ -8,10 +8,9 @@ func _init(agent: GSTSteeringAgent).(agent, null) -> void:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(accel: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(accel: GSTTargetAcceleration) -> void:
|
||||||
if agent.linear_velocity.length_squared() < agent.zero_linear_speed_threshold:
|
if agent.linear_velocity.length_squared() < agent.zero_linear_speed_threshold:
|
||||||
accel.set_zero()
|
accel.set_zero()
|
||||||
return accel
|
|
||||||
else:
|
else:
|
||||||
var orientation := GSTUtils.vector3_to_angle(agent.linear_velocity)
|
var orientation := GSTUtils.vector3_to_angle(agent.linear_velocity)
|
||||||
return _match_orientation(accel, orientation)
|
_match_orientation(accel, orientation)
|
||||||
|
@ -20,7 +20,7 @@ func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent) -> void:
|
|||||||
self.target = target
|
self.target = target
|
||||||
|
|
||||||
|
|
||||||
func _match_orientation(acceleration: GSTTargetAcceleration, desired_orientation: float) -> GSTTargetAcceleration:
|
func _match_orientation(acceleration: GSTTargetAcceleration, desired_orientation: float) -> void:
|
||||||
var rotation := wrapf(desired_orientation - agent.orientation, -PI, PI)
|
var rotation := wrapf(desired_orientation - agent.orientation, -PI, PI)
|
||||||
|
|
||||||
var rotation_size := abs(rotation)
|
var rotation_size := abs(rotation)
|
||||||
@ -43,8 +43,6 @@ func _match_orientation(acceleration: GSTTargetAcceleration, desired_orientation
|
|||||||
|
|
||||||
acceleration.linear = Vector3.ZERO
|
acceleration.linear = Vector3.ZERO
|
||||||
|
|
||||||
return acceleration
|
|
||||||
|
|
||||||
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
_match_orientation(acceleration, target.orientation)
|
||||||
return _match_orientation(acceleration, target.orientation)
|
|
||||||
|
@ -31,7 +31,7 @@ func get_behavior_at(index: int) -> GSTSteeringBehavior:
|
|||||||
return null
|
return null
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(accel: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(accel: GSTTargetAcceleration) -> void:
|
||||||
var threshold_squared := zero_threshold * zero_threshold
|
var threshold_squared := zero_threshold * zero_threshold
|
||||||
|
|
||||||
last_selected_index = -1
|
last_selected_index = -1
|
||||||
@ -48,5 +48,3 @@ func _calculate_steering(accel: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
accel.set_zero()
|
accel.set_zero()
|
||||||
|
|
||||||
return accel
|
|
||||||
|
@ -19,7 +19,7 @@ func _init(
|
|||||||
self.predict_time_max = predict_time_max
|
self.predict_time_max = predict_time_max
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
var target_position := target.position
|
var target_position := target.position
|
||||||
var distance_squared := (target_position - agent.position).length_squared()
|
var distance_squared := (target_position - agent.position).length_squared()
|
||||||
|
|
||||||
@ -37,8 +37,6 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
|
|||||||
|
|
||||||
acceleration.angular = 0
|
acceleration.angular = 0
|
||||||
|
|
||||||
return acceleration
|
|
||||||
|
|
||||||
|
|
||||||
func _get_modified_acceleration() -> float:
|
func _get_modified_acceleration() -> float:
|
||||||
return agent.linear_acceleration_max
|
return agent.linear_acceleration_max
|
||||||
|
@ -12,9 +12,7 @@ func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent) -> void:
|
|||||||
self.target = target
|
self.target = target
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
acceleration.linear = (
|
acceleration.linear = (
|
||||||
(target.position - agent.position).normalized() * agent.linear_acceleration_max)
|
(target.position - agent.position).normalized() * agent.linear_acceleration_max)
|
||||||
acceleration.angular = 0
|
acceleration.angular = 0
|
||||||
|
|
||||||
return acceleration
|
|
||||||
|
@ -18,11 +18,10 @@ func _init(agent: GSTSteeringAgent, proximity: GSTProximity).(agent, proximity)
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
acceleration.set_zero()
|
acceleration.set_zero()
|
||||||
self._acceleration = acceleration
|
self._acceleration = acceleration
|
||||||
proximity._find_neighbors(_callback)
|
proximity._find_neighbors(_callback)
|
||||||
return acceleration
|
|
||||||
|
|
||||||
|
|
||||||
# Callback for the proximity to call when finding neighbors. Determines the amount of
|
# Callback for the proximity to call when finding neighbors. Determines the amount of
|
||||||
|
@ -18,16 +18,13 @@ func _init(agent: GSTSteeringAgent) -> void:
|
|||||||
self.agent = agent
|
self.agent = agent
|
||||||
|
|
||||||
|
|
||||||
# Returns the `acceleration` modified with the behavior's desired amount of
|
# Sets the `acceleration` with the behavior's desired amount of acceleration.
|
||||||
# acceleration.
|
func calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
func calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
|
||||||
if is_enabled:
|
if is_enabled:
|
||||||
return _calculate_steering(acceleration)
|
_calculate_steering(acceleration)
|
||||||
else:
|
else:
|
||||||
acceleration.set_zero()
|
acceleration.set_zero()
|
||||||
return acceleration
|
|
||||||
|
|
||||||
|
|
||||||
func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAcceleration:
|
func _calculate_steering(acceleration: GSTTargetAcceleration) -> void:
|
||||||
acceleration.set_zero()
|
acceleration.set_zero()
|
||||||
return acceleration
|
|
||||||
|
Loading…
Reference in New Issue
Block a user