proto3 initial commit
This commit is contained in:
85
proto3/godot/ai/set_dst_from_group.gd
Normal file
85
proto3/godot/ai/set_dst_from_group.gd
Normal file
@@ -0,0 +1,85 @@
|
||||
extends BTAction
|
||||
class_name BTSetDestinationGroup
|
||||
export var dst_group: String = ""
|
||||
#func add_loc_marker(tgt):
|
||||
# for k in get_tree().get_nodes_in_group("debug_loc_marker"):
|
||||
# k.queue_free()
|
||||
# var cube = CubeMesh.new()
|
||||
# cube.size = Vector3(0.2, 3.0, 0.2)
|
||||
# var mi = MeshInstance.new()
|
||||
# mi.mesh = cube
|
||||
# get_node("/root").add_child(mi)
|
||||
# mi.global_transform.origin = tgt
|
||||
# mi.add_to_group("debug_loc_marker")
|
||||
func tick(tick: Tick) -> int:
|
||||
var dst = INF
|
||||
var tgt = Vector3()
|
||||
var npc = tick.actor
|
||||
var bb = tick.blackboard
|
||||
var npc_pos = npc.global_transform.origin
|
||||
var player_pos = global.player.global_transform.origin
|
||||
var enemy
|
||||
enemy = bb.get("closest_enemy")
|
||||
if !enemy:
|
||||
enemy = bb.get("last_enemy")
|
||||
var enemy_pos = Vector3()
|
||||
if enemy:
|
||||
enemy_pos = enemy.global_transform.origin
|
||||
if dst_group == "_away":
|
||||
assert(enemy)
|
||||
var dir = (npc_pos - enemy_pos).normalized() * 80.0
|
||||
tgt = npc_pos + dir
|
||||
npc.set_meta("target_group", dst_group)
|
||||
npc.set_meta("target_loc", tgt)
|
||||
# print("run away ", npc.get_meta("action"))
|
||||
# add_loc_marker(tgt)
|
||||
return OK
|
||||
elif dst_group == "_player":
|
||||
# print("dst group player ", npc.name)
|
||||
tgt = player_pos
|
||||
npc.set_meta("target_group", dst_group)
|
||||
npc.set_meta("target_loc", tgt)
|
||||
# add_loc_marker(tgt)
|
||||
# print("chase player ", npc.get_meta("action"))
|
||||
return OK
|
||||
elif dst_group == "_enemy":
|
||||
# print("dst group enemy ", npc.name)
|
||||
tgt = enemy_pos
|
||||
npc.set_meta("target_group", dst_group)
|
||||
npc.set_meta("target_loc", tgt)
|
||||
# add_loc_marker(tgt)
|
||||
# print("chase player ", npc.get_meta("action"))
|
||||
return OK
|
||||
elif dst_group == "_patrol":
|
||||
var points = get_tree().get_nodes_in_group("patrol")
|
||||
if points.size() > 0:
|
||||
var c = points[randi() % points.size()]
|
||||
var tpos = c.global_transform.origin
|
||||
var ndst = tpos.distance_squared_to(npc_pos)
|
||||
dst = ndst
|
||||
tgt = tpos
|
||||
# print("set target: ", tgt)
|
||||
npc.set_meta("target_group", dst_group)
|
||||
npc.set_meta("target_loc", tgt)
|
||||
# add_loc_marker(tgt)
|
||||
return OK
|
||||
# print("dst ", npc.get_meta("action"), " ", dst_group)
|
||||
for c in get_tree().get_nodes_in_group(dst_group):
|
||||
if c is Spatial:
|
||||
# print(c.name)
|
||||
var tpos = c.global_transform.origin
|
||||
var ndst = tpos.distance_squared_to(npc_pos)
|
||||
if dst > ndst:
|
||||
dst = ndst
|
||||
tgt = tpos
|
||||
# print("dst: ", dst)
|
||||
if dst < 100000.0:
|
||||
# print("set target: ", tgt)
|
||||
npc.set_meta("target_group", dst_group)
|
||||
npc.set_meta("target_loc", tgt)
|
||||
# add_loc_marker(tgt)
|
||||
# print("set to: ", dst_group)
|
||||
# if dst_group == "hide_spot":
|
||||
# print("hiding to ", tgt)
|
||||
return OK
|
||||
return FAILED
|
||||
Reference in New Issue
Block a user