diff --git a/tools/unity-avatar-exporter/Assets/Editor/AvatarExporter/FST.cs b/tools/unity-avatar-exporter/Assets/Editor/AvatarExporter/FST.cs index d2ebd5a312..68c81146f7 100644 --- a/tools/unity-avatar-exporter/Assets/Editor/AvatarExporter/FST.cs +++ b/tools/unity-avatar-exporter/Assets/Editor/AvatarExporter/FST.cs @@ -30,10 +30,29 @@ namespace Overte From = f; To = t; } - public override string ToString() + public override string ToString() => $"jointMap = {From} = {To}"; + } + + class Joint + { + public string From; + public string To; + + private Regex parseRx = new Regex(@"^(?[\w]*)\s*=\s*(?.*)", RegexOptions.Compiled | RegexOptions.IgnoreCase); + + public Joint(string RawInput) { - return $"jointMap = {From} = {To}"; + var parsed = parseRx.Matches(RawInput).First(); + From = parsed.Groups["From"].Value.Trim(); + To = parsed.Groups["To"].Value.Trim(); } + + public Joint(string f, string t) + { + From = f; To = t; + } + + public override string ToString() => $"joint = {From} = {To}"; } class JointRotationOffset @@ -119,9 +138,11 @@ namespace Overte public List remapBlendShapeList = new List(); + public List jointList = new List(); public List jointMapList = new List(); public List jointRotationList = new List(); public List jointIndexList = new List(); + public List freeJointList = new List(); private Regex parseRx = new Regex(@"^(?[\w]*)\s*=\s*(?.*)", RegexOptions.Compiled | RegexOptions.IgnoreCase); @@ -148,6 +169,7 @@ namespace Overte AddIfNotNull(jointMapList); AddIfNotNull(jointIndexList); AddIfNotNull(jointRotationList); + AddIfNotNull("freeJoint", freeJointList); AddIfNotNull(nameof(materialMap), materialMap); AddIfNotNull(nameof(flowPhysicsData), flowPhysicsData); @@ -170,6 +192,12 @@ namespace Overte } } + private void AddIfNotNull(string keyname, List list) + { + if (list.Count != 0) + list.ForEach(x => fstContent.Add($"{keyname} = {x}")); + } + private void AddIfNotNull(List list) { if (list.Count != 0) @@ -233,6 +261,9 @@ namespace Overte // TODO:Parse it when changed to importing instead of updating break; + case "joint": + jointList.Add(new Joint(value)); + break; case "jointMap": jointMapList.Add(new JointMap(value)); break; @@ -242,6 +273,9 @@ namespace Overte case "jointIndex": jointIndexList.Add(new JointIndex(value)); break; + case "freeJoint": + freeJointList.Add(value); + break; case "bs": remapBlendShapeList.Add(new RemapBlendShape(value));