This commit is contained in:
Segey Lapin
2021-12-24 23:56:10 +03:00
parent d401cf1090
commit f62e7fa720
113 changed files with 198252 additions and 412103 deletions

View File

@@ -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"):