Update
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
extends Node
|
||||
extends AIScriptModule
|
||||
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
@@ -10,12 +10,24 @@ extends Node
|
||||
|
||||
var animtree: AnimationTree
|
||||
var root_motion_track
|
||||
func _ready():
|
||||
process_priority = 0
|
||||
func init():
|
||||
# process_priority = 0
|
||||
pass
|
||||
|
||||
func _physics_process(delta):
|
||||
var root = get_parent()
|
||||
func can_walk_there(dest: Vector3) -> bool:
|
||||
var root = get_character()
|
||||
var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
|
||||
var result = space.intersect_ray(root.global_transform.origin, dest, [root])
|
||||
if result.has("collider"):
|
||||
return false
|
||||
else:
|
||||
return true
|
||||
|
||||
func update_physics(delta):
|
||||
var root = get_character()
|
||||
var orientation: Transform
|
||||
assert(root.has_meta("skeleton"))
|
||||
|
||||
if root.has_meta("orientation"):
|
||||
orientation = root.get_meta("orientation")
|
||||
if !animtree:
|
||||
@@ -139,6 +151,7 @@ func _physics_process(delta):
|
||||
"walkto":
|
||||
if !root.has_meta("cmdq_walk"):
|
||||
root.set_meta("cmdq_walk", true)
|
||||
var can_walk = true
|
||||
var fwd_probe = characters.forward_probe(root, 0.5, 0.05, 1.9, 0.2)
|
||||
var climb = false
|
||||
if fwd_probe < 0.1:
|
||||
@@ -149,18 +162,29 @@ func _physics_process(delta):
|
||||
elif fwd_probe < 1.2:
|
||||
# print("trying climb!!!")
|
||||
climb = true
|
||||
characters.set_walk_speed(root, 0.5, 0)
|
||||
else:
|
||||
can_walk = false
|
||||
if can_walk:
|
||||
characters.set_walk_speed(root, 0.4, 0)
|
||||
else:
|
||||
characters.set_walk_speed(root, 0.0, 0)
|
||||
# animtree["parameters/state/locomotion/loc/blend_position"].x = 0.5
|
||||
# animtree["parameters/state/locomotion/loc/blend_position"].y = 0
|
||||
var gt: Transform = root.global_transform
|
||||
var mp: Transform = root.global_transform
|
||||
var target: = Vector3()
|
||||
if cmd[1] is Spatial:
|
||||
target = cmd[1].global_transform.origin
|
||||
else:
|
||||
target = cmd[1]
|
||||
target.y = root.global_transform.origin.y
|
||||
if gt.origin != target:
|
||||
gt = gt.looking_at(target, Vector3.UP)
|
||||
var current_dir = root.global_transform.xform(Vector3(0, 0, -1))
|
||||
var locnav_probe = characters.locnav_probe(root, 3.0, (target - mp.origin).normalized(), 0.15)
|
||||
# var where_to = target.linear_interpolate(gt.origin + locnav_probe, 0.3)
|
||||
# var where_to = mp.origin + current_dir * 0.8 + locnav_probe * 0.0 + (target - mp.origin).normalized() * 0.2
|
||||
var where_to = mp.origin + (target - mp.origin).normalized()
|
||||
if gt.origin != where_to:
|
||||
gt = gt.looking_at(where_to, Vector3.UP)
|
||||
gt.origin = Vector3()
|
||||
# print("target: ", target)
|
||||
var timeout = cmd[3]
|
||||
@@ -175,20 +199,18 @@ func _physics_process(delta):
|
||||
cmd_new = ["climb", "1"]
|
||||
cmds.push_front(cmd_new)
|
||||
elif timeout >= 0.0 && d > cmd[2]:
|
||||
var cmd_new = ["walkto", cmd[1], cmd[2], timeout]
|
||||
cmds.push_front(cmd_new)
|
||||
if can_walk:
|
||||
var cmd_new = ["walkto", cmd[1], cmd[2], timeout]
|
||||
cmds.push_front(cmd_new)
|
||||
elif d > cmd[2]:
|
||||
var dir = target - root.global_transform.origin
|
||||
dir = dir.normalized() * (d - cmd[2])
|
||||
root.global_transform.origin += dir
|
||||
characters.set_walk_speed(root, 0.0, 0.0)
|
||||
# animtree["parameters/state/locomotion/loc/blend_position"].x = 0.0
|
||||
root.remove_meta("cmdq_walk")
|
||||
else:
|
||||
characters.set_walk_speed(root, 0.0, 0.0)
|
||||
# animtree["parameters/state/locomotion/loc/blend_position"].x = 0.0
|
||||
root.remove_meta("cmdq_walk")
|
||||
# print(d, " ", timeout, " ", gt)
|
||||
"set_other":
|
||||
var cmdq_other = []
|
||||
if cmd[1].has_meta("cmdqueue"):
|
||||
|
||||
Reference in New Issue
Block a user