public IEnumerator OnNewGuest(VOGControllerAuth ctrl, AvatarGender gender)
    {
        try
        {
            ctrl.DisableInput();

            //Create guest
            ApiCall call = VostopiaClient.Authentication.BeginSignInGuest(gender);
            IEnumerator e = call.Wait();
            while (e.MoveNext()) { yield return e.Current; }
            if (!VostopiaClient.Authentication.EndSignIn(call))
            {
                ctrl.ShowMessageDialog("Uh-oh", "There was an error creating a guest account for you. Please try again.", () => { });
                yield break;
            }

            //Store authentication key
            if (call.ResponseData["authKey"] != null)
            {
                string authKey = (string)call.ResponseData["authKey"];
                ctrl.StoreGuestAuthenticationKey(authKey);
            }

            //Continue to auth completed screen
            ctrl.AuthenticationCompleted();
        }
        finally
        {
            ctrl.EnableInput();
        }
    }
    /**
     * Called on the same frame the avatar is loaded. Use this to modify the avatar after
     * it's loaded, e.g. set the Mecanim Avatar, scale mesh, etc.
     */
    public void OnAvatarGenderUpdated(AvatarGender gender)
    {
        var avatar = gender == AvatarGender.Male ? MaleAvatar : FemaleAvatar;
        CachedAnimator.avatar = avatar;

        var femaleLayer = GetGenderLayer(AvatarGender.Female);
        if (femaleLayer != 0)
        {
            var femaleLayerWeight = gender == AvatarGender.Female ? 1f : 0f;
            CachedAnimator.SetLayerWeight(femaleLayer, femaleLayerWeight);
        }
    }
    public IEnumerator OnNewUser(VOGControllerAuth ctrl, AvatarGender gender)
    {
        try
        {
            ctrl.DisableInput();

            //Create user
            ApiCall call = VostopiaClient.Authentication.BeginRegister(Email, KeepInTouch, gender);
            IEnumerator e = call.Wait();
            while (e.MoveNext()) { yield return e.Current; }
            var registerResult = VostopiaClient.Authentication.EndRegister(call);
            if (registerResult != VostopiaAuthenticationClient.RegisterResult.SUCCESS)
            {
                Debug.LogWarning("Error creating new user, " + registerResult);
                string msg = "";
                if (registerResult == VostopiaAuthenticationClient.RegisterResult.USER_ALREADY_EXISTS)
                {
                    msg = "That email address is already in use!  Please try another.";
                }
                else if (registerResult == VostopiaAuthenticationClient.RegisterResult.INVALID_EMAIL)
                {
                    msg = "That email address doesn't make sense to us =(  Please try again.";
                }
                else
                {
                    msg = "Something went wrong while creating your account =(  Please try again.";
                }

                //Show message box and return to previous screen
                ctrl.ShowMessageDialog("Uh-oh", msg, () =>
                {
                    ctrl.StartBackTransition();
                });

                yield break;
            }

            //Store authentication key
            if (call.ResponseData["authKey"] != null)
            {
                string authKey = (string)call.ResponseData["authKey"];
                ctrl.StoreGuestAuthenticationKey(authKey);
            }

            //Continue to auth completed screen
            ctrl.AuthenticationCompleted();
        }
        finally
        {
            ctrl.EnableInput();
        }
    }
 private int GetGenderLayer(AvatarGender gender)
 {
     if (gender == AvatarGender.Female)
     {
         for (int i = 0; i < CachedAnimator.layerCount; i++)
         {
             if (CachedAnimator.GetLayerName(i).ToLower() == "female")
             {
                 return i;
             }
         }
     }
     return 0;
 }
Example #5
0
        private string GetSSMLGender(AvatarGender gender)
        {
            if (gender == AvatarGender.Male)
            {
                return(SSMLGender.Male);
            }
            if (gender == AvatarGender.Female)
            {
                return(SSMLGender.Female);
            }
            if (gender == AvatarGender.Neutral)
            {
                return(SSMLGender.Neutral);
            }

            return(SSMLGender.Unspecified);
        }
        public void SetAvatarInfo(string chosen)
        {
            avatarModel = chosen;

            if (chosen.StartsWith("Boy"))
            {
                avatarGender = AvatarGender.Male;

                if (chosen.EndsWith("A"))
                {
                    avatarSkinTone = AvatarSkinTone.Asian;
                }
                if (chosen.EndsWith("B"))
                {
                    avatarSkinTone = AvatarSkinTone.Black;
                }
                else
                {
                    avatarSkinTone = AvatarSkinTone.White;
                }
            }
            else if (chosen.StartsWith("Girl"))
            {
                avatarGender = AvatarGender.Female;

                if (chosen.EndsWith("A"))
                {
                    avatarSkinTone = AvatarSkinTone.Asian;
                }
                else if (chosen.EndsWith("B"))
                {
                    avatarSkinTone = AvatarSkinTone.Black;
                }
                else
                {
                    avatarSkinTone = AvatarSkinTone.White;
                }
            }
            else
            {
                avatarGender   = AvatarGender.Neutral;
                avatarSkinTone = AvatarSkinTone.Asian; // sort of middle
            }
        }
    public void LoadAnims(AvatarGender gender)
    {
        currentGender = gender;

        //crossfade to new basic idle
        currentIdles = new List<AnimationMixingSettings>(GenericIdles);
        if (gender == AvatarGender.Male)
        {
            currentBasicIdle = BasicIdleMale;
            currentIdles.AddRange(MaleIdles);
        }
        else
        {
            currentBasicIdle = BasicIdleFemale;
            currentIdles.AddRange(FemaleIdles);
        }

        animCtrl.CrossFade(currentBasicIdle.name);
    }
Example #8
0
        public IEnumerator DetectIntent(AudioClip audio, AvatarGender gender, Action <AudioClip> callback)
        {
            string url        = $"https://dialogflow.googleapis.com/v2/projects/{projectId}/agent/sessions/{sessionId}:detectIntent";
            string inputAudio = Convert.ToBase64String(Audio.FromAudioClip(audio));

            if (inputAudio == null)
            {
                callback(null);
                yield break;
            }

            UnityWebRequest request     = new UnityWebRequest(url, "POST");
            RequestBody     requestBody = GetRequestBody(inputAudio, GetSSMLGender(gender));
            string          jsonBody    = Json.ToJson(requestBody);

            byte[] rawBody = Encoding.UTF8.GetBytes(jsonBody);

            string accessToken = "";

            yield return(DialogFlowAuth.GetToken((string token) => accessToken = token));

            request.SetRequestHeader("Authorization", "Bearer " + accessToken);
            request.uploadHandler   = (UploadHandler) new UploadHandlerRaw(rawBody);
            request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();

            yield return(request.SendWebRequest());

            if (request.isNetworkError || request.isHttpError)
            {
                Debug.LogWarning(request.error);
                callback(null);
                yield break;
            }

            byte[]       rawResponse = request.downloadHandler.data;
            ResponseBody response    = GetResponseBody(rawResponse);
            AudioClip    outputAudio = response.outputAudio != null
              ? Audio.ToAudioClip(Convert.FromBase64String(response.outputAudio))
              : Audio.EmptyClip();

            callback(outputAudio);
        }