Skip to content

Version 1.8.1, #28

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 93 additions & 2 deletions Runtime/API/Animation/KinetixAnimation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public void RegisterLocalPlayerAnimator(Animator _Animator, string _AvatarID)
/// <param name="_Config">Configuration for the root motion</param>
public void RegisterLocalPlayerAnimator(Animator _Animator, RootMotionConfig _Config)
{
KinetixAnimationBehaviour.RegisterLocalPlayerAnimator(_Animator, null, _Config);
KinetixAnimationBehaviour.RegisterLocalPlayerAnimator(_Animator, null, null, _Config);
OnRegisteredLocalPlayer?.Invoke();
}

Expand All @@ -87,7 +87,42 @@ public void RegisterLocalPlayerAnimator(Animator _Animator, RootMotionConfig _Co
/// <param name="_Config">Configuration for the root motion</param>
public void RegisterLocalPlayerAnimator(Animator _Animator, string _AvatarID, RootMotionConfig _Config)
{
KinetixAnimationBehaviour.RegisterLocalPlayerAnimator(_Animator, _AvatarID, _Config);
KinetixAnimationBehaviour.RegisterLocalPlayerAnimator(_Animator, _AvatarID, null, _Config);
OnRegisteredLocalPlayer?.Invoke();
}

/// <summary>
/// Register the local Player animator with avatar setup to play animation on it
/// </summary>
/// <param name="_Animator">Animator of your local character</param>
/// <param name="_AvatarID">ID of the avatar uploaded on your devportal</param>
public void RegisterLocalPlayerAnimator(Animator _Animator, Avatar _Avatar, string _AvatarID)
{
KinetixAnimationBehaviour.RegisterLocalPlayerAnimator(_Animator, _AvatarID, _Avatar, null);

OnRegisteredLocalPlayer?.Invoke();
}

/// <summary>
/// Register the local Player animator with avatar setup to play animation on it
/// </summary>
/// <param name="_Animator">Animator of your local character</param>
/// <param name="_Config">Configuration for the root motion</param>
public void RegisterLocalPlayerAnimator(Animator _Animator, Avatar _Avatar, RootMotionConfig _Config)
{
KinetixAnimationBehaviour.RegisterLocalPlayerAnimator(_Animator, null, _Avatar, _Config);
OnRegisteredLocalPlayer?.Invoke();
}

/// <summary>
/// Register the local Player animator with avatar setup to play animation on it
/// </summary>
/// <param name="_Animator">Animator of your local character</param>
/// <param name="_AvatarID">ID of the avatar uploaded on your devportal</param>
/// <param name="_Config">Configuration for the root motion</param>
public void RegisterLocalPlayerAnimator(Animator _Animator, Avatar _Avatar, string _AvatarID, RootMotionConfig _Config)
{
KinetixAnimationBehaviour.RegisterLocalPlayerAnimator(_Animator, _AvatarID, _Avatar, _Config);
OnRegisteredLocalPlayer?.Invoke();
}

Expand Down Expand Up @@ -286,6 +321,35 @@ public string RegisterAvatarAnimator(Animator _Animator, string _AvatarID, RootM
return playerUUID;
}

/// <summary>
/// Register a local Character animator with avatar setup to play animation on it
/// </summary>
/// <param name="_Animator">Animator of your local character</param>
/// <param name="_AvatarID">ID of the avatar uploaded on your devportal</param>
public string RegisterAvatarAnimator(Animator _Animator, Avatar _Avatar, string _AvatarID)
{
string playerUUID = KinetixAnimationBehaviour.RegisterAvatarAnimator(_Animator, _AvatarID, _Avatar);

OnRegisteredCustomPlayer?.Invoke();

return playerUUID;
}

/// <summary>
/// Register a local Character animator with avatar setup to play animation on it
/// </summary>
/// <param name="_Animator">Animator of your local character</param>
/// <param name="_AvatarID">ID of the avatar uploaded on your devportal</param>
/// <param name="_Config">Configuration for the root motion</param>
public string RegisterAvatarAnimator(Animator _Animator, Avatar _Avatar, string _AvatarID, RootMotionConfig _Config)
{
string playerUUID = KinetixAnimationBehaviour.RegisterAvatarAnimator(_Animator, _AvatarID, _Avatar, _Config);

OnRegisteredCustomPlayer?.Invoke();

return playerUUID;
}

/// <summary>
/// Register a local Character with a custom hierarchy and a pose interpreter
/// </summary>
Expand Down Expand Up @@ -1459,6 +1523,33 @@ public void SetIKRotationWeightOnAvatar(string _PlayerUUID, AvatarIKGoal _Goal,
KinetixAnimationBehaviour.SetIKRotationWeightOnAvatar(_PlayerUUID, _Goal, _Value);
}

//=====================================//
// Mask //
//=====================================//
#region Mask

public void SetMaskOnLocalPlayer(KinetixMask _Mask)
{
KinetixAnimationBehaviour.SetMaskOnLocalPlayer(_Mask);
}

public KinetixMask GetMaskOnLocalPlayer()
{
return KinetixAnimationBehaviour.GetMaskOnLocalPlayer();
}

public void SetMaskOnAvatar(string _PlayerUUID, KinetixMask _Mask)
{
KinetixAnimationBehaviour.SetMaskOnAvatar(_PlayerUUID, _Mask);
}

public KinetixMask GetMaskOnAvatar(string _PlayerUUID)
{
return KinetixAnimationBehaviour.GetMaskOnAvatar(_PlayerUUID);
}

#endregion


#region Internal
public KinetixAnimation()
Expand Down
40 changes: 37 additions & 3 deletions Runtime/API/Animation/KinetixAnimationBehaviour.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ internal static class KinetixAnimationBehaviour
/// <param name="_Animator">Animator of the Local Player</param>
public static void RegisterLocalPlayerAnimator(Animator _Animator, string _AvatarID = null)
{
RegisterLocalPlayerAnimator(_Animator, _AvatarID, null);
RegisterLocalPlayerAnimator(_Animator, _AvatarID, _Animator.avatar, null);
}


Expand All @@ -30,16 +30,19 @@ public static void RegisterLocalPlayerAnimator(Animator _Animator, string _Avata
/// </summary>
/// <param name="_Animator">Animator of the Local Player</param>
/// <param name="_Config">Configuration of the root motion</param>
public static void RegisterLocalPlayerAnimator(Animator _Animator, string _AvatarID, RootMotionConfig _Config)
public static void RegisterLocalPlayerAnimator(Animator _Animator, string _AvatarID, Avatar _Avatar, RootMotionConfig _Config)
{
if (KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().LocalPlayer != null &&
KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().LocalPlayer.KAvatar != null)
{
KinetixDebug.LogWarning("A local player was already registered. Please call KinetixCore.Animation.UnregisterLocalPlayer");
return;
}

if (_Avatar == null)
_Avatar = _Animator.avatar;

string playerUUID = KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().AddPlayerCharacterComponent(_Animator, _Config, true);
string playerUUID = KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().AddPlayerCharacterComponent(_Animator, _Avatar, _Config, true);

KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().GetPlayerManager(playerUUID).SetAvatarID(_AvatarID);
KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().SetLocalPlayer(playerUUID);
Expand Down Expand Up @@ -157,6 +160,37 @@ public static string RegisterAvatarAnimator(Animator _Animator, string _AvatarID
return playerUUID;
}

/// <summary>
/// Register the Local Player Animator
/// </summary>
/// <param name="_Animator">Animator of the Local Player</param>
public static string RegisterAvatarAnimator(Animator _Animator, string _AvatarID, Avatar _Avatar)
{
if (_Avatar == null)
_Avatar = _Animator.avatar;

string playerUUID = KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().AddPlayerCharacterComponent(_Animator, _Avatar, null, false);
KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().GetPlayerManager(playerUUID).SetAvatarID(_AvatarID);

return playerUUID;
}

/// <summary>
/// Register the Local Player Animator
/// </summary>
/// <param name="_Animator">Animator of the Local Player</param>
/// <param name="_Config">Configuration of the root motion</param>
public static string RegisterAvatarAnimator(Animator _Animator, string _AvatarID, Avatar _Avatar, RootMotionConfig _Config)
{
if (_Avatar == null)
_Avatar = _Animator.avatar;

string playerUUID = KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().AddPlayerCharacterComponent(_Animator, _Avatar, _Config, false);
KinetixCoreBehaviour.ManagerLocator.Get<PlayersManager>().GetPlayerManager(playerUUID).SetAvatarID(_AvatarID);

return playerUUID;
}

/// <summary>
/// Register the Local Player with a custom hierarchy
/// </summary>
Expand Down
2 changes: 1 addition & 1 deletion Runtime/Account/AccountPoller.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public async void StartPolling()
if (cancellationTokenSource != null && !cancellationTokenSource.IsCancellationRequested)
{
cancellationTokenSource?.Cancel();
await Task.Yield();
await KinetixYield.Yield();
}

string url = KinetixConstants.c_SDK_API_URL + "/v1/users/" +
Expand Down
1 change: 1 addition & 0 deletions Runtime/Animator/AnimationData/KinetixFrame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public class KinetixFrame : KinetixPose
public readonly Dictionary<string, TransformData> resetKeys;
public readonly int frame;
public bool hasBlendshapes;

public float CurrentTime
{
get
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,37 @@

namespace Kinetix.Internal
{
public class KinetixMaskEffect : IFrameEffect, IFrameEffectModify
public class KinetixMaskEffect : IFrameEffect, IFrameEffectModify, ISamplerAuthority
{
public int Priority => -150;
public KinetixMask mask;

public bool IsEnabled { get; set; } = true;
public void OnPlayedFrame(ref KinetixFrame _FinalFrame, KinetixFrame[] _Frames, in KinetixClipTrack[] _Tracks)
public SamplerAuthorityBridge Authority { get; set; }

public void OnPlayedFrame(ref KinetixFrame _FinalFrame, KinetixFrame[] _Frames, in KinetixClipTrack[] _Tracks)
{
if (mask == null || !IsEnabled)
return;

List<TransformData> tr = _FinalFrame.humanTransforms;
KinetixPose pose = Authority.GetAvatarPos();

List<TransformData> poseTr = pose.humanTransforms;
List<HumanBodyBones> poseBones = pose.bones;

List<TransformData> tr = _FinalFrame.humanTransforms;
List<HumanBodyBones> bones = _FinalFrame.bones;

for (int i = _FinalFrame.bones.Count - 1; i >= 0; i--)
{
if (!mask.IsEnabled(bones[i]))
HumanBodyBones bone = bones[i];
if (!mask.IsEnabled(bone))
{
bones.RemoveAt(i);
tr.RemoveAt(i);
int g = poseBones.IndexOf(bone);
if (g < 0)
continue;

tr[i] = poseTr[g];
}
}
}
Expand All @@ -37,7 +49,7 @@ public void OnQueueEnd(){}

public void OnQueueStart(){}

public void OnSoftStop(float softDuration){}
public void OnSoftStop(float _SoftDuration){}

public void Update(){}
}
Expand Down
Binary file modified Runtime/Clip/Kinetix.Clip.dll
Binary file not shown.
5 changes: 3 additions & 2 deletions Runtime/Managers/PlayerManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,12 @@ public void AddPlayerCharacterComponent(Animator _Animator)
OnRegisterPlayer();
}

public void AddPlayerCharacterComponent(Animator _Animator, RootMotionConfig _RootMotionConfig)
public void AddPlayerCharacterComponent(Animator _Animator, Avatar _Avatar, RootMotionConfig _RootMotionConfig)
{
if (KAvatar != null)
UnregisterPlayerComponent();

KAvatar = CreateKinetixAvatar(_Animator.avatar, _Animator.transform, EExportType.KinetixClip);
KAvatar = CreateKinetixAvatar(_Avatar, _Animator.transform, EExportType.KinetixClip);
KinetixCharacterComponent = AddKCCAndInit(_Animator, KAvatar, _RootMotionConfig);
OnRegisterPlayer();
}
Expand Down Expand Up @@ -204,6 +204,7 @@ public void LoadPlayerAnimation(AnimationIds _Ids, string _LockId, Action _OnSuc
LoadPlayerAnimationInternal(emote, _OnSuccess, _OnFailure);
}


public void LoadPlayerAnimations(AnimationIds[] _Ids, string _LockId, Action _OnSuccess = null, Action _OnFailure = null)
{
for (int i = 0; i < _Ids.Length; i++)
Expand Down
10 changes: 9 additions & 1 deletion Runtime/Managers/PlayersManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,19 @@ public string AddPlayerCharacterComponent(Animator _Animator, bool _LocalPlayer
}

public string AddPlayerCharacterComponent(Animator _Animator, RootMotionConfig _RootMotionConfig, bool _LocalPlayer)
{
return AddPlayerCharacterComponent(_Animator, _Animator.avatar, _RootMotionConfig, _LocalPlayer);
}


public string AddPlayerCharacterComponent(Animator _Animator, Avatar _Avatar, RootMotionConfig _RootMotionConfig, bool _LocalPlayer)
{
PlayerManager newPlayer = _LocalPlayer ? LocalPlayer : new PlayerManager(serviceLocator, config);
newPlayer.AddPlayerCharacterComponent(_Animator, _RootMotionConfig);
newPlayer.AddPlayerCharacterComponent(_Animator, _Avatar, _RootMotionConfig);

if (!players.Contains(newPlayer))
players.Add(newPlayer);

return newPlayer.UUID;
}

Expand Down
3 changes: 2 additions & 1 deletion Runtime/Managers/UGCManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,8 @@ public async void StartPollingForNewUGCToken()
if (tokenCancellationPollingForToken != null && !tokenCancellationPollingForToken.IsCancellationRequested)
{
tokenCancellationPollingForToken?.Cancel();
await Task.Yield();

await KinetixYield.Yield();
}

string url = KinetixConstants.c_SDK_API_URL + "/v1/process/token/" + TokenUUID;
Expand Down
2 changes: 1 addition & 1 deletion Runtime/Operations/OperationDownloadIcon/IconDownloader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ private static async Task<Texture2D> DownsampleTexture(Texture2D sourceTexture,

if (y % COMPUTE_DOWNSAMPLE_EXECUTION_COUNT_BEFORE_YIELD == 0)
{
await Task.Yield();
await KinetixYield.Yield();
}
}

Expand Down
21 changes: 16 additions & 5 deletions Runtime/Operations/OperationRetargetEmote/EmoteRetargeting.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ public EmoteRetargeting(EmoteRetargetingConfig _Config): base(_Config) {}

public override async Task Execute()
{
KinetixLogger.LogDebug("HELP," + Config.Emote.Ids.UUID, "EmoteRetargeting." + nameof(Execute) + " - 16", false);

if (CancellationTokenSource.IsCancellationRequested || Config.CancellationSequencer.canceled)
{
CurrentTaskCompletionSource.TrySetCanceled();
Expand Down Expand Up @@ -115,18 +117,27 @@ private async void CheckRetargeting()
{
while (!CurrentTaskCompletionSource.Task.IsCompleted)
{
await Task.Yield();
await KinetixYield.Yield();
if (CancellationTokenSource.IsCancellationRequested || Config.CancellationSequencer.canceled)
CurrentTaskCompletionSource.TrySetCanceled();
}
}

public override bool Compare(EmoteRetargetingConfig _Config)
{
return
Config.Path == null && _Config.Path == null ||
Config.Path != null && Config.Path.Equals(_Config.Path) ||
Config.Indexer != null && Config.Indexer.Equals(_Config.Indexer);
bool path =
Config.Path == null && _Config.Path == null ||
Config.Path != null && Config.Path.Equals(_Config.Path);

bool emote =
Config.Emote == null && _Config.Emote == null ||
Config.Emote != null && Config.Emote.Equals(_Config.Emote);

bool avatar = Config.Avatar.Equals(_Config.Avatar);

bool indexer = Config.Indexer != null && Config.Indexer.GetType().Equals(_Config.Indexer.GetType());

return path && emote && avatar && indexer;
}

public override IOperation<EmoteRetargetingConfig, EmoteRetargetingResponse<TResponseType>> Clone()
Expand Down
4 changes: 3 additions & 1 deletion Runtime/Operations/OperationSystem/OperationBatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,9 @@ private async void MirrorTaskCompletionSource(TaskCompletionSource<TResponse> so
try
{
while (!source1.Task.IsCompleted && _CancellationTokenSource is { Token: { IsCancellationRequested: false } })
await Task.Yield();
{
await KinetixYield.Yield();
}
MirrorTCSResult(source1, source2, _CancellationTokenSource);

}
Expand Down
4 changes: 2 additions & 2 deletions Runtime/Retarget/CompilationLog.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Starting compiling Kinetix.Retarget.dll
D:\UnityInstall\2020.3.33f1\Editor\Data\Tools\RoslynScripts\unity_csc.bat /noconfig @Temp/UnityTempFile-5a5cb80f919c71244ae1da21c3d8e3fd
D:\UnityInstall\2020.3.33f1\Editor\Data\Tools\RoslynScripts\unity_csc.bat /noconfig @Temp/UnityTempFile-11c7cc3f5ec7f534695b43269a793491
# Starting IL post processing on Kinetix.Retarget.dll
D:/UnityInstall/2020.3.33f1/Editor/Data/MonoBleedingEdge/bin/mono.exe D:/UnityInstall/2020.3.33f1/Editor/Data/Tools/ILPostProcessorRunner/ILPostProcessorRunner.exe @D:/Kinetix/kinetix-emote-wheel/Temp/UnityTempFile-6ff863ac9fd1758468cdf01356a5700a
D:/UnityInstall/2020.3.33f1/Editor/Data/MonoBleedingEdge/bin/mono.exe D:/UnityInstall/2020.3.33f1/Editor/Data/Tools/ILPostProcessorRunner/ILPostProcessorRunner.exe @D:/Kinetix/kinetix-emote-wheel/Temp/UnityTempFile-495fa8d13cdfcfb40af0fed8dd6be891
Binary file modified Runtime/Retarget/Kinetix.Retarget.dll
Binary file not shown.
4 changes: 4 additions & 0 deletions Runtime/Retarget/Webgl/CompilationLog.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Starting compiling Kinetix.Retarget.dll
D:\UnityInstall\2020.3.33f1\Editor\Data\Tools\RoslynScripts\unity_csc.bat /noconfig @Temp/UnityTempFile-8f41ad4c936112b49aca4adcd4b62586
# Starting IL post processing on Kinetix.Retarget.dll
D:/UnityInstall/2020.3.33f1/Editor/Data/MonoBleedingEdge/bin/mono.exe D:/UnityInstall/2020.3.33f1/Editor/Data/Tools/ILPostProcessorRunner/ILPostProcessorRunner.exe @D:/Kinetix/kinetix-emote-wheel/Temp/UnityTempFile-5d455811ffd3d3b478f30cc7752716f9
7 changes: 7 additions & 0 deletions Runtime/Retarget/Webgl/CompilationLog.txt.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified Runtime/Retarget/Webgl/Kinetix.Retarget.dll
Binary file not shown.
Loading
Loading