private void Login()
        {
            CoroutineJobLogin j = new CoroutineJobLogin();

            j.host     = this;
            j.username = emailField.text;
            j.password = passwordField.text;
            j.OnStart += () =>
            {
                loginErrorText.gameObject.SetActive(false);
            };
            j.OnError += (UnityWebRequest request) =>
            {
                if (request.responseCode == (long)HttpStatusCode.BadRequest)
                {
                    loginErrorText.text = "Login failed, please try again";
                    loginErrorText.gameObject.SetActive(true);
                }
            };
            j.OnResult += (SDKLoginResult result) =>
            {
                if (result.error == "none")
                {
                    PlayerPrefs.SetString("login", j.username);
                    PlayerPrefs.SetString("password", j.password);
                    PlayerPrefs.SetString("token", result.token);
                    m_Sdk.developerToken = result.token;

                    m_ToggleMappingMode?.EnableMappingMode();

                    if (m_ToggleMappingMode?.MappingUI != null)
                    {
                        m_ToggleMappingMode.MappingUI.GetComponent <MapperBase>().OnLogOut += OnLogOut;
                    }

                    loginErrorText.gameObject.SetActive(false);

                    FadeOut();

                    OnLogin?.Invoke();
                }
                else if (result.error == "auth")
                {
                    loginErrorText.text = "Login failed, please try again";
                    loginErrorText.gameObject.SetActive(true);
                }
            };

            StartCoroutine(j.RunJob());
        }
        private IEnumerator Login()
        {
            SDKLoginRequest loginRequest = new SDKLoginRequest();

            loginRequest.login    = emailField.text;
            loginRequest.password = passwordField.text;

            loginErrorText.gameObject.SetActive(false);

            string jsonString = JsonUtility.ToJson(loginRequest);

            //Debug.Log("jsonString: " + jsonString);
            byte[] myData = System.Text.Encoding.UTF8.GetBytes(jsonString);
            using (UnityWebRequest request = UnityWebRequest.Put(string.Format("{0}/{1}", m_server, "fcgi?6"), jsonString))
            {
                request.method          = UnityWebRequest.kHttpVerbPOST;
                request.useHttpContinue = false;
                request.SetRequestHeader("Content-Type", "application/json");
                request.SetRequestHeader("Accept", "application/json");
                yield return(request.SendWebRequest());

                //Debug.Log("Response code: " + request.responseCode);

                if (request.isNetworkError || request.isHttpError)
                {
                    Debug.Log(request.error);
                    if (request.responseCode == (long)HttpStatusCode.BadRequest)
                    {
                        loginErrorText.text = "Login failed, please try again";
                        loginErrorText.gameObject.SetActive(true);
                    }
                }
                else
                {
                    Debug.Log(request.downloadHandler.text);
                    PlayerPrefs.SetString("login", loginRequest.login);
                    PlayerPrefs.SetString("password", loginRequest.password);

                    SDKLoginResult loginResult = JsonUtility.FromJson <SDKLoginResult>(request.downloadHandler.text);
                    if (loginResult.error == "none")
                    {
                        PlayerPrefs.SetString("token", loginResult.token);
                        m_sdkSettings.developerToken = loginResult.token;

                        m_toggleMappingMode.EnableMappingMode();

                        if (m_toggleMappingMode.MappingUI != null)
                        {
                            m_toggleMappingMode.MappingUI.GetComponent <Mapper>().OnLogOut += OnLogOut;
                        }

                        loginErrorText.gameObject.SetActive(false);

                        FadeOut();
                    }
                    else if (loginResult.error == "auth")
                    {
                        loginErrorText.text = "Login failed, please try again";
                        loginErrorText.gameObject.SetActive(true);
                    }
                }
            }
        }