Files
kicking-high/proto3/godot/ai/unstuck.gd
2020-04-13 12:45:25 +03:00

63 lines
1.7 KiB
GDScript

extends BTAction
class_name BTUnstuck
func npc_stuck(npc, cond):
if cond:
if npc.has_meta("stuck"):
var stuck = npc.get_meta("stuck")
stuck += 2.0 * get_process_delta_time()
npc.set_meta("stuck", stuck)
else:
npc.set_meta("stuck", 2.0 * get_process_delta_time())
print(npc.name, " stuck ", npc.get_meta("stuck"))
else:
if npc.has_meta("stuck"):
var stuck = npc.get_meta("stuck")
stuck -= 3.0 * get_process_delta_time()
print(npc.name, " unstucking: ", stuck)
if stuck > 0.01:
npc.set_meta("stuck", stuck)
else:
npc.set_meta("stuck", null)
func tick(tick: Tick) -> int:
var npc = tick.actor
var bb = tick.blackboard
var p = []
return FAILED
if randf() > 0.5:
p = [
["set", "parameters/main/Motion/walk/walking/blend_position", 1.0],
["set", "parameters/unstuck1/active", true]
]
else:
p = [
["set", "parameters/main/Motion/walk/walking/blend_position", 1.0],
["set", "parameters/unstuck2/active", true]
]
npc.smart_obj(p)
var front_result = bb.get("front_result")
var front_left_result = bb.get("front_left_result")
var front_right_result = bb.get("front_right_result")
var front_col = false
var left_col = false
var right_col = false
if front_result.has("collider"):
var col = front_result.collider
if !col.is_in_group("entry"):
front_col = true
if front_left_result.has("collider"):
var col = front_left_result.collider
if !col.is_in_group("entry"):
left_col = true
if front_right_result.has("collider"):
var col = front_right_result.collider
if !col.is_in_group("entry"):
right_col = true
if right_col && left_col || front_col:
npc_stuck(npc, true)
else:
npc_stuck(npc, false)
return OK