// Shortcut to register idling animation public void AddIdleAnimation(string animationName, string faceName = null, float duration = 0.0f, float fadeLength = -1.0f, float blendWeight = 1.0f, float preGap = 0.0f, bool disableBlink = false, int weight = 1) { var animatedVoiceRequest = new AnimatedVoiceRequest(); animatedVoiceRequest.AddAnimation( animationName, duration == 0.0f ? IdleAnimationDefaultDuration : duration, fadeLength, blendWeight, preGap, "idle", true); animatedVoiceRequest.AddFace( faceName ?? DefaultFace.Faces[0].Name, description: "idle"); animatedVoiceRequest.DisableBlink = disableBlink; AddIdleAnimation(animatedVoiceRequest, weight); }
// Speak with animation and face expression public async Task AnimatedSay(AnimatedVoiceRequest request, CancellationToken token) { // Stop blink if (request.DisableBlink && !token.IsCancellationRequested) { StopBlink(); } // Stop default animation loop if (request.StopIdlingOnStart && !token.IsCancellationRequested) { StopIdling(); } // Speak, animate and express face sequentially foreach (var animatedVoice in request.AnimatedVoices) { if (token.IsCancellationRequested) { return; } if (animatedVoice.Animations != null && animatedVoice.Animations.Count > 0) { _ = Animate(new AnimationRequest(animatedVoice.Animations, false, false, false, request.StopLayeredAnimations), token); } if (animatedVoice.Faces != null && animatedVoice.Faces.Count > 0) { _ = SetFace(new FaceRequest(animatedVoice.Faces, false)); } // Wait for the requested voices end await Say(new VoiceRequest(animatedVoice.Voices, false), token); } // Restart idling and reset face if (request.StartIdlingOnEnd && !token.IsCancellationRequested) { _ = StartIdlingAsync(); } // Restore default face expression if (request.StartIdlingOnEnd) { _ = SetDefaultFace(); } // Restart blink if (request.DisableBlink && !token.IsCancellationRequested) { StartBlink(); } }
// Register idling animation public void AddIdleAnimation(AnimatedVoiceRequest animatedVoiceRequest, int weight = 1) { // Add animated voice request animatedVoiceRequest.StartIdlingOnEnd = false; animatedVoiceRequest.StopIdlingOnStart = false; animatedVoiceRequest.StopLayeredAnimations = true; idleAnimatedVoiceRequests.Add(animatedVoiceRequest); // Set weight var index = idleAnimatedVoiceRequests.Count - 1; for (var i = 0; i < weight; i++) { idleWeightedIndexes.Add(index); } }