From e7fb9bacf3ebb5209f90f412757c35276af51e85 Mon Sep 17 00:00:00 2001 From: Anson Bridges Date: Tue, 11 Oct 2022 00:15:48 -0400 Subject: ai cannon-manning state machine --- godot/scripts/CharacterAIManager.gd | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'godot/scripts/CharacterAIManager.gd') 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}}) -- cgit v1.2.3