summaryrefslogtreecommitdiff
path: root/godot/scripts/CharacterAIManager.gd
diff options
context:
space:
mode:
Diffstat (limited to 'godot/scripts/CharacterAIManager.gd')
-rw-r--r--godot/scripts/CharacterAIManager.gd18
1 files changed, 17 insertions, 1 deletions
diff --git a/godot/scripts/CharacterAIManager.gd b/godot/scripts/CharacterAIManager.gd
index fb86a48..61d38ae 100644
--- a/godot/scripts/CharacterAIManager.gd
+++ b/godot/scripts/CharacterAIManager.gd
@@ -4,7 +4,7 @@ var calcs_per_tick: int = 15
var request_queue: Array = [] #array of dictionaries
var cur_req: Dictionary
var cur_req_args: Dictionary
-var WORLD_MAP_RID
+var WORLD_MAP_RID: RID
enum Task {PATHFIND, FINDITEM}
@@ -13,6 +13,9 @@ enum Task {PATHFIND, FINDITEM}
func _ready():
pass # Replace with function body.
+func set_rid(id: RID) -> void:
+ WORLD_MAP_RID = id
+
func _physics_process(_delta):
for i in calcs_per_tick:
if len(request_queue) == 0:
@@ -22,7 +25,20 @@ func _physics_process(_delta):
if cur_req["type"] == Task.PATHFIND:
var dest_vec: Vector3 = cur_req_args["dest"] if cur_req_args["obj"] == null else cur_req_args["obj"].global_transform.origin
var path: PoolVector3Array = NavigationServer.map_get_path(WORLD_MAP_RID, cur_req["char"].global_transform.origin, dest_vec, cur_req_args["optimize"])
+ cur_req["char"].ai_set_path_array(path)
+ elif cur_req["type"] == Task.FINDITEM:
+ var bodies = cur_req["char"].get_node("AISearchArea").get_overlapping_bodies()
+ for body in bodies:
+ if body.name.begins_with(cur_req_args["objtype"]):
+ var path: PoolVector3Array = NavigationServer.map_get_path(WORLD_MAP_RID, cur_req["char"].global_transform.origin, body.global_transform.origin, cur_req_args["optimize"])
+ cur_req["char"].ai_set_path_target(body.global_transform.origin)
+ #cur_req["char"].ai_set_path_array(path)
+ cur_req["char"].ai_set_look_status(body, "TRACK")
+ return
#will request a path from character to dest_g, or to the global origin of obj if passed
func request_find_path(character: NetChar, dest_g: Vector3, precise: bool, obj: Spatial = null) -> void:
request_queue.append({"char" : character, "type" : Task.PATHFIND, "args" : {"dest" : dest_g, "obj" : obj, "optimize" : !precise}})
+
+func request_find_object(character: NetChar, object: String, radius: float, precise: bool):
+ request_queue.append({"char" : character, "type" : Task.FINDITEM, "args" : {"objtype" : object, "radius" : radius, "optimize" : !precise}})