// 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);
        }
Beispiel #2
0
        // 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);
            }
        }