mirror of
https://github.com/Relintai/godot-steering-ai-framework.git
synced 2024-11-14 04:57:19 +01:00
Review smart agents
I made minimal changes, mostly cosmetic like so: - rename KinematicMovementType to MovementType since GSTKinematicBody2DAgent.KinematicMovementType.COLLIDE for example is really more than a mouthful with repeated Kinematic in the name - add optional movement_type parameter to the constructor, otherwise we'd be forced to construct the object and then specify as an aditional step the type of movement if we want something else than the default - rewrote the constructor to yield on ready and removed _on_body_ready - renamed _apply_steering to apply_steering as this is a public method - renamed _on_SceneTree_frame to _on_SceneTree_physics_frame
This commit is contained in:
parent
2ae06d3da3
commit
1baed58659
@ -12,7 +12,7 @@ var _drag := 0.1
|
|||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
arrive.calculate_steering(_accel)
|
arrive.calculate_steering(_accel)
|
||||||
agent._apply_steering(_accel, delta)
|
agent.apply_steering(_accel, delta)
|
||||||
|
|
||||||
|
|
||||||
func setup(
|
func setup(
|
||||||
|
@ -31,7 +31,7 @@ func _physics_process(delta: float) -> void:
|
|||||||
target.position.y = agent.position.y + _direction.y*_radius
|
target.position.y = agent.position.y + _direction.y*_radius
|
||||||
|
|
||||||
priority.calculate_steering(_accel)
|
priority.calculate_steering(_accel)
|
||||||
agent._apply_steering(_accel, delta)
|
agent.apply_steering(_accel, delta)
|
||||||
|
|
||||||
|
|
||||||
func setup(
|
func setup(
|
||||||
|
@ -20,7 +20,7 @@ func _ready() -> void:
|
|||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
face.calculate_steering(_accel)
|
face.calculate_steering(_accel)
|
||||||
agent._apply_steering(_accel, delta)
|
agent.apply_steering(_accel, delta)
|
||||||
|
|
||||||
|
|
||||||
func _draw() -> void:
|
func _draw() -> void:
|
||||||
|
@ -36,7 +36,7 @@ func setup(
|
|||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if _valid:
|
if _valid:
|
||||||
follow.calculate_steering(_accel)
|
follow.calculate_steering(_accel)
|
||||||
agent._apply_steering(_accel, delta)
|
agent.apply_steering(_accel, delta)
|
||||||
|
|
||||||
|
|
||||||
func _on_Drawer_path_established(points: Array) -> void:
|
func _on_Drawer_path_established(points: Array) -> void:
|
||||||
|
@ -46,7 +46,7 @@ func _draw() -> void:
|
|||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if blend:
|
if blend:
|
||||||
blend.calculate_steering(acceleration)
|
blend.calculate_steering(acceleration)
|
||||||
agent._apply_steering(acceleration, delta)
|
agent.apply_steering(acceleration, delta)
|
||||||
|
|
||||||
|
|
||||||
func set_neighbors(neighbor: Array) -> void:
|
func set_neighbors(neighbor: Array) -> void:
|
||||||
|
@ -27,4 +27,4 @@ func _physics_process(delta: float) -> void:
|
|||||||
else:
|
else:
|
||||||
flee.calculate_steering(accel)
|
flee.calculate_steering(accel)
|
||||||
|
|
||||||
agent._apply_steering(accel, delta)
|
agent.apply_steering(accel, delta)
|
||||||
|
@ -4,7 +4,7 @@ extends GSTSpecializedAgent
|
|||||||
class_name GSTKinematicBody2DAgent
|
class_name GSTKinematicBody2DAgent
|
||||||
|
|
||||||
|
|
||||||
enum KinematicMovementType { SLIDE, COLLIDE, POSITION }
|
enum MovementType { SLIDE, COLLIDE, POSITION }
|
||||||
|
|
||||||
|
|
||||||
# The KinematicBody2D to keep track of
|
# The KinematicBody2D to keep track of
|
||||||
@ -15,30 +15,31 @@ var body: KinematicBody2D setget _set_body
|
|||||||
# SLIDE uses use move_and_slide
|
# SLIDE uses use move_and_slide
|
||||||
# COLLIDE uses move_and_collide
|
# COLLIDE uses move_and_collide
|
||||||
# POSITION changes the global_position directly
|
# POSITION changes the global_position directly
|
||||||
var kinematic_movement_type: int = KinematicMovementType.SLIDE
|
var movement_type: int
|
||||||
|
|
||||||
var _last_position: Vector2
|
var _last_position: Vector2
|
||||||
|
|
||||||
|
|
||||||
func _init(body: KinematicBody2D) -> void:
|
func _init(body: KinematicBody2D, movement_type: int = MovementType.SLIDE) -> void:
|
||||||
|
yield(body, "ready")
|
||||||
|
|
||||||
self.body = body
|
self.body = body
|
||||||
if body.is_inside_tree():
|
self.movement_type = movement_type
|
||||||
body.get_tree().connect("physics_frame", self, "_on_SceneTree_frame")
|
|
||||||
else:
|
body.get_tree().connect("physics_frame", self, "_on_SceneTree_physics_frame")
|
||||||
body.connect("ready", self, "_on_body_ready")
|
|
||||||
|
|
||||||
|
|
||||||
# Moves the agent's `body` by target `acceleration`.
|
# Moves the agent's `body` by target `acceleration`.
|
||||||
# tags: virtual
|
# tags: virtual
|
||||||
func _apply_steering(acceleration: GSTTargetAcceleration, delta: float) -> void:
|
func apply_steering(acceleration: GSTTargetAcceleration, delta: float) -> void:
|
||||||
_applied_steering = true
|
_applied_steering = true
|
||||||
match kinematic_movement_type:
|
match movement_type:
|
||||||
KinematicMovementType.COLLIDE:
|
MovementType.COLLIDE:
|
||||||
_apply_collide_steering(acceleration.linear, delta)
|
_apply_collide_steering(acceleration.linear, delta)
|
||||||
KinematicMovementType.SLIDE:
|
MovementType.SLIDE:
|
||||||
_apply_sliding_steering(acceleration.linear)
|
_apply_sliding_steering(acceleration.linear)
|
||||||
_:
|
_:
|
||||||
_apply_normal_steering(acceleration.linear, delta)
|
_apply_position_steering(acceleration.linear, delta)
|
||||||
|
|
||||||
_apply_orientation_steering(acceleration.angular, delta)
|
_apply_orientation_steering(acceleration.angular, delta)
|
||||||
|
|
||||||
@ -64,7 +65,7 @@ func _apply_collide_steering(accel: Vector3, delta: float) -> void:
|
|||||||
linear_velocity = velocity
|
linear_velocity = velocity
|
||||||
|
|
||||||
|
|
||||||
func _apply_normal_steering(accel: Vector3, delta: float) -> void:
|
func _apply_position_steering(accel: Vector3, delta: float) -> void:
|
||||||
var velocity := GSTUtils.clampedv3(linear_velocity + accel, linear_speed_max)
|
var velocity := GSTUtils.clampedv3(linear_velocity + accel, linear_speed_max)
|
||||||
if apply_linear_drag:
|
if apply_linear_drag:
|
||||||
velocity = velocity.linear_interpolate(
|
velocity = velocity.linear_interpolate(
|
||||||
@ -95,12 +96,7 @@ func _set_body(value: KinematicBody2D) -> void:
|
|||||||
orientation = _last_orientation
|
orientation = _last_orientation
|
||||||
|
|
||||||
|
|
||||||
func _on_body_ready() -> void:
|
func _on_SceneTree_physics_frame() -> void:
|
||||||
body.get_tree().connect("physics_frame", self, "_on_SceneTree_frame")
|
|
||||||
_set_body(body)
|
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ extends GSTSpecializedAgent
|
|||||||
class_name GSTKinematicBodyAgent
|
class_name GSTKinematicBodyAgent
|
||||||
|
|
||||||
|
|
||||||
enum KinematicMovementType { SLIDE, COLLIDE, POSITION }
|
enum MovementType { SLIDE, COLLIDE, POSITION }
|
||||||
|
|
||||||
|
|
||||||
# The KinematicBody to keep track of
|
# The KinematicBody to keep track of
|
||||||
@ -15,30 +15,31 @@ var body: KinematicBody setget _set_body
|
|||||||
# SLIDE uses use move_and_slide
|
# SLIDE uses use move_and_slide
|
||||||
# COLLIDE uses move_and_collide
|
# COLLIDE uses move_and_collide
|
||||||
# POSITION changes the global_position directly
|
# POSITION changes the global_position directly
|
||||||
var kinematic_movement_type: int = KinematicMovementType.SLIDE
|
var movement_type: int
|
||||||
|
|
||||||
var _last_position: Vector3
|
var _last_position: Vector3
|
||||||
|
|
||||||
|
|
||||||
func _init(body: KinematicBody) -> void:
|
func _init(body: KinematicBody, movement_type: int = MovementType.SLIDE) -> void:
|
||||||
|
yield(body, "ready")
|
||||||
|
|
||||||
self.body = body
|
self.body = body
|
||||||
if body.is_inside_tree():
|
self.movement_type = movement_type
|
||||||
body.get_tree().connect("physics_frame", self, "_on_SceneTree_frame")
|
|
||||||
else:
|
body.get_tree().connect("physics_frame", self, "_on_SceneTree_physics_frame")
|
||||||
body.connect("ready", self, "_on_body_ready")
|
|
||||||
|
|
||||||
|
|
||||||
# Moves the agent's `body` by target `acceleration`.
|
# Moves the agent's `body` by target `acceleration`.
|
||||||
# tags: virtual
|
# tags: virtual
|
||||||
func _apply_steering(acceleration: GSTTargetAcceleration, delta: float) -> void:
|
func apply_steering(acceleration: GSTTargetAcceleration, delta: float) -> void:
|
||||||
_applied_steering = true
|
_applied_steering = true
|
||||||
match kinematic_movement_type:
|
match movement_type:
|
||||||
KinematicMovementType.COLLIDE:
|
MovementType.COLLIDE:
|
||||||
_apply_collide_steering(acceleration.linear, delta)
|
_apply_collide_steering(acceleration.linear, delta)
|
||||||
KinematicMovementType.SLIDE:
|
MovementType.SLIDE:
|
||||||
_apply_sliding_steering(acceleration.linear)
|
_apply_sliding_steering(acceleration.linear)
|
||||||
_:
|
_:
|
||||||
_apply_normal_steering(acceleration.linear, delta)
|
_apply_position_steering(acceleration.linear, delta)
|
||||||
|
|
||||||
_apply_orientation_steering(acceleration.angular, delta)
|
_apply_orientation_steering(acceleration.angular, delta)
|
||||||
|
|
||||||
@ -64,7 +65,7 @@ func _apply_collide_steering(accel: Vector3, delta: float) -> void:
|
|||||||
linear_velocity = velocity
|
linear_velocity = velocity
|
||||||
|
|
||||||
|
|
||||||
func _apply_normal_steering(accel: Vector3, delta: float) -> void:
|
func _apply_position_steering(accel: Vector3, delta: float) -> void:
|
||||||
var velocity := GSTUtils.clampedv3(linear_velocity + accel, linear_speed_max)
|
var velocity := GSTUtils.clampedv3(linear_velocity + accel, linear_speed_max)
|
||||||
if apply_linear_drag:
|
if apply_linear_drag:
|
||||||
velocity = velocity.linear_interpolate(
|
velocity = velocity.linear_interpolate(
|
||||||
@ -95,12 +96,7 @@ func _set_body(value: KinematicBody) -> void:
|
|||||||
orientation = _last_orientation
|
orientation = _last_orientation
|
||||||
|
|
||||||
|
|
||||||
func _on_body_ready() -> void:
|
func _on_SceneTree_physics_frame() -> void:
|
||||||
body.get_tree().connect("physics_frame", self, "_on_SceneTree_frame")
|
|
||||||
_set_body(body)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_SceneTree_frame() -> void:
|
|
||||||
var current_position: Vector3 = body.global_position
|
var current_position: Vector3 = body.global_position
|
||||||
var current_orientation: float = body.rotation.y
|
var current_orientation: float = body.rotation.y
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ func _init(body: RigidBody2D) -> 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: GSTTargetAcceleration, delta: float) -> void:
|
func apply_steering(acceleration: GSTTargetAcceleration, delta: float) -> void:
|
||||||
_applied_steering = true
|
_applied_steering = true
|
||||||
body.apply_central_impulse(GSTUtils.to_vector2(acceleration.linear))
|
body.apply_central_impulse(GSTUtils.to_vector2(acceleration.linear))
|
||||||
body.apply_torque_impulse(acceleration.angular)
|
body.apply_torque_impulse(acceleration.angular)
|
||||||
|
@ -20,7 +20,7 @@ func _init(body: RigidBody) -> 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: GSTTargetAcceleration, delta: float) -> void:
|
func apply_steering(acceleration: GSTTargetAcceleration, delta: float) -> void:
|
||||||
_applied_steering = true
|
_applied_steering = true
|
||||||
body.apply_central_impulse(acceleration.linear)
|
body.apply_central_impulse(acceleration.linear)
|
||||||
body.apply_torque_impulse(Vector3.UP * acceleration.angular)
|
body.apply_torque_impulse(Vector3.UP * acceleration.angular)
|
||||||
|
@ -36,5 +36,5 @@ var _applied_steering := false
|
|||||||
|
|
||||||
# Moves the agent's body by target `acceleration`.
|
# Moves the agent's body by target `acceleration`.
|
||||||
# tags: virtual
|
# tags: virtual
|
||||||
func _apply_steering(acceleration: GSTTargetAcceleration, delta: float) -> void:
|
func apply_steering(acceleration: GSTTargetAcceleration, delta: float) -> void:
|
||||||
pass
|
pass
|
||||||
|
Loading…
Reference in New Issue
Block a user