Adds enemies
This commit is contained in:
parent
cf8ba8bacb
commit
76e5b1927f
324 changed files with 28447 additions and 106 deletions
54
demo/ai/tasks/in_range.gd
Normal file
54
demo/ai/tasks/in_range.gd
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#*
|
||||
#* in_range.gd
|
||||
#* =============================================================================
|
||||
#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||
#*
|
||||
#* Use of this source code is governed by an MIT-style
|
||||
#* license that can be found in the LICENSE file or at
|
||||
#* https://opensource.org/licenses/MIT.
|
||||
#* =============================================================================
|
||||
#*
|
||||
@tool
|
||||
extends BTCondition
|
||||
## InRange condition checks if the agent is within a range of target,
|
||||
## defined by [member distance_min] and [member distance_max]. [br]
|
||||
## Returns [code]SUCCESS[/code] if the agent is within the given range;
|
||||
## otherwise, returns [code]FAILURE[/code].
|
||||
|
||||
## Minimum distance to target.
|
||||
@export var distance_min: float
|
||||
|
||||
## Maximum distance to target.
|
||||
@export var distance_max: float
|
||||
|
||||
## Blackboard variable that holds the target (expecting Node2D).
|
||||
@export var target_var: StringName = &"target"
|
||||
|
||||
var _min_distance_squared: float
|
||||
var _max_distance_squared: float
|
||||
|
||||
|
||||
# Called to generate a display name for the task.
|
||||
func _generate_name() -> String:
|
||||
return "InRange (%d, %d) of %s" % [distance_min, distance_max,
|
||||
LimboUtility.decorate_var(target_var)]
|
||||
|
||||
|
||||
# Called to initialize the task.
|
||||
func _setup() -> void:
|
||||
## Small performace optimization
|
||||
_min_distance_squared = distance_min * distance_min
|
||||
_max_distance_squared = distance_max * distance_max
|
||||
|
||||
|
||||
# Called when the task is executed.
|
||||
func _tick(_delta: float) -> Status:
|
||||
var target: Node2D = blackboard.get_var(target_var, null)
|
||||
if not is_instance_valid(target):
|
||||
return FAILURE
|
||||
|
||||
var dist_sq: float = agent.global_position.distance_squared_to(target.global_position)
|
||||
if dist_sq >= _min_distance_squared and dist_sq <= _max_distance_squared:
|
||||
return SUCCESS
|
||||
else:
|
||||
return FAILURE
|
||||
Loading…
Add table
Add a link
Reference in a new issue