mirror of
https://github.com/Relintai/godot-steering-ai-framework.git
synced 2024-11-14 04:57:19 +01:00
Move class docstring to top of class
For documentation purposes, current tools expect it there.
This commit is contained in:
parent
6276fc0413
commit
62ad172767
@ -1,7 +1,7 @@
|
|||||||
class_name GSTArrive
|
|
||||||
extends GSTSteeringBehavior
|
|
||||||
# Calculates acceleration to take an agent to its target's location.
|
# Calculates acceleration to take an agent to its target's location.
|
||||||
# The calculation will attempt to arrive with zero remaining velocity.
|
# The calculation will attempt to arrive with zero remaining velocity.
|
||||||
|
class_name GSTArrive
|
||||||
|
extends GSTSteeringBehavior
|
||||||
|
|
||||||
|
|
||||||
# The target whose location the agent will be steered to arrive at
|
# The target whose location the agent will be steered to arrive at
|
||||||
@ -10,7 +10,7 @@ var target: GSTAgentLocation
|
|||||||
var arrival_tolerance: float
|
var arrival_tolerance: float
|
||||||
# The distance from the target for the agent to begin slowing down
|
# The distance from the target for the agent to begin slowing down
|
||||||
var deceleration_radius: float
|
var deceleration_radius: float
|
||||||
# A constant that represents the time it takes to change acceleration
|
# The amount of time to reach the target velocity
|
||||||
var time_to_reach := 0.1
|
var time_to_reach := 0.1
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
# Behavior that steers the agent to avoid obstacles lying in its path as approximated by spheres.
|
||||||
class_name GSTAvoidCollisions
|
class_name GSTAvoidCollisions
|
||||||
extends GSTGroupBehavior
|
extends GSTGroupBehavior
|
||||||
# Behavior that steers the agent to avoid obstacles lying in its path as approximated by spheres.
|
|
||||||
|
|
||||||
|
|
||||||
var first_neighbor: GSTSteeringAgent
|
var first_neighbor: GSTSteeringAgent
|
||||||
@ -39,6 +39,8 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
|
|||||||
return acceleration
|
return acceleration
|
||||||
|
|
||||||
|
|
||||||
|
# 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.
|
||||||
func report_neighbor(neighbor: GSTSteeringAgent) -> bool:
|
func report_neighbor(neighbor: GSTSteeringAgent) -> bool:
|
||||||
var relative_position := neighbor.position - agent.position
|
var relative_position := neighbor.position - agent.position
|
||||||
var relative_velocity := neighbor.linear_velocity - agent.linear_velocity
|
var relative_velocity := neighbor.linear_velocity - agent.linear_velocity
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
class_name GSTBlend
|
|
||||||
extends GSTSteeringBehavior
|
|
||||||
# Blends multiple steering behaviors into one, and returns acceleration combining all of them.
|
# Blends multiple steering behaviors into one, and returns acceleration combining all of them.
|
||||||
#
|
#
|
||||||
# Each behavior is associated with a weight - a modifier by which the result will be multiplied by,
|
# Each behavior is associated with a weight - a modifier by which the result will be multiplied by,
|
||||||
@ -7,6 +5,8 @@ extends GSTSteeringBehavior
|
|||||||
#
|
#
|
||||||
# Each behavior is stored internally as a `Dictionary` with a `behavior` key with a value of type
|
# Each behavior is stored internally as a `Dictionary` with a `behavior` key with a value of type
|
||||||
# `GSTSteeringBehavior` and a `weight` key with a value of type float.
|
# `GSTSteeringBehavior` and a `weight` key with a value of type float.
|
||||||
|
class_name GSTBlend
|
||||||
|
extends GSTSteeringBehavior
|
||||||
|
|
||||||
|
|
||||||
var _behaviors := []
|
var _behaviors := []
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
class_name GSTCohesion
|
|
||||||
extends GSTGroupBehavior
|
|
||||||
# Group behavior that produces linear acceleration that attempts to move the agent towards the
|
# Group behavior that produces linear acceleration that attempts to move the agent towards the
|
||||||
# center of mass of the agents in the area defined by the Proximity.
|
# center of mass of the agents in the area defined by the Proximity.
|
||||||
|
class_name GSTCohesion
|
||||||
|
extends GSTGroupBehavior
|
||||||
|
|
||||||
|
|
||||||
var center_of_mass: Vector3
|
var center_of_mass: Vector3
|
||||||
@ -21,6 +21,8 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
|
|||||||
return acceleration
|
return acceleration
|
||||||
|
|
||||||
|
|
||||||
|
# Callback for the proximity to call when finding neighbors. Adds `neighbor`'s position
|
||||||
|
# to the center of mass of the group.
|
||||||
func report_neighbor(neighbor: GSTSteeringAgent) -> bool:
|
func report_neighbor(neighbor: GSTSteeringAgent) -> bool:
|
||||||
center_of_mass += neighbor.position
|
center_of_mass += neighbor.position
|
||||||
return true
|
return true
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
# Calculates acceleration to take an agent away from where a target agent will be.
|
||||||
class_name GSTEvade
|
class_name GSTEvade
|
||||||
extends GSTPursue
|
extends GSTPursue
|
||||||
# Calculates acceleration to take an agent away from where a target agent will be.
|
|
||||||
|
|
||||||
|
|
||||||
func _init(
|
func _init(
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
class_name GSTFace
|
|
||||||
extends GSTMatchOrientation
|
|
||||||
# Calculates angular acceleration to rotate a target to face its target's position.
|
# Calculates angular acceleration to rotate a target to face its target's position.
|
||||||
# The acceleration will attempt to arrive with zero remaining angular velocity.
|
# The acceleration will attempt to arrive with zero remaining angular velocity.
|
||||||
|
class_name GSTFace
|
||||||
|
extends GSTMatchOrientation
|
||||||
|
|
||||||
|
|
||||||
func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent, target) -> void:
|
func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent, target) -> void:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
# Calculates acceleration to take an agent directly away from a target agent.
|
||||||
class_name GSTFlee
|
class_name GSTFlee
|
||||||
extends GSTSeek
|
extends GSTSeek
|
||||||
# Calculates acceleration to take an agent directly away from a target agent.
|
|
||||||
|
|
||||||
|
|
||||||
func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent, target) -> void:
|
func _init(agent: GSTSteeringAgent, target: GSTAgentLocation).(agent, target) -> void:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
# Produces a linear acceleration that moves the agent along the specified path.
|
||||||
class_name GSTFollowPath
|
class_name GSTFollowPath
|
||||||
extends GSTArrive
|
extends GSTArrive
|
||||||
# Produces a linear acceleration that moves the agent along the specified path.
|
|
||||||
|
|
||||||
|
|
||||||
# The path to follow and travel along
|
# The path to follow and travel along
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
# Calculates an angular acceleration to match an agent's orientation to its direction of travel.
|
||||||
class_name GSTLookWhereYouGo
|
class_name GSTLookWhereYouGo
|
||||||
extends GSTMatchOrientation
|
extends GSTMatchOrientation
|
||||||
# Calculates an angular acceleration to match an agent's orientation to its direction of travel.
|
|
||||||
|
|
||||||
|
|
||||||
func _init(agent: GSTSteeringAgent).(agent, null) -> void:
|
func _init(agent: GSTSteeringAgent).(agent, null) -> void:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
class_name GSTMatchOrientation
|
|
||||||
extends GSTSteeringBehavior
|
|
||||||
# Calculates an angular acceleration to match an agent's orientation to its target's.
|
# Calculates an angular acceleration to match an agent's orientation to its target's.
|
||||||
# The calculation will attempt to arrive with zero remaining angular velocity.
|
# The calculation will attempt to arrive with zero remaining angular velocity.
|
||||||
|
class_name GSTMatchOrientation
|
||||||
|
extends GSTSteeringBehavior
|
||||||
|
|
||||||
|
|
||||||
# The target orientation for the behavior to try and match rotations to
|
# The target orientation for the behavior to try and match rotations to
|
||||||
@ -10,7 +10,7 @@ var target: GSTAgentLocation
|
|||||||
var alignment_tolerance: float
|
var alignment_tolerance: float
|
||||||
# The amount of distance in radians from the goal to start slowing down
|
# The amount of distance in radians from the goal to start slowing down
|
||||||
var deceleration_radius: float
|
var deceleration_radius: float
|
||||||
# A constant to represent the time it takes to change angular accelerations
|
# The amount of time to reach the target velocity
|
||||||
var time_to_reach: float = 0.1
|
var time_to_reach: float = 0.1
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
# Contains multiple behaviors and returns only the result of the first with non-zero acceleration.
|
||||||
class_name GSTPriority
|
class_name GSTPriority
|
||||||
extends GSTSteeringBehavior
|
extends GSTSteeringBehavior
|
||||||
# Contains multiple behaviors and returns only the result of the first with non-zero acceleration.
|
|
||||||
|
|
||||||
|
|
||||||
var _behaviors := []
|
var _behaviors := []
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
class_name GSTPursue
|
|
||||||
extends GSTSteeringBehavior
|
|
||||||
# Calculates acceleration to take an agent to intersect with where a target agent will be, instead
|
# Calculates acceleration to take an agent to intersect with where a target agent will be, instead
|
||||||
# of where it currently is.
|
# of where it currently is.
|
||||||
|
class_name GSTPursue
|
||||||
|
extends GSTSteeringBehavior
|
||||||
|
|
||||||
|
|
||||||
# The target agent that the behavior is trying to intercept
|
# The target agent that the behavior is trying to intercept
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
# Calculates acceleration to take an agent to a target agent's position directly
|
||||||
class_name GSTSeek
|
class_name GSTSeek
|
||||||
extends GSTSteeringBehavior
|
extends GSTSteeringBehavior
|
||||||
# Calculates acceleration to take an agent to a target agent's position directly
|
|
||||||
|
|
||||||
|
|
||||||
# The target that the behavior aims to move the agent to
|
# The target that the behavior aims to move the agent to
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
class_name GSTSeparation
|
|
||||||
extends GSTGroupBehavior
|
|
||||||
# Group behavior that produces acceleration that repels the agent from the other neighbors that
|
# Group behavior that produces acceleration that repels the agent from the other neighbors that
|
||||||
# are in the area defined by the given `GSTProximity`.
|
# are in the area defined by the given `GSTProximity`.
|
||||||
#
|
#
|
||||||
# The produced acceleration is an average of all agents under consideration, multiplied by a
|
# The produced acceleration is an average of all agents under consideration, multiplied by a
|
||||||
# strength decreasing by the inverse square law in relation to distance, and accumulated.
|
# strength decreasing by the inverse square law in relation to distance, and accumulated.
|
||||||
|
class_name GSTSeparation
|
||||||
|
extends GSTGroupBehavior
|
||||||
|
|
||||||
|
|
||||||
# The constant coefficient to calculate how fast the separation strength decays with distance.
|
# The coefficient to calculate how fast the separation strength decays with distance.
|
||||||
var decay_coefficient := 1.0
|
var decay_coefficient := 1.0
|
||||||
|
|
||||||
var acceleration: GSTTargetAcceleration
|
var acceleration: GSTTargetAcceleration
|
||||||
@ -24,6 +24,8 @@ func _calculate_steering(acceleration: GSTTargetAcceleration) -> GSTTargetAccele
|
|||||||
return acceleration
|
return acceleration
|
||||||
|
|
||||||
|
|
||||||
|
# Callback for the proximity to call when finding neighbors. Determines the amount of
|
||||||
|
# acceleration that `neighbor` imposes based on its distance from the owner agent.
|
||||||
func report_neighbor(neighbor: GSTSteeringAgent) -> bool:
|
func report_neighbor(neighbor: GSTSteeringAgent) -> bool:
|
||||||
var to_agent := agent.position - neighbor.position
|
var to_agent := agent.position - neighbor.position
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
class_name GSTAgentLocation
|
|
||||||
# Represents an agent with only a location and an orientation.
|
# Represents an agent with only a location and an orientation.
|
||||||
|
class_name GSTAgentLocation
|
||||||
|
|
||||||
|
|
||||||
# The agent's position in space.
|
# The agent's position in space.
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
|
# Base type for group-based steering behaviors.
|
||||||
extends GSTSteeringBehavior
|
extends GSTSteeringBehavior
|
||||||
class_name GSTGroupBehavior
|
class_name GSTGroupBehavior
|
||||||
# Base type for group-based steering behaviors.
|
|
||||||
|
|
||||||
|
|
||||||
# Container to find neighbors of the agent and apply a group behavior.
|
# Container to find neighbors of the agent and calculate group behavior.
|
||||||
var proximity: GSTProximity
|
var proximity: GSTProximity
|
||||||
|
|
||||||
var _callback := funcref(self, "report_neighbor")
|
var _callback := funcref(self, "report_neighbor")
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
extends Reference class_name GSTPath
|
|
||||||
# Represents a path made up of Vector3 waypoints, split into segments path
|
# Represents a path made up of Vector3 waypoints, split into segments path
|
||||||
# follow behaviors can use.
|
# follow behaviors can use.
|
||||||
|
extends Reference class_name GSTPath
|
||||||
|
|
||||||
|
|
||||||
# If `false`, the path loops.
|
# If `false`, the path loops.
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
extends GSTAgentLocation
|
|
||||||
class_name GSTSteeringAgent
|
|
||||||
# Adds velocity, speed, and size data to `GSTAgentLocation`.
|
# Adds velocity, speed, and size data to `GSTAgentLocation`.
|
||||||
#
|
#
|
||||||
# It is the character's responsibility to keep this information up to date for
|
# It is the character's responsibility to keep this information up to date for
|
||||||
# the steering toolkit to work correctly.
|
# the steering toolkit to work correctly.
|
||||||
|
extends GSTAgentLocation
|
||||||
|
class_name GSTSteeringAgent
|
||||||
|
|
||||||
|
|
||||||
# The amount of velocity to be considered effectively not moving.
|
# The amount of velocity to be considered effectively not moving.
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
class_name GSTSteeringBehavior
|
|
||||||
# Base class for all steering behaviors.
|
# Base class for all steering behaviors.
|
||||||
#
|
#
|
||||||
# Steering behaviors calculate the linear and the angular acceleration to be
|
# Steering behaviors calculate the linear and the angular acceleration to be
|
||||||
@ -6,6 +5,7 @@ class_name GSTSteeringBehavior
|
|||||||
#
|
#
|
||||||
# The `calculate_steering` function is the entry point for all behaviors.
|
# The `calculate_steering` function is the entry point for all behaviors.
|
||||||
# Individual steering behaviors encapsulate the steering logic.
|
# Individual steering behaviors encapsulate the steering logic.
|
||||||
|
class_name GSTSteeringBehavior
|
||||||
|
|
||||||
|
|
||||||
# If `false`, all calculations return zero amounts of acceleration.
|
# If `false`, all calculations return zero amounts of acceleration.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
class_name GSTTargetAcceleration
|
|
||||||
# A desired linear and angular amount of acceleration requested by the steering
|
# A desired linear and angular amount of acceleration requested by the steering
|
||||||
# system.
|
# system.
|
||||||
|
class_name GSTTargetAcceleration
|
||||||
|
|
||||||
|
|
||||||
# Linear acceleration
|
# Linear acceleration
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
class_name GSTUtils
|
|
||||||
# Math and vector utility functions.
|
# Math and vector utility functions.
|
||||||
|
class_name GSTUtils
|
||||||
|
|
||||||
|
|
||||||
# Returns the `vector` with its length capped to `limit`.
|
# Returns the `vector` with its length capped to `limit`.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
# Determines any agent that is in the specified list as being neighbors with the
|
||||||
|
# owner agent, regardless of distance.
|
||||||
extends GSTProximity
|
extends GSTProximity
|
||||||
class_name GSTInfiniteProximity
|
class_name GSTInfiniteProximity
|
||||||
# Determines any agent that is in the specified list as being neighbors with the
|
|
||||||
# owner agent.
|
|
||||||
|
|
||||||
|
|
||||||
func _init(agent: GSTSteeringAgent, agents: Array).(agent, agents) -> void:
|
func _init(agent: GSTSteeringAgent, agents: Array).(agent, agents) -> void:
|
||||||
@ -11,7 +11,7 @@ func _init(agent: GSTSteeringAgent, agents: Array).(agent, agents) -> void:
|
|||||||
# Returns a number of neighbors based on a `callback` function.
|
# Returns a number of neighbors based on a `callback` function.
|
||||||
#
|
#
|
||||||
# `find_neighbors` calls `callback` for each agent in the `agents` array and
|
# `find_neighbors` calls `callback` for each agent in the `agents` array and
|
||||||
# adds one to the count it if `callback` returns true.
|
# adds one to the count if its `callback` returns true.
|
||||||
func find_neighbors(callback: FuncRef) -> int:
|
func find_neighbors(callback: FuncRef) -> int:
|
||||||
var neighbor_count := 0
|
var neighbor_count := 0
|
||||||
var agent_count := agents.size()
|
var agent_count := agents.size()
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
|
# Base container type that stores data to find the neighbors of an agent.
|
||||||
extends Reference
|
extends Reference
|
||||||
class_name GSTProximity
|
class_name GSTProximity
|
||||||
# Base container type that stores data to find the neighbors of an agent.
|
|
||||||
|
|
||||||
|
|
||||||
|
# The owning agent whose neighbors are found in the group
|
||||||
var agent: GSTSteeringAgent
|
var agent: GSTSteeringAgent
|
||||||
|
# The agents who are part of this group and could be potential neighbors
|
||||||
var agents := []
|
var agents := []
|
||||||
|
|
||||||
|
|
||||||
@ -12,5 +14,9 @@ func _init(agent: GSTSteeringAgent, agents: Array) -> void:
|
|||||||
self.agents = agents
|
self.agents = agents
|
||||||
|
|
||||||
|
|
||||||
|
# Returns a number of neighbors based on a `callback` function.
|
||||||
|
#
|
||||||
|
# `find_neighbors` calls `callback` for each agent in the `agents` array and
|
||||||
|
# adds one to the count if its `callback` returns true.
|
||||||
func find_neighbors(callback: FuncRef) -> int:
|
func find_neighbors(callback: FuncRef) -> int:
|
||||||
return 0
|
return 0
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
extends GSTProximity
|
|
||||||
class_name GSTRadiusProximity
|
|
||||||
# Determines any agent that is in the specified list as being neighbors with the owner agent if
|
# Determines any agent that is in the specified list as being neighbors with the owner agent if
|
||||||
# they lie within the specified radius.
|
# they lie within the specified radius.
|
||||||
|
extends GSTProximity
|
||||||
|
class_name GSTRadiusProximity
|
||||||
|
|
||||||
|
|
||||||
|
# The radius around the owning agent to find neighbors in
|
||||||
var radius := 0.0
|
var radius := 0.0
|
||||||
|
|
||||||
var _last_frame := 0
|
var _last_frame := 0
|
||||||
@ -15,6 +16,10 @@ func _init(agent: GSTSteeringAgent, agents: Array, radius: float).(agent, agents
|
|||||||
_scene_tree = Engine.get_main_loop()
|
_scene_tree = Engine.get_main_loop()
|
||||||
|
|
||||||
|
|
||||||
|
# Returns a number of neighbors based on a `callback` function.
|
||||||
|
#
|
||||||
|
# `find_neighbors` calls `callback` for each agent in the `agents` array that lie within
|
||||||
|
# the radius around the owning agent and adds one to the count if its `callback` returns true.
|
||||||
func find_neighbors(callback: FuncRef) -> int:
|
func find_neighbors(callback: FuncRef) -> int:
|
||||||
var agent_count := agents.size()
|
var agent_count := agents.size()
|
||||||
var neighbor_count := 0
|
var neighbor_count := 0
|
||||||
|
Loading…
Reference in New Issue
Block a user