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); }