Prefix the gdscript classes with GD, so they can be easily opened in the same engine. Also added quick launch script.

This commit is contained in:
Relintai 2023-01-14 10:08:49 +01:00
parent 8ac2c60a4d
commit 7529794925
46 changed files with 415 additions and 409 deletions

View File

@ -1,9 +1,9 @@
extends KinematicBody2D extends KinematicBody2D
var agent := GSAIKinematicBody2DAgent.new() var agent := GDGSAIKinematicBody2DAgent.new()
var target := GSAIAgentLocation.new() var target := GDGSAIAgentLocation.new()
var arrive := GSAIArrive.new() var arrive := GDGSAIArrive.new()
var _accel := GSAITargetAcceleration.new() var _accel := GDGSAITargetAcceleration.new()
var _velocity := Vector2() var _velocity := Vector2()
var _drag := 0.1 var _drag := 0.1

View File

@ -12,6 +12,6 @@ func _ready() -> void:
func _draw(): func _draw():
var target_position := GSAIUtils.to_vector2(arriver.target.position) var target_position := GDGSAIUtils.to_vector2(arriver.target.position)
draw_circle(target_position, owner.deceleration_radius, deceleration_radius_color) draw_circle(target_position, owner.deceleration_radius, deceleration_radius_color)
draw_circle(target_position, owner.arrival_tolerance, arrival_tolerance_color) draw_circle(target_position, owner.arrival_tolerance, arrival_tolerance_color)

View File

@ -2,28 +2,28 @@ extends KinematicBody
var target_node: Spatial var target_node: Spatial
var agent : GSAIKinematicBody3DAgent = null var agent : GDGSAIKinematicBody3DAgent = null
var target : GSAIAgentLocation = null var target : GDGSAIAgentLocation = null
var accel : GSAITargetAcceleration = null var accel : GDGSAITargetAcceleration = null
var blend : GSAIBlend = null var blend : GDGSAIBlend = null
var face : GSAIFace = null var face : GDGSAIFace = null
var arrive : GSAIArrive = null var arrive : GDGSAIArrive = null
func _init() -> void: func _init() -> void:
agent = GSAIKinematicBody3DAgent.new() agent = GDGSAIKinematicBody3DAgent.new()
agent.body = self agent.body = self
target = GSAIAgentLocation.new() target = GDGSAIAgentLocation.new()
accel = GSAITargetAcceleration.new() accel = GDGSAITargetAcceleration.new()
blend = GSAIBlend.new() blend = GDGSAIBlend.new()
blend.agent = agent blend.agent = agent
face = GSAIFace.new() face = GDGSAIFace.new()
face.agent = agent face.agent = agent
face.target = target face.target = target
face.use_z = true face.use_z = true
arrive = GSAIArrive.new() arrive = GDGSAIArrive.new()
arrive.agent = agent arrive.agent = agent
arrive.target = target arrive.target = target

View File

@ -5,39 +5,39 @@ var draw_proximity: bool
var _boundary_right: float var _boundary_right: float
var _boundary_bottom: float var _boundary_bottom: float
var _radius: float var _radius: float
var _accel := GSAITargetAcceleration.new() var _accel := GDGSAITargetAcceleration.new()
var _velocity := Vector2.ZERO var _velocity := Vector2.ZERO
var _direction := Vector2() var _direction := Vector2()
var _drag := 0.1 var _drag := 0.1
var _color := Color(0.4, 1.0, 0.89, 0.3) var _color := Color(0.4, 1.0, 0.89, 0.3)
onready var collision := $CollisionShape2D onready var collision := $CollisionShape2D
var agent :GSAIKinematicBody2DAgent= null var agent :GDGSAIKinematicBody2DAgent= null
var proximity :GSAIRadiusProximity= null var proximity :GDGSAIRadiusProximity= null
var avoid :GSAIAvoidCollisions= null var avoid :GDGSAIAvoidCollisions= null
var target :GSAIAgentLocation= null var target :GDGSAIAgentLocation= null
var seek :GSAISeek= null var seek :GDGSAISeek= null
var priority :GSAIPriority= null var priority :GDGSAIPriority= null
func _ready() -> void: func _ready() -> void:
agent = GSAIKinematicBody2DAgent.new() agent = GDGSAIKinematicBody2DAgent.new()
agent.body = self agent.body = self
proximity = GSAIRadiusProximity.new() proximity = GDGSAIRadiusProximity.new()
proximity.agent = agent proximity.agent = agent
proximity.radius = 140 proximity.radius = 140
avoid = GSAIAvoidCollisions.new() avoid = GDGSAIAvoidCollisions.new()
avoid.agent = agent avoid.agent = agent
avoid.proximity = proximity avoid.proximity = proximity
target = GSAIAgentLocation.new() target = GDGSAIAgentLocation.new()
seek = GSAISeek.new() seek = GDGSAISeek.new()
seek.agent = agent seek.agent = agent
seek.target = target seek.target = target
priority = GSAIPriority.new() priority = GDGSAIPriority.new()
priority.agent = agent priority.agent = agent
priority.zero_threshold = 0.0001 priority.zero_threshold = 0.0001

View File

@ -2,7 +2,7 @@ extends KinematicBody2D
var speed: float var speed: float
onready var agent := GSAIAgentLocation.new() onready var agent := GDGSAIAgentLocation.new()
func _physics_process(_delta: float) -> void: func _physics_process(_delta: float) -> void:

View File

@ -1,9 +1,9 @@
extends KinematicBody2D extends KinematicBody2D
var face: GSAIFace var face: GDGSAIFace
var agent := GSAIKinematicBody2DAgent.new() var agent := GDGSAIKinematicBody2DAgent.new()
var _accel := GSAITargetAcceleration.new() var _accel := GDGSAITargetAcceleration.new()
var _angular_drag := 0.1 var _angular_drag := 0.1
var _cannon: Rect2 var _cannon: Rect2
var _color: Color var _color: Color
@ -29,13 +29,13 @@ func _draw() -> void:
func setup( func setup(
player_agent: GSAIAgentLocation, player_agent: GDGSAIAgentLocation,
align_tolerance: float, align_tolerance: float,
deceleration_radius: float, deceleration_radius: float,
angular_accel_max: float, angular_accel_max: float,
angular_speed_max: float angular_speed_max: float
) -> void: ) -> void:
face = GSAIFace.new() face = GDGSAIFace.new()
face.agent = agent face.agent = agent
face.target = player_agent face.target = player_agent

View File

@ -1,13 +1,13 @@
extends KinematicBody2D extends KinematicBody2D
var _velocity := Vector2.ZERO var _velocity := Vector2.ZERO
var _accel := GSAITargetAcceleration.new() var _accel := GDGSAITargetAcceleration.new()
var _valid := false var _valid := false
var _drag := 0.1 var _drag := 0.1
var agent := GSAIKinematicBody2DAgent.new() var agent := GDGSAIKinematicBody2DAgent.new()
var path := GSAIPath.new() var path := GDGSAIPath.new()
var follow := GSAIFollowPath.new() var follow := GDGSAIFollowPath.new()
func _ready() -> void: func _ready() -> void:
agent.body = self agent.body = self

View File

@ -1,11 +1,11 @@
extends KinematicBody2D extends KinematicBody2D
var separation: GSAISeparation var separation: GDGSAISeparation
var cohesion: GSAICohesion var cohesion: GDGSAICohesion
var proximity: GSAIRadiusProximity var proximity: GDGSAIRadiusProximity
var agent :GSAIKinematicBody2DAgent = null var agent :GDGSAIKinematicBody2DAgent = null
var blend : GSAIBlend = null var blend : GDGSAIBlend = null
var acceleration : GSAITargetAcceleration = null var acceleration : GDGSAITargetAcceleration = null
var draw_proximity := false var draw_proximity := false
var _color := Color.red var _color := Color.red
@ -14,13 +14,13 @@ var _velocity := Vector2()
onready var collision_shape := $CollisionShape2D onready var collision_shape := $CollisionShape2D
func _init() -> void: func _init() -> void:
agent = GSAIKinematicBody2DAgent.new() agent = GDGSAIKinematicBody2DAgent.new()
agent.body = self agent.body = self
blend = GSAIBlend.new() blend = GDGSAIBlend.new()
blend.agent = agent blend.agent = agent
acceleration = GSAITargetAcceleration.new() acceleration = GDGSAITargetAcceleration.new()
func setup( func setup(
linear_speed_max: float, linear_speed_max: float,
@ -37,16 +37,16 @@ func setup(
agent.linear_speed_max = linear_speed_max agent.linear_speed_max = linear_speed_max
agent.linear_drag_percentage = 0.1 agent.linear_drag_percentage = 0.1
proximity = GSAIRadiusProximity.new() proximity = GDGSAIRadiusProximity.new()
proximity.agent = agent proximity.agent = agent
proximity.radius = proximity_radius proximity.radius = proximity_radius
separation = GSAISeparation.new() separation = GDGSAISeparation.new()
separation.agent = agent separation.agent = agent
separation.proximity = proximity separation.proximity = proximity
separation.decay_coefficient = separation_decay_coefficient separation.decay_coefficient = separation_decay_coefficient
cohesion = GSAICohesion.new() cohesion = GDGSAICohesion.new()
cohesion.agent = agent cohesion.agent = agent
cohesion.proximity = proximity cohesion.proximity = proximity

View File

@ -11,7 +11,7 @@ export var linear_drag := 0.025
var _linear_velocity := Vector2() var _linear_velocity := Vector2()
var _angular_velocity := 0.0 var _angular_velocity := 0.0
onready var agent := GSAISteeringAgent.new() onready var agent := GDGSAISteeringAgent.new()
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:

View File

@ -3,22 +3,22 @@ extends KinematicBody2D
export var use_seek: bool = false export var use_seek: bool = false
var _blend: GSAIBlend var _blend: GDGSAIBlend
var _linear_drag_coefficient := 0.025 var _linear_drag_coefficient := 0.025
var _angular_drag := 0.1 var _angular_drag := 0.1
var _direction_face := GSAIAgentLocation.new() var _direction_face := GDGSAIAgentLocation.new()
var agent : GSAIKinematicBody2DAgent= null var agent : GDGSAIKinematicBody2DAgent= null
var accel : GSAITargetAcceleration = null var accel : GDGSAITargetAcceleration = null
var player_agent : GSAISteeringAgent = null var player_agent : GDGSAISteeringAgent = null
func _ready() -> void: func _ready() -> void:
agent = GSAIKinematicBody2DAgent.new() agent = GDGSAIKinematicBody2DAgent.new()
agent.body = self agent.body = self
accel = GSAITargetAcceleration.new() accel = GDGSAITargetAcceleration.new()
player_agent = owner.find_node("Player", true, false).agent player_agent = owner.find_node("Player", true, false).agent
agent.calculate_velocities = false agent.calculate_velocities = false
@ -38,36 +38,36 @@ func _physics_process(delta: float) -> void:
rotation += agent.angular_velocity * delta rotation += agent.angular_velocity * delta
var linear_velocity := ( var linear_velocity := (
GSAIUtils.to_vector2(agent.linear_velocity) GDGSAIUtils.to_vector2(agent.linear_velocity)
+ (GSAIUtils.angle_to_vector2(rotation) * -agent.linear_acceleration_max * delta) + (GDGSAIUtils.angle_to_vector2(rotation) * -agent.linear_acceleration_max * delta)
) )
linear_velocity = linear_velocity.clamped(agent.linear_speed_max) linear_velocity = linear_velocity.clamped(agent.linear_speed_max)
linear_velocity = linear_velocity.linear_interpolate(Vector2.ZERO, _linear_drag_coefficient) linear_velocity = linear_velocity.linear_interpolate(Vector2.ZERO, _linear_drag_coefficient)
linear_velocity = move_and_slide(linear_velocity) linear_velocity = move_and_slide(linear_velocity)
agent.linear_velocity = GSAIUtils.to_vector3(linear_velocity) agent.linear_velocity = GDGSAIUtils.to_vector3(linear_velocity)
func setup(predict_time: float, linear_speed_max: float, linear_accel_max: float) -> void: func setup(predict_time: float, linear_speed_max: float, linear_accel_max: float) -> void:
var behavior: GSAISteeringBehavior var behavior: GDGSAISteeringBehavior
if use_seek: if use_seek:
behavior = GSAISeek.new() behavior = GDGSAISeek.new()
behavior.agent = agent behavior.agent = agent
behavior.target = player_agent behavior.target = player_agent
else: else:
behavior = GSAIPursue.new() behavior = GDGSAIPursue.new()
behavior.agent = agent behavior.agent = agent
behavior.target = player_agent behavior.target = player_agent
behavior.predict_time_max = predict_time behavior.predict_time_max = predict_time
var orient_behavior : GSAIFace = GSAIFace.new() var orient_behavior : GDGSAIFace = GDGSAIFace.new()
orient_behavior.agent = agent orient_behavior.agent = agent
orient_behavior.target = _direction_face orient_behavior.target = _direction_face
orient_behavior.alignment_tolerance = deg2rad(5) orient_behavior.alignment_tolerance = deg2rad(5)
orient_behavior.deceleration_radius = deg2rad(30) orient_behavior.deceleration_radius = deg2rad(30)
_blend = GSAIBlend.new() _blend = GDGSAIBlend.new()
_blend.agent = agent _blend.agent = agent
_blend.add_behavior(behavior, 1) _blend.add_behavior(behavior, 1)
_blend.add_behavior(orient_behavior, 1) _blend.add_behavior(orient_behavior, 1)

View File

@ -18,52 +18,52 @@ var linear_drag := 0.1
var angular_drag := 0.1 var angular_drag := 0.1
# Holds the linear and angular components calculated by our steering behaviors. # Holds the linear and angular components calculated by our steering behaviors.
var acceleration : GSAITargetAcceleration = null var acceleration : GDGSAITargetAcceleration = null
onready var current_health := health_max onready var current_health := health_max
# GSAISteeringAgent holds our agent's position, orientation, maximum speed and acceleration. # GDGSAISteeringAgent holds our agent's position, orientation, maximum speed and acceleration.
var agent : GSAISteeringAgent = null var agent : GDGSAISteeringAgent = null
var player: Node = null var player: Node = null
# This assumes that our player class will keep its own agent updated. # This assumes that our player class will keep its own agent updated.
var player_agent : GSAISteeringAgent = null var player_agent : GDGSAISteeringAgent = null
# Proximities represent an area with which an agent can identify where neighbors in its relevant # Proximities represent an area with which an agent can identify where neighbors in its relevant
# group are. In our case, the group will feature the player, which will be used to avoid a # group are. In our case, the group will feature the player, which will be used to avoid a
# collision with them. We use a radius proximity so the player is only relevant inside 100 pixels. # collision with them. We use a radius proximity so the player is only relevant inside 100 pixels.
var proximity : GSAIRadiusProximity = null var proximity : GDGSAIRadiusProximity = null
# GSAIBlend combines behaviors together, calculating all of their acceleration together and adding # GDGSAIBlend combines behaviors together, calculating all of their acceleration together and adding
# them together, multiplied by a strength. We will have one for fleeing, and one for pursuing, # them together, multiplied by a strength. We will have one for fleeing, and one for pursuing,
# toggling them depending on the agent's health. Since we want the agent to rotate AND move, then # toggling them depending on the agent's health. Since we want the agent to rotate AND move, then
# we aim to blend them together. # we aim to blend them together.
var flee_blend : GSAIBlend = null var flee_blend : GDGSAIBlend = null
var pursue_blend : GSAIBlend = null var pursue_blend : GDGSAIBlend = null
# GSAIPriority will be the main steering behavior we use. It holds sub-behaviors and will pick the # GDGSAIPriority will be the main steering behavior we use. It holds sub-behaviors and will pick the
# first one that returns non-zero acceleration, ignoring any afterwards. # first one that returns non-zero acceleration, ignoring any afterwards.
var priority : GSAIPriority = null var priority : GDGSAIPriority = null
func _ready() -> void: func _ready() -> void:
acceleration = GSAITargetAcceleration.new() acceleration = GDGSAITargetAcceleration.new()
agent = GSAISteeringAgent.new() agent = GDGSAISteeringAgent.new()
player = get_tree().get_nodes_in_group("Player")[0] player = get_tree().get_nodes_in_group("Player")[0]
player_agent = player.agent player_agent = player.agent
proximity = GSAIRadiusProximity.new() proximity = GDGSAIRadiusProximity.new()
proximity.agent = agent proximity.agent = agent
proximity.agents = [ player_agent ] proximity.agents = [ player_agent ]
proximity.radius = 100 proximity.radius = 100
flee_blend = GSAIBlend.new() flee_blend = GDGSAIBlend.new()
flee_blend.agent = agent flee_blend.agent = agent
pursue_blend = GSAIBlend.new() pursue_blend = GDGSAIBlend.new()
pursue_blend.agent = agent pursue_blend.agent = agent
priority = GSAIPriority.new() priority = GDGSAIPriority.new()
priority.agent = agent priority.agent = agent
# ---------- Configuration for our agent ---------- # ---------- Configuration for our agent ----------
@ -77,26 +77,26 @@ func _ready() -> void:
# ---------- Configuration for our behaviors ---------- # ---------- Configuration for our behaviors ----------
# Pursue will happen while the agent is in good health. It produces acceleration that takes # Pursue will happen while the agent is in good health. It produces acceleration that takes
# the agent on an intercept course with the target, predicting its position in the future. # the agent on an intercept course with the target, predicting its position in the future.
var pursue : GSAIPursue = GSAIPursue.new() var pursue : GDGSAIPursue = GDGSAIPursue.new()
pursue.agent = agent pursue.agent = agent
pursue.target = player_agent pursue.target = player_agent
pursue.predict_time_max = 1.5 pursue.predict_time_max = 1.5
# Flee will happen while the agent is in bad health, so will start disabled. It produces # Flee will happen while the agent is in bad health, so will start disabled. It produces
# acceleration that takes the agent directly away from the target with no prediction. # acceleration that takes the agent directly away from the target with no prediction.
var flee : GSAIFlee = GSAIFlee.new() var flee : GDGSAIFlee = GDGSAIFlee.new()
flee.agent = agent flee.agent = agent
flee.target = player_agent flee.target = player_agent
# AvoidCollision tries to keep the agent from running into any of the neighbors found in its # AvoidCollision tries to keep the agent from running into any of the neighbors found in its
# proximity group. In our case, this will be the player, if they are close enough. # proximity group. In our case, this will be the player, if they are close enough.
var avoid : GSAIAvoidCollisions = GSAIAvoidCollisions.new() var avoid : GDGSAIAvoidCollisions = GDGSAIAvoidCollisions.new()
avoid.agent = agent avoid.agent = agent
avoid.proximity = proximity avoid.proximity = proximity
# Face turns the agent to keep looking towards its target. It will be enabled while the agent # Face turns the agent to keep looking towards its target. It will be enabled while the agent
# is not fleeing due to low health. It tries to arrive 'on alignment' with 0 remaining velocity. # is not fleeing due to low health. It tries to arrive 'on alignment' with 0 remaining velocity.
var face : GSAIFace = GSAIFace.new() var face : GDGSAIFace = GDGSAIFace.new()
face.agent = agent face.agent = agent
face.target = player_agent face.target = player_agent
@ -108,7 +108,7 @@ func _ready() -> void:
# LookWhereYouGo turns the agent to keep looking towards its direction of travel. It will only # LookWhereYouGo turns the agent to keep looking towards its direction of travel. It will only
# be enabled while the agent is at low health. # be enabled while the agent is at low health.
var look : GSAILookWhereYouGo = GSAILookWhereYouGo.new() var look : GDGSAILookWhereYouGo = GDGSAILookWhereYouGo.new()
look.agent = agent look.agent = agent
# How close for the agent to be 'aligned', if not exact # How close for the agent to be 'aligned', if not exact
look.alignment_tolerance = deg2rad(5) look.alignment_tolerance = deg2rad(5)

View File

@ -10,18 +10,18 @@ var velocity := Vector2.ZERO
var angular_velocity := 0.0 var angular_velocity := 0.0
var direction := Vector2.RIGHT var direction := Vector2.RIGHT
var agent : GSAISteeringAgent = null var agent : GDGSAISteeringAgent = null
var proxy_target : GSAIAgentLocation = null var proxy_target : GDGSAIAgentLocation = null
var face : GSAIFace = null var face : GDGSAIFace = null
onready var accel := GSAITargetAcceleration.new() onready var accel := GDGSAITargetAcceleration.new()
onready var bullets := owner.get_node("Bullets") onready var bullets := owner.get_node("Bullets")
func _ready() -> void: func _ready() -> void:
agent = GSAISteeringAgent.new() agent = GDGSAISteeringAgent.new()
proxy_target = GSAIAgentLocation.new() proxy_target = GDGSAIAgentLocation.new()
face = GSAIFace.new() face = GDGSAIFace.new()
face.agent = agent face.agent = agent
face.target = proxy_target face.target = proxy_target
@ -45,7 +45,7 @@ func _physics_process(delta: float) -> void:
var movement := get_movement() var movement := get_movement()
direction = GSAIUtils.angle_to_vector2(rotation) direction = GDGSAIUtils.angle_to_vector2(rotation)
velocity += direction * acceleration_max * movement * delta velocity += direction * acceleration_max * movement * delta
velocity = velocity.clamped(speed_max) velocity = velocity.clamped(speed_max)

View File

@ -2,11 +2,11 @@ extends KinematicBody2D
# Class to control the player in basic left/right up/down movement. # Class to control the player in basic left/right up/down movement.
var speed: float var speed: float
onready var agent := GSAIAgentLocation.new() onready var agent := GDGSAIAgentLocation.new()
func _ready() -> void: func _ready() -> void:
agent.position = GSAIUtils.to_vector3(global_position) agent.position = GDGSAIUtils.to_vector3(global_position)
func _physics_process(_delta: float) -> void: func _physics_process(_delta: float) -> void:
@ -16,7 +16,7 @@ func _physics_process(_delta: float) -> void:
# warning-ignore:return_value_discarded # warning-ignore:return_value_discarded
move_and_slide(movement * speed) move_and_slide(movement * speed)
agent.position = GSAIUtils.to_vector3(global_position) agent.position = GDGSAIUtils.to_vector3(global_position)
func _get_movement() -> Vector2: func _get_movement() -> Vector2:

View File

@ -1,28 +1,28 @@
extends KinematicBody2D extends KinematicBody2D
var player_agent: GSAIAgentLocation var player_agent: GDGSAIAgentLocation
var velocity := Vector2.ZERO var velocity := Vector2.ZERO
var start_speed: float var start_speed: float
var start_accel: float var start_accel: float
var use_seek := true var use_seek := true
var agent : GSAIKinematicBody2DAgent = null var agent : GDGSAIKinematicBody2DAgent = null
var accel : GSAITargetAcceleration = null var accel : GDGSAITargetAcceleration = null
var seek : GSAISeek = null var seek : GDGSAISeek = null
var flee : GSAIFlee = null var flee : GDGSAIFlee = null
func _ready() -> void: func _ready() -> void:
agent = GSAIKinematicBody2DAgent.new() agent = GDGSAIKinematicBody2DAgent.new()
agent.body = self agent.body = self
accel = GSAITargetAcceleration.new() accel = GDGSAITargetAcceleration.new()
seek = GSAISeek.new() seek = GDGSAISeek.new()
seek.agent = agent seek.agent = agent
seek.target = player_agent seek.target = player_agent
flee = GSAIFlee.new() flee = GDGSAIFlee.new()
flee.agent = agent flee.agent = agent
flee.target = player_agent flee.target = player_agent

View File

@ -1,5 +1,5 @@
extends GSAISpecializedAgent extends GDGSAISpecializedAgent
class_name GSAIKinematicBody2DAgent class_name GDGSAIKinematicBody2DAgent
# A specialized steering agent that updates itself every frame so the user does # A specialized steering agent that updates itself every frame so the user does
# not have to using a KinematicBody2D # not have to using a KinematicBody2D
@ -31,7 +31,7 @@ func _body_ready() -> void:
# Moves the agent's `body` by target `acceleration`. # Moves the agent's `body` by target `acceleration`.
# @tags - virtual # @tags - virtual
func _apply_steering(acceleration: GSAITargetAcceleration, delta: float) -> void: func _apply_steering(acceleration: GDGSAITargetAcceleration, delta: float) -> void:
applied_steering = true applied_steering = true
if movement_type == MovementType.COLLIDE: if movement_type == MovementType.COLLIDE:
@ -53,7 +53,7 @@ func _apply_sliding_steering(accel: Vector3, delta: float) -> void:
if !_body.is_inside_tree() or _body.get_tree().paused: if !_body.is_inside_tree() or _body.get_tree().paused:
return return
var velocity : Vector2 = GSAIUtils.to_vector2(linear_velocity + accel * delta).clamped(linear_speed_max) var velocity : Vector2 = GDGSAIUtils.to_vector2(linear_velocity + accel * delta).clamped(linear_speed_max)
if apply_linear_drag: if apply_linear_drag:
velocity = velocity.linear_interpolate(Vector2.ZERO, linear_drag_percentage) velocity = velocity.linear_interpolate(Vector2.ZERO, linear_drag_percentage)
@ -61,7 +61,7 @@ func _apply_sliding_steering(accel: Vector3, delta: float) -> void:
velocity = _body.move_and_slide(velocity) velocity = _body.move_and_slide(velocity)
if calculate_velocities: if calculate_velocities:
linear_velocity = GSAIUtils.to_vector3(velocity) linear_velocity = GDGSAIUtils.to_vector3(velocity)
func _apply_collide_steering(accel: Vector3, delta: float) -> void: func _apply_collide_steering(accel: Vector3, delta: float) -> void:
@ -69,12 +69,12 @@ func _apply_collide_steering(accel: Vector3, delta: float) -> void:
if !_body: if !_body:
return return
var velocity : Vector3 = GSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max) var velocity : Vector3 = GDGSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max)
if apply_linear_drag: if apply_linear_drag:
velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage) velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage)
# warning-ignore:return_value_discarded # warning-ignore:return_value_discarded
_body.move_and_collide(GSAIUtils.to_vector2(velocity) * delta) _body.move_and_collide(GDGSAIUtils.to_vector2(velocity) * delta)
if calculate_velocities: if calculate_velocities:
linear_velocity = velocity linear_velocity = velocity
@ -85,12 +85,12 @@ func _apply_position_steering(accel: Vector3, delta: float) -> void:
if !_body: if !_body:
return return
var velocity : Vector3 = GSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max) var velocity : Vector3 = GDGSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max)
if apply_linear_drag: if apply_linear_drag:
velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage) velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage)
_body.global_position += GSAIUtils.to_vector2(velocity) * delta _body.global_position += GDGSAIUtils.to_vector2(velocity) * delta
if calculate_velocities: if calculate_velocities:
linear_velocity = velocity linear_velocity = velocity
@ -125,7 +125,7 @@ func _set_body(value: KinematicBody2D) -> void:
_last_position = value.global_position _last_position = value.global_position
last_orientation = value.rotation last_orientation = value.rotation
position = GSAIUtils.to_vector3(_last_position) position = GDGSAIUtils.to_vector3(_last_position)
orientation = last_orientation orientation = last_orientation
if !had_body: if !had_body:
@ -143,14 +143,14 @@ func _on_SceneTree_physics_frame() -> void:
var current_position : Vector2 = _body.global_position var current_position : Vector2 = _body.global_position
var current_orientation : float = _body.rotation var current_orientation : float = _body.rotation
position = GSAIUtils.to_vector3(current_position) position = GDGSAIUtils.to_vector3(current_position)
orientation = current_orientation orientation = current_orientation
if calculate_velocities: if calculate_velocities:
if applied_steering: if applied_steering:
applied_steering = false applied_steering = false
else: else:
linear_velocity = GSAIUtils.clampedv3(GSAIUtils.to_vector3(current_position - _last_position), linear_speed_max) linear_velocity = GDGSAIUtils.clampedv3(GDGSAIUtils.to_vector3(current_position - _last_position), linear_speed_max)
if apply_linear_drag: if apply_linear_drag:
linear_velocity = linear_velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage) linear_velocity = linear_velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage)

View File

@ -1,5 +1,5 @@
extends GSAISpecializedAgent extends GDGSAISpecializedAgent
class_name GSAIKinematicBody3DAgent class_name GDGSAIKinematicBody3DAgent
# A specialized steering agent that updates itself every frame so the user does # A specialized steering agent that updates itself every frame so the user does
# not have to using a KinematicBody # not have to using a KinematicBody
@ -31,7 +31,7 @@ func _body_ready() -> void:
# Moves the agent's `body` by target `acceleration`. # Moves the agent's `body` by target `acceleration`.
# @tags - virtual # @tags - virtual
func _apply_steering(acceleration: GSAITargetAcceleration, delta: float) -> void: func _apply_steering(acceleration: GDGSAITargetAcceleration, delta: float) -> void:
applied_steering = true applied_steering = true
if movement_type == MovementType.COLLIDE: if movement_type == MovementType.COLLIDE:
_apply_collide_steering(acceleration.linear, delta) _apply_collide_steering(acceleration.linear, delta)
@ -48,7 +48,7 @@ func _apply_sliding_steering(accel: Vector3, delta: float) -> void:
if !_body: if !_body:
return return
var velocity : Vector3 = GSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max) var velocity : Vector3 = GDGSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max)
if apply_linear_drag: if apply_linear_drag:
velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage) velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage)
@ -63,7 +63,7 @@ func _apply_collide_steering(accel: Vector3, delta: float) -> void:
if !_body: if !_body:
return return
var velocity : Vector3 = GSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max) var velocity : Vector3 = GDGSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max)
if apply_linear_drag: if apply_linear_drag:
velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage) velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage)
@ -79,7 +79,7 @@ func _apply_position_steering(accel: Vector3, delta: float) -> void:
if !_body: if !_body:
return return
var velocity : Vector3 = GSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max) var velocity : Vector3 = GDGSAIUtils.clampedv3(linear_velocity + accel * delta, linear_speed_max)
if apply_linear_drag: if apply_linear_drag:
velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage) velocity = velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage)
@ -146,7 +146,7 @@ func _on_SceneTree_physics_frame() -> void:
if applied_steering: if applied_steering:
applied_steering = false applied_steering = false
else: else:
linear_velocity = GSAIUtils.clampedv3(current_position - _last_position, linear_speed_max) linear_velocity = GDGSAIUtils.clampedv3(current_position - _last_position, linear_speed_max)
if apply_linear_drag: if apply_linear_drag:
linear_velocity = linear_velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage) linear_velocity = linear_velocity.linear_interpolate(Vector3.ZERO, linear_drag_percentage)

View File

@ -1,5 +1,5 @@
extends GSAISpecializedAgent extends GDGSAISpecializedAgent
class_name GSAIRigidBody2DAgent class_name GDGSAIRigidBody2DAgent
# A specialized steering agent that updates itself every frame so the user does # A specialized steering agent that updates itself every frame so the user does
# not have to using a RigidBody2D # not have to using a RigidBody2D
@ -19,16 +19,16 @@ func _body_ready() -> void:
# Moves the agent's `body` by target `acceleration`. # Moves the agent's `body` by target `acceleration`.
# @tags - virtual # @tags - virtual
func _apply_steering(acceleration : GSAITargetAcceleration, _delta : float) -> void: func _apply_steering(acceleration : GDGSAITargetAcceleration, _delta : float) -> void:
var _body: RigidBody2D = _body_ref.get_ref() var _body: RigidBody2D = _body_ref.get_ref()
if not _body: if not _body:
return return
applied_steering = true applied_steering = true
_body.apply_central_impulse(GSAIUtils.to_vector2(acceleration.linear)) _body.apply_central_impulse(GDGSAIUtils.to_vector2(acceleration.linear))
_body.apply_torque_impulse(acceleration.angular) _body.apply_torque_impulse(acceleration.angular)
if calculate_velocities: if calculate_velocities:
linear_velocity = GSAIUtils.to_vector3(_body.linear_velocity) linear_velocity = GDGSAIUtils.to_vector3(_body.linear_velocity)
angular_velocity = _body.angular_velocity angular_velocity = _body.angular_velocity
@ -44,7 +44,7 @@ func _set_body(value: RigidBody2D) -> void:
_last_position = value.global_position _last_position = value.global_position
last_orientation = value.rotation last_orientation = value.rotation
position = GSAIUtils.to_vector3(_last_position) position = GDGSAIUtils.to_vector3(_last_position)
orientation = last_orientation orientation = last_orientation
if !had_body: if !had_body:
@ -65,12 +65,12 @@ func _on_SceneTree_frame() -> void:
var current_position : Vector2 = _body.global_position var current_position : Vector2 = _body.global_position
var current_orientation : float = _body.rotation var current_orientation : float = _body.rotation
position = GSAIUtils.to_vector3(current_position) position = GDGSAIUtils.to_vector3(current_position)
orientation = current_orientation orientation = current_orientation
if calculate_velocities: if calculate_velocities:
if applied_steering: if applied_steering:
applied_steering = false applied_steering = false
else: else:
linear_velocity = GSAIUtils.to_vector3(_body.linear_velocity) linear_velocity = GDGSAIUtils.to_vector3(_body.linear_velocity)
angular_velocity = _body.angular_velocity angular_velocity = _body.angular_velocity

View File

@ -1,5 +1,5 @@
extends GSAISpecializedAgent extends GDGSAISpecializedAgent
class_name GSAIRigidBody3DAgent class_name GDGSAIRigidBody3DAgent
# A specialized steering agent that updates itself every frame so the user does # A specialized steering agent that updates itself every frame so the user does
# not have to using a RigidBody # not have to using a RigidBody
@ -18,7 +18,7 @@ func _body_ready() -> void:
# Moves the agent's `body` by target `acceleration`. # Moves the agent's `body` by target `acceleration`.
# @tags - virtual # @tags - virtual
func _apply_steering(acceleration: GSAITargetAcceleration, _delta: float) -> void: func _apply_steering(acceleration: GDGSAITargetAcceleration, _delta: float) -> void:
var _body: RigidBody = _body_ref.get_ref() var _body: RigidBody = _body_ref.get_ref()
if !_body: if !_body:
return return

View File

@ -1,5 +1,5 @@
extends GSAISteeringAgent extends GDGSAISteeringAgent
class_name GSAISpecializedAgent class_name GDGSAISpecializedAgent
# A base class for a specialized steering agent that updates itself every frame # A base class for a specialized steering agent that updates itself every frame
# so the user does not have to. All other specialized agents derive from this. # so the user does not have to. All other specialized agents derive from this.
@ -33,10 +33,10 @@ var angular_drag_percentage : float = 0.0
var last_orientation : float = 0.0 var last_orientation : float = 0.0
var applied_steering : bool = false var applied_steering : bool = false
func apply_steering(_acceleration : GSAITargetAcceleration, _delta : float) -> void: func apply_steering(_acceleration : GDGSAITargetAcceleration, _delta : float) -> void:
call("_apply_steering", _acceleration, _delta) call("_apply_steering", _acceleration, _delta)
# Moves the agent's body by target `acceleration`. # Moves the agent's body by target `acceleration`.
# @tags - virtual # @tags - virtual
func _apply_steering(_acceleration : GSAITargetAcceleration, _delta : float) -> void: func _apply_steering(_acceleration : GDGSAITargetAcceleration, _delta : float) -> void:
pass pass

View File

@ -1,12 +1,12 @@
class_name GSAIArrive class_name GDGSAIArrive
extends GSAISteeringBehavior extends GDGSAISteeringBehavior
# Calculates acceleration to take an agent to its target's location. The # Calculates acceleration to take an agent to its target's location. The
# calculation attempts to arrive with zero remaining velocity. # calculation attempts to arrive with zero remaining velocity.
# @category - Individual behaviors # @category - Individual behaviors
# Target agent to arrive to. # Target agent to arrive to.
var target : GSAIAgentLocation var target : GDGSAIAgentLocation
# Distance from the target for the agent to be considered successfully # Distance from the target for the agent to be considered successfully
# arrived. # arrived.
var arrival_tolerance : float = 0.0 var arrival_tolerance : float = 0.0
@ -15,10 +15,10 @@ var deceleration_radius : float = 0.0
# Represents the time it takes to change acceleration. # Represents the time it takes to change acceleration.
var time_to_reach : float = 0.1 var time_to_reach : float = 0.1
func arrive(acceleration : GSAITargetAcceleration, target_position : Vector3) -> void: func arrive(acceleration : GDGSAITargetAcceleration, target_position : Vector3) -> void:
call("_arrive", acceleration, target_position) call("_arrive", acceleration, target_position)
func _arrive(acceleration : GSAITargetAcceleration, target_position : Vector3) -> void: func _arrive(acceleration : GDGSAITargetAcceleration, target_position : Vector3) -> void:
var to_target : Vector3 = target_position - agent.position var to_target : Vector3 = target_position - agent.position
var distance : float = to_target.length() var distance : float = to_target.length()
@ -34,8 +34,8 @@ func _arrive(acceleration : GSAITargetAcceleration, target_position : Vector3) -
desired_velocity = ((desired_velocity - agent.linear_velocity) * 1.0 / time_to_reach) desired_velocity = ((desired_velocity - agent.linear_velocity) * 1.0 / time_to_reach)
acceleration.linear = GSAIUtils.clampedv3(desired_velocity, agent.linear_acceleration_max) acceleration.linear = GDGSAIUtils.clampedv3(desired_velocity, agent.linear_acceleration_max)
acceleration.angular = 0 acceleration.angular = 0
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void: func _calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
arrive(acceleration, target.position) arrive(acceleration, target.position)

View File

@ -1,18 +1,18 @@
class_name GSAIAvoidCollisions class_name GDGSAIAvoidCollisions
extends GSAIGroupBehavior extends GDGSAIGroupBehavior
# Steers the agent to avoid obstacles in its path. Approximates obstacles as # Steers the agent to avoid obstacles in its path. Approximates obstacles as
# spheres. # spheres.
# @category - Group behaviors # @category - Group behaviors
var _first_neighbor: GSAISteeringAgent var _first_neighbor: GDGSAISteeringAgent
var _shortest_time : float = 0.0 var _shortest_time : float = 0.0
var _first_minimum_separation : float = 0.0 var _first_minimum_separation : float = 0.0
var _first_distance : float = 0.0 var _first_distance : float = 0.0
var _first_relative_position : Vector3 var _first_relative_position : Vector3
var _first_relative_velocity : Vector3 var _first_relative_velocity : Vector3
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void: func _calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
_shortest_time = INF _shortest_time = INF
_first_neighbor = null _first_neighbor = null
_first_minimum_separation = 0 _first_minimum_separation = 0
@ -35,7 +35,7 @@ func _calculate_steering(acceleration: GSAITargetAcceleration) -> void:
# 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.
# @tags - virtual # @tags - virtual
func _report_neighbor(neighbor: GSAISteeringAgent) -> bool: func _report_neighbor(neighbor: GDGSAISteeringAgent) -> bool:
var relative_position : Vector3 = neighbor.position - agent.position var relative_position : Vector3 = neighbor.position - agent.position
var relative_velocity : Vector3 = neighbor.linear_velocity - agent.linear_velocity var relative_velocity : Vector3 = neighbor.linear_velocity - agent.linear_velocity
var relative_speed_squared : float = relative_velocity.length_squared() var relative_speed_squared : float = relative_velocity.length_squared()

View File

@ -1,21 +1,21 @@
class_name GSAIBlend class_name GDGSAIBlend
extends GSAISteeringBehavior extends GDGSAISteeringBehavior
# Blends multiple steering behaviors into one, and returns a weighted # Blends multiple steering behaviors into one, and returns a weighted
# acceleration from their calculations. # acceleration from their calculations.
# #
# Stores the behaviors internally as dictionaries of the form # Stores the behaviors internally as dictionaries of the form
# { # {
# behavior : GSAISteeringBehavior, # behavior : GDGSAISteeringBehavior,
# weight : float # weight : float
# } # }
# @category - Combination behaviors # @category - Combination behaviors
var _behaviors : Array = Array() var _behaviors : Array = Array()
var _accel : GSAITargetAcceleration = GSAITargetAcceleration.new() var _accel : GDGSAITargetAcceleration = GDGSAITargetAcceleration.new()
# Appends a behavior to the internal array along with its `weight`. # Appends a behavior to the internal array along with its `weight`.
func add_behavior(behavior : GSAISteeringBehavior, weight : float) -> void: func add_behavior(behavior : GDGSAISteeringBehavior, weight : float) -> void:
behavior.agent = agent behavior.agent = agent
var dict : Dictionary = Dictionary() var dict : Dictionary = Dictionary()
@ -48,10 +48,10 @@ func remove_behavior(index : int) -> void:
func get_behaviour_count() -> int: func get_behaviour_count() -> int:
return _behaviors.size() return _behaviors.size()
func get_accel() -> GSAITargetAcceleration: func get_accel() -> GDGSAITargetAcceleration:
return _accel return _accel
func _calculate_steering(blended_accel: GSAITargetAcceleration) -> void: func _calculate_steering(blended_accel: GDGSAITargetAcceleration) -> void:
blended_accel.set_zero() blended_accel.set_zero()
for i in range(_behaviors.size()): for i in range(_behaviors.size()):
@ -60,5 +60,5 @@ func _calculate_steering(blended_accel: GSAITargetAcceleration) -> void:
blended_accel.add_scaled_accel(_accel, bw.weight) blended_accel.add_scaled_accel(_accel, bw.weight)
blended_accel.linear = GSAIUtils.clampedv3(blended_accel.linear, agent.linear_acceleration_max) blended_accel.linear = GDGSAIUtils.clampedv3(blended_accel.linear, agent.linear_acceleration_max)
blended_accel.angular = clamp(blended_accel.angular, -agent.angular_acceleration_max, agent.angular_acceleration_max) blended_accel.angular = clamp(blended_accel.angular, -agent.angular_acceleration_max, agent.angular_acceleration_max)

View File

@ -1,14 +1,14 @@
class_name GSAICohesion class_name GDGSAICohesion
extends GSAIGroupBehavior extends GDGSAIGroupBehavior
# Calculates an acceleration that attempts to move the agent towards the center # Calculates an acceleration that attempts to move the agent towards the center
# of mass of the agents in the area defined by the `GSAIProximity`. # of mass of the agents in the area defined by the `GDGSAIProximity`.
# @category - Group behaviors # @category - Group behaviors
var _center_of_mass: Vector3 var _center_of_mass: Vector3
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void: func _calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
acceleration.set_zero() acceleration.set_zero()
_center_of_mass = Vector3.ZERO _center_of_mass = Vector3.ZERO
@ -21,6 +21,6 @@ func _calculate_steering(acceleration: GSAITargetAcceleration) -> void:
# 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
# to the center of mass of the group. # to the center of mass of the group.
# @tags - virtual # @tags - virtual
func _report_neighbor(neighbor: GSAISteeringAgent) -> bool: func _report_neighbor(neighbor: GDGSAISteeringAgent) -> bool:
_center_of_mass += neighbor.position _center_of_mass += neighbor.position
return true return true

View File

@ -1,5 +1,5 @@
class_name GSAIEvade class_name GDGSAIEvade
extends GSAIPursue extends GDGSAIPursue
# Calculates acceleration to take an agent away from where a target agent is # Calculates acceleration to take an agent away from where a target agent is
# moving. # moving.

View File

@ -1,14 +1,14 @@
class_name GSAIFace class_name GDGSAIFace
extends GSAIMatchOrientation extends GDGSAIMatchOrientation
# Calculates angular acceleration to rotate a target to face its target's # Calculates angular acceleration to rotate a target to face its target's
# position. The behavior attemps to arrive with zero remaining angular velocity. # position. The behavior attemps to arrive with zero remaining angular velocity.
# @category - Individual behaviors # @category - Individual behaviors
func face(acceleration: GSAITargetAcceleration, target_position: Vector3) -> void: func face(acceleration: GDGSAITargetAcceleration, target_position: Vector3) -> void:
call("_face", acceleration, target_position) call("_face", acceleration, target_position)
func _face(acceleration: GSAITargetAcceleration, target_position: Vector3) -> void: func _face(acceleration: GDGSAITargetAcceleration, target_position: Vector3) -> void:
var to_target : Vector3 = target_position - agent.position var to_target : Vector3 = target_position - agent.position
var distance_squared : float = to_target.length_squared() var distance_squared : float = to_target.length_squared()
@ -18,11 +18,11 @@ func _face(acceleration: GSAITargetAcceleration, target_position: Vector3) -> vo
var orientation : float var orientation : float
if use_z: if use_z:
orientation = GSAIUtils.vector3_to_angle(to_target) orientation = GDGSAIUtils.vector3_to_angle(to_target)
else: else:
orientation = GSAIUtils.vector2_to_angle(GSAIUtils.to_vector2(to_target)) orientation = GDGSAIUtils.vector2_to_angle(GDGSAIUtils.to_vector2(to_target))
match_orientation(acceleration, orientation) match_orientation(acceleration, orientation)
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void: func _calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
face(acceleration, target.position) face(acceleration, target.position)

View File

@ -1,9 +1,9 @@
class_name GSAIFlee class_name GDGSAIFlee
extends GSAISeek extends GDGSAISeek
# Calculates acceleration to take an agent directly away from a target agent. # Calculates acceleration to take an agent directly away from a target agent.
# @category - Individual behaviors # @category - Individual behaviors
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void: func _calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
acceleration.linear = ((agent.position - target.position).normalized() * agent.linear_acceleration_max) acceleration.linear = ((agent.position - target.position).normalized() * agent.linear_acceleration_max)
acceleration.angular = 0 acceleration.angular = 0

View File

@ -1,22 +1,22 @@
class_name GSAIFollowPath class_name GDGSAIFollowPath
extends GSAIArrive extends GDGSAIArrive
# Produces a linear acceleration that moves the agent along the specified path. # Produces a linear acceleration that moves the agent along the specified path.
# @category - Individual behaviors # @category - Individual behaviors
# The path to follow and travel along. # The path to follow and travel along.
var path : GSAIPath var path : GDGSAIPath
# The distance along the path to generate the next target position. # The distance along the path to generate the next target position.
var path_offset : float = 0.0 var path_offset : float = 0.0
# Whether to use `GSAIArrive` behavior on an open path. # Whether to use `GDGSAIArrive` behavior on an open path.
var is_arrive_enabled : bool = true var is_arrive_enabled : bool = true
# The amount of time in the future to predict the owning agent's position along # The amount of time in the future to predict the owning agent's position along
# the path. Setting it to 0.0 will force non-predictive path following. # the path. Setting it to 0.0 will force non-predictive path following.
var prediction_time : float = 0.0 var prediction_time : float = 0.0
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void: func _calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
var location : Vector3 var location : Vector3
if prediction_time == 0: if prediction_time == 0:

View File

@ -1,19 +1,19 @@
class_name GSAILookWhereYouGo class_name GDGSAILookWhereYouGo
extends GSAIMatchOrientation extends GDGSAIMatchOrientation
# Calculates an angular acceleration to match an agent's orientation to its # Calculates an angular acceleration to match an agent's orientation to its
# direction of travel. # direction of travel.
# @category - Individual behaviors # @category - Individual behaviors
func _calculate_steering(accel: GSAITargetAcceleration) -> void: func _calculate_steering(accel: GDGSAITargetAcceleration) -> 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()
else: else:
var orientation : float var orientation : float
if use_z: if use_z:
orientation = GSAIUtils.vector3_to_angle(agent.linear_velocity) orientation = GDGSAIUtils.vector3_to_angle(agent.linear_velocity)
else: else:
orientation = GSAIUtils.vector2_to_angle(GSAIUtils.to_vector2(agent.linear_velocity)) orientation = GDGSAIUtils.vector2_to_angle(GDGSAIUtils.to_vector2(agent.linear_velocity))
match_orientation(accel, orientation) match_orientation(accel, orientation)

View File

@ -1,5 +1,5 @@
class_name GSAIMatchOrientation class_name GDGSAIMatchOrientation
extends GSAISteeringBehavior extends GDGSAISteeringBehavior
# Calculates an angular acceleration to match an agent's orientation to that of # Calculates an angular acceleration to match an agent's orientation to that of
# its target. Attempts to make the agent arrive with zero remaining angular # its target. Attempts to make the agent arrive with zero remaining angular
@ -7,7 +7,7 @@ extends GSAISteeringBehavior
# @category - Individual behaviors # @category - Individual behaviors
# The target orientation for the behavior to try and match rotations to. # The target orientation for the behavior to try and match rotations to.
var target : GSAIAgentLocation var target : GDGSAIAgentLocation
# The amount of distance in radians for the behavior to consider itself close # The amount of distance in radians for the behavior to consider itself close
# enough to be matching the target agent's rotation. # enough to be matching the target agent's rotation.
var alignment_tolerance : float = 0.0 var alignment_tolerance : float = 0.0
@ -19,10 +19,10 @@ var time_to_reach : float = 0.1
# determining angles. X and Z should be used in 3D. # determining angles. X and Z should be used in 3D.
var use_z : bool = false var use_z : bool = false
func match_orientation(acceleration: GSAITargetAcceleration, desired_orientation: float) -> void: func match_orientation(acceleration: GDGSAITargetAcceleration, desired_orientation: float) -> void:
call("_match_orientation", acceleration, desired_orientation) call("_match_orientation", acceleration, desired_orientation)
func _match_orientation(acceleration: GSAITargetAcceleration, desired_orientation: float) -> void: func _match_orientation(acceleration: GDGSAITargetAcceleration, desired_orientation: float) -> void:
var rotation : float = wrapf(desired_orientation - agent.orientation, -PI, PI) var rotation : float = wrapf(desired_orientation - agent.orientation, -PI, PI)
var rotation_size : float = abs(rotation) var rotation_size : float = abs(rotation)
@ -46,5 +46,5 @@ func _match_orientation(acceleration: GSAITargetAcceleration, desired_orientatio
acceleration.linear = Vector3.ZERO acceleration.linear = Vector3.ZERO
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void: func _calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
match_orientation(acceleration, target.orientation) match_orientation(acceleration, target.orientation)

View File

@ -1,5 +1,5 @@
class_name GSAIPriority class_name GDGSAIPriority
extends GSAISteeringBehavior extends GDGSAISteeringBehavior
# Container for multiple behaviors that returns the result of the first child # Container for multiple behaviors that returns the result of the first child
# behavior with non-zero acceleration. # behavior with non-zero acceleration.
@ -14,12 +14,12 @@ var _last_selected_index : int = 0
var _behaviors : Array = Array() var _behaviors : Array = Array()
# Appends a steering behavior as a child of this container. # Appends a steering behavior as a child of this container.
func add_behavior(behavior: GSAISteeringBehavior) -> void: func add_behavior(behavior: GDGSAISteeringBehavior) -> void:
_behaviors.append(behavior) _behaviors.append(behavior)
# Returns the behavior at the position in the pool referred to by `index`, or # Returns the behavior at the position in the pool referred to by `index`, or
# `null` if no behavior was found. # `null` if no behavior was found.
func get_behavior(index : int) -> GSAISteeringBehavior: func get_behavior(index : int) -> GDGSAISteeringBehavior:
if _behaviors.size() > index: if _behaviors.size() > index:
return _behaviors[index] return _behaviors[index]
@ -41,7 +41,7 @@ func get_behaviour_count() -> int:
return _behaviors.size() return _behaviors.size()
func _calculate_steering(accel : GSAITargetAcceleration) -> void: func _calculate_steering(accel : GDGSAITargetAcceleration) -> void:
var threshold_squared : float = zero_threshold * zero_threshold var threshold_squared : float = zero_threshold * zero_threshold
_last_selected_index = -1 _last_selected_index = -1
@ -51,7 +51,7 @@ func _calculate_steering(accel : GSAITargetAcceleration) -> void:
if size > 0: if size > 0:
for i in range(size): for i in range(size):
_last_selected_index = i _last_selected_index = i
var behavior: GSAISteeringBehavior = _behaviors[i] var behavior: GDGSAISteeringBehavior = _behaviors[i]
behavior.calculate_steering(accel) behavior.calculate_steering(accel)
if accel.get_magnitude_squared() > threshold_squared: if accel.get_magnitude_squared() > threshold_squared:

View File

@ -1,17 +1,17 @@
class_name GSAIPursue class_name GDGSAIPursue
extends GSAISteeringBehavior extends GDGSAISteeringBehavior
# Calculates an acceleration to make an agent intercept another based on the # Calculates an acceleration to make an agent intercept another based on the
# target agent's movement. # target agent's movement.
# @category - Individual behaviors # @category - Individual behaviors
# The target agent that the behavior is trying to intercept. # The target agent that the behavior is trying to intercept.
var target : GSAISteeringAgent var target : GDGSAISteeringAgent
# The maximum amount of time in the future the behavior predicts the target's # The maximum amount of time in the future the behavior predicts the target's
# location. # location.
var predict_time_max : float = 1.0 var predict_time_max : float = 1.0
func _calculate_steering(acceleration : GSAITargetAcceleration) -> void: func _calculate_steering(acceleration : GDGSAITargetAcceleration) -> void:
var target_position : Vector3 = target.position var target_position : Vector3 = target.position
var distance_squared : float = (target_position - agent.position).length_squared() var distance_squared : float = (target_position - agent.position).length_squared()

View File

@ -1,14 +1,14 @@
class_name GSAISeek class_name GDGSAISeek
extends GSAISteeringBehavior extends GDGSAISteeringBehavior
# Calculates an acceleration to take an agent to a target agent's position # Calculates an acceleration to take an agent to a target agent's position
# directly. # directly.
# @category - Individual behaviors # @category - Individual behaviors
# The target that the behavior aims to move the agent to. # The target that the behavior aims to move the agent to.
var target : GSAIAgentLocation var target : GDGSAIAgentLocation
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void: func _calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
acceleration.linear = ((target.position - agent.position).normalized() * agent.linear_acceleration_max) acceleration.linear = ((target.position - agent.position).normalized() * agent.linear_acceleration_max)
acceleration.angular = 0 acceleration.angular = 0

View File

@ -1,8 +1,8 @@
class_name GSAISeparation class_name GDGSAISeparation
extends GSAIGroupBehavior extends GDGSAIGroupBehavior
# Calculates an acceleration that repels the agent from its neighbors in the # Calculates an acceleration that repels the agent from its neighbors in the
# given `GSAIProximity`. # given `GDGSAIProximity`.
# #
# The acceleration is an average based on all neighbors, multiplied by a # The acceleration is an average based on all neighbors, multiplied by a
# strength decreasing by the inverse square law in relation to distance, and it # strength decreasing by the inverse square law in relation to distance, and it
@ -12,10 +12,10 @@ extends GSAIGroupBehavior
# The 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 : float = 1.0 var decay_coefficient : float = 1.0
var acceleration : GSAITargetAcceleration var acceleration : GDGSAITargetAcceleration
func _calculate_steering(_acceleration : GSAITargetAcceleration) -> void: func _calculate_steering(_acceleration : GDGSAITargetAcceleration) -> void:
self.acceleration = _acceleration self.acceleration = _acceleration
acceleration.set_zero() acceleration.set_zero()
# warning-ignore:return_value_discarded # warning-ignore:return_value_discarded
@ -25,7 +25,7 @@ func _calculate_steering(_acceleration : GSAITargetAcceleration) -> void:
# 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
# acceleration that `neighbor` imposes based on its distance from the owner agent. # acceleration that `neighbor` imposes based on its distance from the owner agent.
# @tags - virtual # @tags - virtual
func _report_neighbor(neighbor : GSAISteeringAgent) -> bool: func _report_neighbor(neighbor : GDGSAISteeringAgent) -> bool:
var to_agent : Vector3 = agent.position - neighbor.position var to_agent : Vector3 = agent.position - neighbor.position
var distance_squared : float = to_agent.length_squared() var distance_squared : float = to_agent.length_squared()

View File

@ -1,5 +1,5 @@
extends Reference extends Reference
class_name GSAIAgentLocation class_name GDGSAIAgentLocation
# Represents an agent with only a location and an orientation. # Represents an agent with only a location and an orientation.
# @category - Base types # @category - Base types

View File

@ -1,11 +1,11 @@
class_name GSAIGroupBehavior class_name GDGSAIGroupBehavior
extends GSAISteeringBehavior extends GDGSAISteeringBehavior
# Base type for group-based steering behaviors. # Base type for group-based steering behaviors.
# @category - Base types # @category - Base types
# Container to find neighbors of the agent and calculate group behavior. # Container to find neighbors of the agent and calculate group behavior.
var proximity : GSAIProximity var proximity : GDGSAIProximity
var _callback : FuncRef = funcref(self, "_report_neighbor") var _callback : FuncRef = funcref(self, "_report_neighbor")
@ -15,5 +15,5 @@ func get_callback() -> FuncRef:
# Internal callback for the behavior to define whether or not a member is # Internal callback for the behavior to define whether or not a member is
# relevant # relevant
# @tags - virtual # @tags - virtual
func _report_neighbor(_neighbor : GSAISteeringAgent) -> bool: func _report_neighbor(_neighbor : GDGSAISteeringAgent) -> bool:
return false return false

View File

@ -1,4 +1,4 @@
class_name GSAIPath class_name GDGSAIPath
extends Reference extends Reference
# Represents a path made up of Vector3 waypoints, split into segments path # Represents a path made up of Vector3 waypoints, split into segments path
@ -43,7 +43,7 @@ func create_path(waypoints : Array) -> void:
else: else:
current = waypoints[0] current = waypoints[0]
var segment : GSAISegment = GSAISegment.new(previous, current) var segment : GDGSAISegment = GDGSAISegment.new(previous, current)
length += segment.length length += segment.length
segment.cumulative_length = length segment.cumulative_length = length
_segments.append(segment) _segments.append(segment)
@ -55,10 +55,10 @@ func calculate_distance(agent_current_position : Vector3) -> float:
return 0.0 return 0.0
var smallest_distance_squared : float = INF var smallest_distance_squared : float = INF
var nearest_segment : GSAISegment = null var nearest_segment : GDGSAISegment = null
for i in range(_segments.size()): for i in range(_segments.size()):
var segment: GSAISegment = _segments[i] var segment: GDGSAISegment = _segments[i]
var distance_squared : float = _calculate_point_segment_distance_squared(segment.begin, segment.end, agent_current_position) var distance_squared : float = _calculate_point_segment_distance_squared(segment.begin, segment.end, agent_current_position)
if distance_squared < smallest_distance_squared: if distance_squared < smallest_distance_squared:
@ -81,9 +81,9 @@ func calculate_target_position(target_distance: float) -> Vector3:
elif target_distance > length: elif target_distance > length:
target_distance = fmod(target_distance, length) target_distance = fmod(target_distance, length)
var desired_segment: GSAISegment var desired_segment: GDGSAISegment
for i in range(_segments.size()): for i in range(_segments.size()):
var segment: GSAISegment = _segments[i] var segment: GDGSAISegment = _segments[i]
if segment.cumulative_length >= target_distance: if segment.cumulative_length >= target_distance:
desired_segment = segment desired_segment = segment
break break
@ -117,7 +117,7 @@ func _calculate_point_segment_distance_squared(start: Vector3, end: Vector3, pos
return _nearest_point_on_segment.distance_squared_to(position) return _nearest_point_on_segment.distance_squared_to(position)
# not exposed helper struct # not exposed helper struct
class GSAISegment: class GDGSAISegment:
var begin: Vector3 var begin: Vector3
var end: Vector3 var end: Vector3
var length: float var length: float

View File

@ -1,7 +1,7 @@
extends GSAIAgentLocation extends GDGSAIAgentLocation
class_name GSAISteeringAgent class_name GDGSAISteeringAgent
# Adds velocity, speed, and size data to `GSAIAgentLocation`. # Adds velocity, speed, and size data to `GDGSAIAgentLocation`.
# #
# 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.

View File

@ -1,5 +1,5 @@
extends Reference extends Reference
class_name GSAISteeringBehavior class_name GDGSAISteeringBehavior
# Base class for all steering behaviors. # Base class for all steering behaviors.
# #
@ -13,14 +13,14 @@ class_name GSAISteeringBehavior
# If `false`, all calculations return zero amounts of acceleration. # If `false`, all calculations return zero amounts of acceleration.
var is_enabled : bool = true var is_enabled : bool = true
# The AI agent on which the steering behavior bases its calculations. # The AI agent on which the steering behavior bases its calculations.
var agent : GSAISteeringAgent var agent : GDGSAISteeringAgent
# Sets the `acceleration` with the behavior's desired amount of acceleration. # Sets the `acceleration` with the behavior's desired amount of acceleration.
func calculate_steering(acceleration: GSAITargetAcceleration) -> void: func calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
if is_enabled: if is_enabled:
call("_calculate_steering", acceleration) call("_calculate_steering", acceleration)
else: else:
acceleration.set_zero() acceleration.set_zero()
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void: func _calculate_steering(acceleration: GDGSAITargetAcceleration) -> void:
acceleration.set_zero() acceleration.set_zero()

View File

@ -1,5 +1,5 @@
extends Reference extends Reference
class_name GSAITargetAcceleration class_name GDGSAITargetAcceleration
# 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.
@ -18,7 +18,7 @@ func set_zero() -> void:
angular = 0.0 angular = 0.0
# Adds `accel`'s components, multiplied by `scalar`, to this one. # Adds `accel`'s components, multiplied by `scalar`, to this one.
func add_scaled_accel(accel: GSAITargetAcceleration, scalar: float) -> void: func add_scaled_accel(accel: GDGSAITargetAcceleration, scalar: float) -> void:
linear += accel.linear * scalar linear += accel.linear * scalar
angular += accel.angular * scalar angular += accel.angular * scalar

View File

@ -1,4 +1,4 @@
class_name GSAIUtils class_name GDGSAIUtils
# Math and vector utility functions. # Math and vector utility functions.
# @Category - Utilities # @Category - Utilities

View File

@ -1,5 +1,5 @@
extends GSAIProximity extends GDGSAIProximity
class_name GSAIInfiniteProximity class_name GDGSAIInfiniteProximity
# Determines any agent that is in the specified list as being neighbors with the # Determines any agent that is in the specified list as being neighbors with the
# owner agent, regardless of distance. # owner agent, regardless of distance.
@ -14,7 +14,7 @@ func _find_neighbors(callback: FuncRef) -> int:
var neighbor_count : int = 0 var neighbor_count : int = 0
var agent_count : int = agents.size() var agent_count : int = agents.size()
for i in range(agent_count): for i in range(agent_count):
var current_agent : GSAISteeringAgent = agents[i] as GSAISteeringAgent var current_agent : GDGSAISteeringAgent = agents[i] as GDGSAISteeringAgent
if current_agent != agent: if current_agent != agent:
if callback.call_func(current_agent): if callback.call_func(current_agent):

View File

@ -1,12 +1,12 @@
extends Reference extends Reference
class_name GSAIProximity class_name GDGSAIProximity
# Base container type that stores data to find the neighbors of an agent. # Base container type that stores data to find the neighbors of an agent.
# @category - Proximities # @category - Proximities
# @tags - abstract # @tags - abstract
# The owning agent whose neighbors are found in the group # The owning agent whose neighbors are found in the group
var agent : GSAISteeringAgent var agent : GDGSAISteeringAgent
# The agents who are part of this group and could be potential neighbors # The agents who are part of this group and could be potential neighbors
var agents : Array = Array() var agents : Array = Array()

View File

@ -1,5 +1,5 @@
extends GSAIProximity extends GDGSAIProximity
class_name GSAIRadiusProximity class_name GDGSAIRadiusProximity
# 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.
@ -37,7 +37,7 @@ func _find_neighbors(callback : FuncRef) -> int:
var owner_position : Vector3 = agent.position var owner_position : Vector3 = agent.position
for i in range(agent_count): for i in range(agent_count):
var current_agent : GSAISteeringAgent = agents[i] as GSAISteeringAgent var current_agent : GDGSAISteeringAgent = agents[i] as GDGSAISteeringAgent
if current_agent != agent: if current_agent != agent:
var distance_squared : float = owner_position.distance_squared_to(current_agent.position) var distance_squared : float = owner_position.distance_squared_to(current_agent.position)
@ -53,7 +53,7 @@ func _find_neighbors(callback : FuncRef) -> int:
current_agent.is_tagged = false current_agent.is_tagged = false
else: else:
for i in range(agent_count): for i in range(agent_count):
var current_agent : GSAISteeringAgent = agents[i] as GSAISteeringAgent var current_agent : GDGSAISteeringAgent = agents[i] as GDGSAISteeringAgent
if current_agent != agent and current_agent.is_tagged: if current_agent != agent and current_agent.is_tagged:
if callback.call_func(current_agent): if callback.call_func(current_agent):

View File

@ -15,181 +15,181 @@ _global_script_classes=[ {
"path": "res://Demos/DemoPickerUI.gd" "path": "res://Demos/DemoPickerUI.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": "GSAIAgentLocation", "class": "GDGSAIAgentLocation",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIAgentLocation.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIAgentLocation.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": "GSAIArrive", "class": "GDGSAIArrive",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIArrive.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIArrive.gd"
}, { }, {
"base": "GSAIGroupBehavior", "base": "GDGSAIGroupBehavior",
"class": "GSAIAvoidCollisions", "class": "GDGSAIAvoidCollisions",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIAvoidCollisions.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIAvoidCollisions.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": "GSAIBlend", "class": "GDGSAIBlend",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIBlend.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIBlend.gd"
}, { }, {
"base": "GSAIGroupBehavior", "base": "GDGSAIGroupBehavior",
"class": "GSAICohesion", "class": "GDGSAICohesion",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAICohesion.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAICohesion.gd"
}, { }, {
"base": "GSAIPursue", "base": "GDGSAIPursue",
"class": "GSAIEvade", "class": "GDGSAIEvade",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIEvade.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIEvade.gd"
}, { }, {
"base": "GSAIMatchOrientation", "base": "GDGSAIMatchOrientation",
"class": "GSAIFace", "class": "GDGSAIFace",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFace.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFace.gd"
}, { }, {
"base": "GSAISeek", "base": "GDGSAISeek",
"class": "GSAIFlee", "class": "GDGSAIFlee",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFlee.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFlee.gd"
}, { }, {
"base": "GSAIArrive", "base": "GDGSAIArrive",
"class": "GSAIFollowPath", "class": "GDGSAIFollowPath",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFollowPath.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFollowPath.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": "GSAIGroupBehavior", "class": "GDGSAIGroupBehavior",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIGroupBehavior.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIGroupBehavior.gd"
}, { }, {
"base": "GSAIProximity", "base": "GDGSAIProximity",
"class": "GSAIInfiniteProximity", "class": "GDGSAIInfiniteProximity",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIInfiniteProximity.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIInfiniteProximity.gd"
}, { }, {
"base": "GSAISpecializedAgent", "base": "GDGSAISpecializedAgent",
"class": "GSAIKinematicBody2DAgent", "class": "GDGSAIKinematicBody2DAgent",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIKinematicBody2DAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIKinematicBody2DAgent.gd"
}, { }, {
"base": "GSAISpecializedAgent", "base": "GDGSAISpecializedAgent",
"class": "GSAIKinematicBody3DAgent", "class": "GDGSAIKinematicBody3DAgent",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIKinematicBody3DAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIKinematicBody3DAgent.gd"
}, { }, {
"base": "GSAIMatchOrientation", "base": "GDGSAIMatchOrientation",
"class": "GSAILookWhereYouGo", "class": "GDGSAILookWhereYouGo",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAILookWhereYouGo.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAILookWhereYouGo.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": "GSAIMatchOrientation", "class": "GDGSAIMatchOrientation",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIMatchOrientation.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIMatchOrientation.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": "GSAIPath", "class": "GDGSAIPath",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIPath.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIPath.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": "GSAIPriority", "class": "GDGSAIPriority",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIPriority.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIPriority.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": "GSAIProximity", "class": "GDGSAIProximity",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIProximity.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIProximity.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": "GSAIPursue", "class": "GDGSAIPursue",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIPursue.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIPursue.gd"
}, { }, {
"base": "GSAIProximity", "base": "GDGSAIProximity",
"class": "GSAIRadiusProximity", "class": "GDGSAIRadiusProximity",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIRadiusProximity.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIRadiusProximity.gd"
}, { }, {
"base": "GSAISpecializedAgent", "base": "GDGSAISpecializedAgent",
"class": "GSAIRigidBody2DAgent", "class": "GDGSAIRigidBody2DAgent",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIRigidBody2DAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIRigidBody2DAgent.gd"
}, { }, {
"base": "GSAISpecializedAgent", "base": "GDGSAISpecializedAgent",
"class": "GSAIRigidBody3DAgent", "class": "GDGSAIRigidBody3DAgent",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIRigidBody3DAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIRigidBody3DAgent.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": "GSAISeek", "class": "GDGSAISeek",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAISeek.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAISeek.gd"
}, { }, {
"base": "GSAIGroupBehavior", "base": "GDGSAIGroupBehavior",
"class": "GSAISeparation", "class": "GDGSAISeparation",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAISeparation.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAISeparation.gd"
}, { }, {
"base": "GSAISteeringAgent", "base": "GDGSAISteeringAgent",
"class": "GSAISpecializedAgent", "class": "GDGSAISpecializedAgent",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAISpecializedAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAISpecializedAgent.gd"
}, { }, {
"base": "GSAIAgentLocation", "base": "GDGSAIAgentLocation",
"class": "GSAISteeringAgent", "class": "GDGSAISteeringAgent",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAISteeringAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAISteeringAgent.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": "GSAISteeringBehavior", "class": "GDGSAISteeringBehavior",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAISteeringBehavior.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAISteeringBehavior.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": "GSAITargetAcceleration", "class": "GDGSAITargetAcceleration",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAITargetAcceleration.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAITargetAcceleration.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": "GSAIUtils", "class": "GDGSAIUtils",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIUtils.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIUtils.gd"
} ] } ]
_global_script_class_icons={ _global_script_class_icons={
"DemoPickerUI": "", "DemoPickerUI": "",
"GSAIAgentLocation": "", "GDGSAIAgentLocation": "",
"GSAIArrive": "", "GDGSAIArrive": "",
"GSAIAvoidCollisions": "", "GDGSAIAvoidCollisions": "",
"GSAIBlend": "", "GDGSAIBlend": "",
"GSAICohesion": "", "GDGSAICohesion": "",
"GSAIEvade": "", "GDGSAIEvade": "",
"GSAIFace": "", "GDGSAIFace": "",
"GSAIFlee": "", "GDGSAIFlee": "",
"GSAIFollowPath": "", "GDGSAIFollowPath": "",
"GSAIGroupBehavior": "", "GDGSAIGroupBehavior": "",
"GSAIInfiniteProximity": "", "GDGSAIInfiniteProximity": "",
"GSAIKinematicBody2DAgent": "", "GDGSAIKinematicBody2DAgent": "",
"GSAIKinematicBody3DAgent": "", "GDGSAIKinematicBody3DAgent": "",
"GSAILookWhereYouGo": "", "GDGSAILookWhereYouGo": "",
"GSAIMatchOrientation": "", "GDGSAIMatchOrientation": "",
"GSAIPath": "", "GDGSAIPath": "",
"GSAIPriority": "", "GDGSAIPriority": "",
"GSAIProximity": "", "GDGSAIProximity": "",
"GSAIPursue": "", "GDGSAIPursue": "",
"GSAIRadiusProximity": "", "GDGSAIRadiusProximity": "",
"GSAIRigidBody2DAgent": "", "GDGSAIRigidBody2DAgent": "",
"GSAIRigidBody3DAgent": "", "GDGSAIRigidBody3DAgent": "",
"GSAISeek": "", "GDGSAISeek": "",
"GSAISeparation": "", "GDGSAISeparation": "",
"GSAISpecializedAgent": "", "GDGSAISpecializedAgent": "",
"GSAISteeringAgent": "", "GDGSAISteeringAgent": "",
"GSAISteeringBehavior": "", "GDGSAISteeringBehavior": "",
"GSAITargetAcceleration": "", "GDGSAITargetAcceleration": "",
"GSAIUtils": "" "GDGSAIUtils": ""
} }
[application] [application]

View File

@ -15,181 +15,181 @@ _global_script_classes=[ {
"path": "res://Demos/DemoPickerUI.gd" "path": "res://Demos/DemoPickerUI.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": @"GSAIAgentLocation", "class": @"GDGSAIAgentLocation",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIAgentLocation.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIAgentLocation.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": @"GSAIArrive", "class": @"GDGSAIArrive",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIArrive.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIArrive.gd"
}, { }, {
"base": "GSAIGroupBehavior", "base": "GDGSAIGroupBehavior",
"class": @"GSAIAvoidCollisions", "class": @"GDGSAIAvoidCollisions",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIAvoidCollisions.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIAvoidCollisions.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": @"GSAIBlend", "class": @"GDGSAIBlend",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIBlend.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIBlend.gd"
}, { }, {
"base": "GSAIGroupBehavior", "base": "GDGSAIGroupBehavior",
"class": @"GSAICohesion", "class": @"GDGSAICohesion",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAICohesion.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAICohesion.gd"
}, { }, {
"base": "GSAIPursue", "base": "GDGSAIPursue",
"class": @"GSAIEvade", "class": @"GDGSAIEvade",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIEvade.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIEvade.gd"
}, { }, {
"base": "GSAIMatchOrientation", "base": "GDGSAIMatchOrientation",
"class": @"GSAIFace", "class": @"GDGSAIFace",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFace.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFace.gd"
}, { }, {
"base": "GSAISeek", "base": "GDGSAISeek",
"class": @"GSAIFlee", "class": @"GDGSAIFlee",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFlee.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFlee.gd"
}, { }, {
"base": "GSAIArrive", "base": "GDGSAIArrive",
"class": @"GSAIFollowPath", "class": @"GDGSAIFollowPath",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFollowPath.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIFollowPath.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": @"GSAIGroupBehavior", "class": @"GDGSAIGroupBehavior",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIGroupBehavior.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIGroupBehavior.gd"
}, { }, {
"base": "GSAIProximity", "base": "GDGSAIProximity",
"class": @"GSAIInfiniteProximity", "class": @"GDGSAIInfiniteProximity",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIInfiniteProximity.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIInfiniteProximity.gd"
}, { }, {
"base": "GSAISpecializedAgent", "base": "GDGSAISpecializedAgent",
"class": @"GSAIKinematicBody2DAgent", "class": @"GDGSAIKinematicBody2DAgent",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIKinematicBody2DAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIKinematicBody2DAgent.gd"
}, { }, {
"base": "GSAISpecializedAgent", "base": "GDGSAISpecializedAgent",
"class": @"GSAIKinematicBody3DAgent", "class": @"GDGSAIKinematicBody3DAgent",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIKinematicBody3DAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIKinematicBody3DAgent.gd"
}, { }, {
"base": "GSAIMatchOrientation", "base": "GDGSAIMatchOrientation",
"class": @"GSAILookWhereYouGo", "class": @"GDGSAILookWhereYouGo",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAILookWhereYouGo.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAILookWhereYouGo.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": @"GSAIMatchOrientation", "class": @"GDGSAIMatchOrientation",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIMatchOrientation.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIMatchOrientation.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": @"GSAIPath", "class": @"GDGSAIPath",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIPath.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIPath.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": @"GSAIPriority", "class": @"GDGSAIPriority",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIPriority.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIPriority.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": @"GSAIProximity", "class": @"GDGSAIProximity",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIProximity.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIProximity.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": @"GSAIPursue", "class": @"GDGSAIPursue",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIPursue.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAIPursue.gd"
}, { }, {
"base": "GSAIProximity", "base": "GDGSAIProximity",
"class": @"GSAIRadiusProximity", "class": @"GDGSAIRadiusProximity",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIRadiusProximity.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Proximities/GSAIRadiusProximity.gd"
}, { }, {
"base": "GSAISpecializedAgent", "base": "GDGSAISpecializedAgent",
"class": @"GSAIRigidBody2DAgent", "class": @"GDGSAIRigidBody2DAgent",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIRigidBody2DAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIRigidBody2DAgent.gd"
}, { }, {
"base": "GSAISpecializedAgent", "base": "GDGSAISpecializedAgent",
"class": @"GSAIRigidBody3DAgent", "class": @"GDGSAIRigidBody3DAgent",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIRigidBody3DAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAIRigidBody3DAgent.gd"
}, { }, {
"base": "GSAISteeringBehavior", "base": "GDGSAISteeringBehavior",
"class": @"GSAISeek", "class": @"GDGSAISeek",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAISeek.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAISeek.gd"
}, { }, {
"base": "GSAIGroupBehavior", "base": "GDGSAIGroupBehavior",
"class": @"GSAISeparation", "class": @"GDGSAISeparation",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAISeparation.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Behaviors/GSAISeparation.gd"
}, { }, {
"base": "GSAISteeringAgent", "base": "GDGSAISteeringAgent",
"class": @"GSAISpecializedAgent", "class": @"GDGSAISpecializedAgent",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAISpecializedAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/Agents/GSAISpecializedAgent.gd"
}, { }, {
"base": "GSAIAgentLocation", "base": "GDGSAIAgentLocation",
"class": @"GSAISteeringAgent", "class": @"GDGSAISteeringAgent",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAISteeringAgent.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAISteeringAgent.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": @"GSAISteeringBehavior", "class": @"GDGSAISteeringBehavior",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAISteeringBehavior.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAISteeringBehavior.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": @"GSAITargetAcceleration", "class": @"GDGSAITargetAcceleration",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAITargetAcceleration.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAITargetAcceleration.gd"
}, { }, {
"base": "Reference", "base": "Reference",
"class": @"GSAIUtils", "class": @"GDGSAIUtils",
"language": @"GDScript", "language": @"GDScript",
"path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIUtils.gd" "path": "res://addons/com.gdquest.godot-steering-ai-framework/GSAIUtils.gd"
} ] } ]
_global_script_class_icons={ _global_script_class_icons={
@"GSAISeparation": "", @"GDGSAIInfiniteProximity": "",
@"GDGSAILookWhereYouGo": "",
@"GDGSAIRigidBody3DAgent": "",
@"DemoPickerUI": "", @"DemoPickerUI": "",
@"GSAIBlend": "", @"GDGSAIAvoidCollisions": "",
@"GSAIEvade": "", @"GDGSAIPriority": "",
@"GSAIGroupBehavior": "", @"GDGSAIRigidBody2DAgent": "",
@"GSAIPath": "", @"GDGSAIArrive": "",
@"GSAIProximity": "", @"GDGSAIKinematicBody3DAgent": "",
@"GSAIRadiusProximity": "", @"GDGSAIMatchOrientation": "",
@"GSAIFlee": "", @"GDGSAISteeringBehavior": "",
@"GSAIPursue": "", @"GDGSAITargetAcceleration": "",
@"GSAISpecializedAgent": "", @"GDGSAIUtils": "",
@"GSAIInfiniteProximity": "", @"GDGSAIAgentLocation": "",
@"GSAILookWhereYouGo": "", @"GDGSAICohesion": "",
@"GSAIRigidBody3DAgent": "", @"GDGSAIFollowPath": "",
@"GSAIAvoidCollisions": "", @"GDGSAIKinematicBody2DAgent": "",
@"GSAIPriority": "", @"GDGSAISeek": "",
@"GSAIRigidBody2DAgent": "", @"GDGSAISteeringAgent": "",
@"GSAIArrive": "", @"GDGSAIFace": "",
@"GSAIKinematicBody3DAgent": "", @"GDGSAISeparation": "",
@"GSAIMatchOrientation": "", @"GDGSAIBlend": "",
@"GSAISteeringBehavior": "", @"GDGSAIEvade": "",
@"GSAITargetAcceleration": "", @"GDGSAIGroupBehavior": "",
@"GSAIUtils": "", @"GDGSAIPath": "",
@"GSAIAgentLocation": "", @"GDGSAIProximity": "",
@"GSAICohesion": "", @"GDGSAIRadiusProximity": "",
@"GSAIFollowPath": "", @"GDGSAIFlee": "",
@"GSAIKinematicBody2DAgent": "", @"GDGSAIPursue": "",
@"GSAISeek": "", @"GDGSAISpecializedAgent": ""
@"GSAISteeringAgent": "",
@"GSAIFace": ""
} }
[application] [application]

6
project_gdscript_ged.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash
cp -u ./pandemonium_engine/bin/pandemonium.x11.opt.tools.64 ./pandemonium_engine/bin/run.pandemonium.x11.opt.tools.64
export LD_LIBRARY_PATH=`pwd`/pandemonium_engine/bin/
./pandemonium_engine/bin/run.pandemonium.x11.opt.tools.64 -e --path ./project_gdscript/