Some fixes
Disabled feet IK, proper handling of exit room Added quest system from proto2
This commit is contained in:
@@ -19,6 +19,8 @@ func _ready():
|
||||
orientation.origin = Vector3()
|
||||
add_to_group("characters")
|
||||
do_ungrab()
|
||||
# feet_ik_init()
|
||||
|
||||
|
||||
func _physics_process(delta):
|
||||
# motion = motion.linear_interpolate(motion_target, MOTION_INTERPOLATE_SPEED * delta)
|
||||
@@ -46,6 +48,7 @@ func _physics_process(delta):
|
||||
if attacking >= 0.0:
|
||||
attacking -= delta
|
||||
rpg.update_stats(self)
|
||||
# feet_ik()
|
||||
var skel
|
||||
func get_skeleton():
|
||||
if skel:
|
||||
@@ -95,6 +98,89 @@ static func calc_offset(c2, bone2):
|
||||
# print("offset: ", offset)
|
||||
return offset
|
||||
|
||||
var foot_ik_l = {
|
||||
"foot": "foot_L",
|
||||
"bone1": "upperleg02_L",
|
||||
"bone2": "lowerleg01_L",
|
||||
"h": -0.3
|
||||
}
|
||||
|
||||
var foot_ik_r = {
|
||||
"foot": "foot_R",
|
||||
"bone1": "upperleg02_R",
|
||||
"bone2": "lowerleg01_R",
|
||||
"h": -0.3
|
||||
}
|
||||
func foot_ik_reset(sk: Skeleton, data: Dictionary, obj: Spatial):
|
||||
var bone1 = sk.fine_bone(data.bone1)
|
||||
var bone2 = sk.fine_bone(data.bone2)
|
||||
var foot = sk.find_bone(data.foot)
|
||||
assert(foot >= 0 && bone1 >= 0 && bone2 >= 0)
|
||||
var xf = sk.get_bone_global_pose(foot)
|
||||
var xf1 = sk.get_bone_global_pose(bone1)
|
||||
var xf2 = sk.get_bone_global_pose(bone2)
|
||||
var l1 = xf1.origin.distance_to(xf2.origin)
|
||||
var l2 = xf2.origin.distance_to(xf.origin)
|
||||
var lt = xf1.origin.distance_squared_to(xf.origin)
|
||||
var cosa = l1 * (l1 + l2 * l2 + lt) / (2 * l1 * l2)
|
||||
var v1 = xf2.origin - xf1.origin
|
||||
var v2 = xf.origin - xf1.origin
|
||||
var rot_axis = v1.cross(v2).normalized()
|
||||
var space_state = get_world().direct_space_state
|
||||
var xform = global_transform
|
||||
var f = (xform * xf).origin
|
||||
var result = space_state.intersect_ray(f, f + Vector3(0, data.h, 0), [self], 0xffff)
|
||||
if result.has("position"):
|
||||
print(data.foot, result.position)
|
||||
obj.global_transform.origin = result.position
|
||||
|
||||
func feet_ik():
|
||||
var sk: Skeleton = get_skeleton()
|
||||
var foot1 = sk.find_bone("foot_L")
|
||||
var foot2 = sk.find_bone("foot_R")
|
||||
assert(foot1 >= 0 && foot2 >= 0)
|
||||
var xf1 = sk.get_bone_global_pose(foot1)
|
||||
var xf2 = sk.get_bone_global_pose(foot2)
|
||||
var space_state = get_world().direct_space_state
|
||||
var xform = global_transform
|
||||
var f1 = (xform * xf1).origin
|
||||
var f2 = (xform * xf2).origin
|
||||
var result1 = space_state.intersect_ray(f1, f1 + Vector3(0, -0.3, 0), [self], 0xffff)
|
||||
var result2 = space_state.intersect_ray(f2, f2 + Vector3(0, -0.3, 0), [self], 0xffff)
|
||||
if result1.has("position"):
|
||||
print("L: ", result1.position)
|
||||
foot_ik_target_l.global_transform.origin = result1.position
|
||||
if result2.has("position"):
|
||||
print("R: ", result2.position)
|
||||
foot_ik_target_r.global_transform.origin = result2.position
|
||||
var foot_ik_target_l
|
||||
var foot_ik_target_r
|
||||
func feet_ik_init():
|
||||
var s1 = Spatial.new()
|
||||
var s2 = Spatial.new()
|
||||
var sk: Skeleton = get_skeleton()
|
||||
var foot1 = sk.find_bone("foot_L")
|
||||
var foot2 = sk.find_bone("foot_R")
|
||||
var xf1 = sk.get_bone_global_pose(foot1)
|
||||
var xf2 = sk.get_bone_global_pose(foot2)
|
||||
s1.transform = xf1
|
||||
s2.transform = xf2
|
||||
foot_ik_target_l = s1
|
||||
foot_ik_target_r = s2
|
||||
# var ik1 : = SkeletonIK.new()
|
||||
# ik1.root_bone = "upperleg02_L"
|
||||
# ik1.tip_bone = "foot_L"
|
||||
# ik1.target_node = get_path_to(foot_ik_target_l)
|
||||
# ik1.interpolation = 0.1
|
||||
# sk.add_child(ik1)
|
||||
# var ik2 = SkeletonIK.new()
|
||||
# ik2.root_bone = "upperleg02_R"
|
||||
# ik2.tip_bone = "foot_R"
|
||||
# ik2.target_node = get_path_to(foot_ik_target_r)
|
||||
# ik2.interpolation = 0.1
|
||||
# sk.add_child(ik2)
|
||||
# ik1.start(true)
|
||||
# ik2.start(true)
|
||||
var act = {
|
||||
"stop":[
|
||||
["travel", p1, "Motion"],
|
||||
|
||||
Reference in New Issue
Block a user