character controller fixes to handle missing expressions, root bone and mixamo model setup

This commit is contained in:
Turánszki János
2023-10-06 07:52:13 +02:00
parent adcfd8a0e7
commit 31c2d141a7
@@ -374,24 +374,6 @@ local function Character(model_name, start_position, face, controllable, anim_sc
self.right_foot = humanoid.GetBoneEntity(HumanoidBone.RightFoot)
self.left_toes = humanoid.GetBoneEntity(HumanoidBone.LeftToes)
self.right_toes = humanoid.GetBoneEntity(HumanoidBone.RightToes)
-- Create a base capsule collider if it's not yet configured for character:
-- It will be used for movement logic and GPU collision effects
if scene.Component_GetCollider(entity) == nil then
local collider = scene.Component_CreateCollider(entity)
collider.SetCPUEnabled(false)
collider.SetGPUEnabled(true)
collider.Shape = ColliderShape.Capsule
collider.Radius = 0.3
collider.Offset = Vector(0, collider.Radius, 0)
collider.Tail = Vector(0, 1.4, 0)
local head_transform = scene.Component_GetTransform(self.head)
if head_transform ~= nil then
collider.Tail = head_transform.GetPosition()
end
end
self.collider = entity
break
end
end
@@ -407,6 +389,25 @@ local function Character(model_name, start_position, face, controllable, anim_sc
end
end
-- Create a base capsule collider if it's not yet configured for character:
-- It will be used for movement logic and GPU collision effects
if scene.Component_GetCollider(self.humanoid) == nil then
local collider = scene.Component_CreateCollider(self.model)
self.collider = self.model
collider.SetCPUEnabled(false)
collider.SetGPUEnabled(true)
collider.Shape = ColliderShape.Capsule
collider.Radius = 0.3
collider.Offset = Vector(0, collider.Radius, 0)
collider.Tail = Vector(0, 1.4, 0)
local head_transform = scene.Component_GetTransform(self.head)
if head_transform ~= nil then
collider.Tail = head_transform.GetPosition()
end
else
self.collider = self.humanoid
end
self.root = scene.Entity_FindByName("Root", self.model)
self.anims[States.IDLE] = scene.RetargetAnimation(self.humanoid, animations.IDLE, false, anim_scene)
@@ -500,14 +501,16 @@ local function Character(model_name, start_position, face, controllable, anim_sc
-- Blend to current mood, blend out other moods:
local expression = scene.Component_GetExpression(self.expression)
for i,preset in pairs(Mood) do
local weight = expression.GetPresetWeight(preset)
if preset == self.mood then
weight = math.lerp(weight, self.mood_amount, 0.1)
else
weight = math.lerp(weight, 0, 0.1)
if expression ~= nil then
for i,preset in pairs(Mood) do
local weight = expression.GetPresetWeight(preset)
if preset == self.mood then
weight = math.lerp(weight, self.mood_amount, 0.1)
else
weight = math.lerp(weight, 0, 0.1)
end
expression.SetPresetWeight(preset, weight)
end
expression.SetPresetWeight(preset, weight)
end
-- state and animation update
@@ -867,11 +870,13 @@ local function Character(model_name, start_position, face, controllable, anim_sc
-- Offset root transform to lower foot pos:
local root_bone_transform = scene.Component_GetTransform(self.root)
root_bone_transform.ClearTransform()
local root_pos = root_bone_transform.GetPosition()
root_bone_transform.Translate(Vector(0, self.root_bone_offset))
--DrawDebugText(self.root_bone_offset, self.position, Vector(1,1,1,1), 0.1, DEBUG_TEXT_CAMERA_FACING)
--DrawPoint(vector.Add(root_pos, Vector(0, self.root_bone_offset)), 0.1, Vector(1,0,0,1))
if root_bone_transform ~= nil then
root_bone_transform.ClearTransform()
local root_pos = root_bone_transform.GetPosition()
root_bone_transform.Translate(Vector(0, self.root_bone_offset))
--DrawDebugText(self.root_bone_offset, self.position, Vector(1,1,1,1), 0.1, DEBUG_TEXT_CAMERA_FACING)
--DrawPoint(vector.Add(root_pos, Vector(0, self.root_bone_offset)), 0.1, Vector(1,0,0,1))
end
-- Remove IK effectors by default:
if scene.Component_GetInverseKinematics(self.left_foot) ~= nil then