private void OnSyncAnimations(SyncAnimations payload, Action onCompleteCallback)
 {
     if (payload.AnimationStates == null)
     {
         _actorManager.UponStable(() =>
         {
             // Gather and send the animation states of all actors.
             var animationStates = new List <MWActorAnimationState>();
             foreach (var actor in _actorManager.Actors)
             {
                 if (actor != null)
                 {
                     var actorAnimationStates = actor.GetOrCreateActorComponent <AnimationComponent>().GetAnimationStates();
                     if (actorAnimationStates != null)
                     {
                         animationStates.AddRange(actorAnimationStates);
                     }
                 }
             }
             Protocol.Send(new SyncAnimations()
             {
                 AnimationStates = animationStates.ToList()
             }, payload.MessageId);
             onCompleteCallback?.Invoke();
         });
     }
     else
     {
         // Apply animation states to the actors.
         foreach (var animationState in payload.AnimationStates)
         {
             SetAnimationState setAnimationState = new SetAnimationState();
             setAnimationState.ActorId       = animationState.ActorId;
             setAnimationState.AnimationName = animationState.AnimationName;
             setAnimationState.State         = animationState.State;
             _actorManager.ProcessActorCommand(animationState.ActorId, setAnimationState, null);
         }
         onCompleteCallback?.Invoke();
     }
 }
 private void OnSetAnimationState(SetAnimationState payload, Action onCompleteCallback)
 {
     ProcessActorCommand(payload.ActorId, payload, onCompleteCallback);
 }