using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using System.Text.RegularExpressions; using DG.Tweening; using Newtonsoft.Json; public class LoginMgr : MonoBehaviour { [SerializeField] GameObject loginView; [SerializeField] GameObject registerView; [SerializeField] GameObject forgetPWD_View; [SerializeField] GameObject loginMode1; [SerializeField] GameObject loginMode2; [SerializeField] Sprite[] loginModeSprites; [SerializeField] GameObject loginInUser; [SerializeField] GameObject loginInPWD; [SerializeField] GameObject loginInPhone; [SerializeField] GameObject loginInCode; [SerializeField] GameObject loginValidTime; [SerializeField] GameObject registerInUser; [SerializeField] GameObject registerInPWD1; [SerializeField] GameObject registerInPWD2; [SerializeField] GameObject registerInNickname; [SerializeField] GameObject registerInGender; [SerializeField] Text loginTip; [SerializeField] Text registerTip; public static UserInfo myUserInfo = new UserInfo(); static int userInfo_version = 0; static bool firstComeIn = true; int loginMode = 1; void Awake() { TextAutoLanguage.Init(); } void Start() { SelectLoginMode(1); GameObject[] inputNodes = {loginInUser, loginInPWD, registerInUser, registerInPWD1, registerInPWD2}; foreach (var inputNode in inputNodes) { InputField inputField = GetInputField(inputNode); inputField.onValueChanged.AddListener(delegate(string text) { Match match = new Regex("[^A-Za-z0-9]").Match(text); if (match.Success) { inputField.text = text.Replace(match.Value, ""); } }); } string username = PlayerPrefs.GetString("LoginRecord_User_" + userInfo_version, ""); string password = PlayerPrefs.GetString("LoginRecord_PWD_" + userInfo_version, ""); GetInputField(loginInUser).text = username; GetInputField(loginInPWD).text = password; if (firstComeIn && username.Length > 0 && password.Length > 0) { this.transform.Find("Mask").gameObject.SetActive(true); login(); } } void OnDestroy() { firstComeIn = false; } InputField GetInputField(GameObject inputNode) { return inputNode.transform.Find("InputField").GetComponent(); } public void SelectLoginMode(int mode) { loginMode = mode; if (loginMode == 1) { loginMode1.GetComponent().sprite = loginModeSprites[1]; loginMode2.GetComponent().sprite = loginModeSprites[0]; loginInUser.SetActive(true); loginInPWD.SetActive(true); loginInPhone.SetActive(false); loginInCode.SetActive(false); loginValidTime.SetActive(false); } else if (loginMode == 2) { loginMode1.GetComponent().sprite = loginModeSprites[0]; loginMode2.GetComponent().sprite = loginModeSprites[1]; loginInUser.SetActive(false); loginInPWD.SetActive(false); loginInPhone.SetActive(true); loginInCode.SetActive(true); loginValidTime.SetActive(true); } loginTip.GetComponent().SetText(0); } public void showRegisterView() { loginView.SetActive(false); registerView.SetActive(true); forgetPWD_View.SetActive(false); registerTip.GetComponent().SetText(0); } public void showLoginView() { loginView.SetActive(true); registerView.SetActive(false); forgetPWD_View.SetActive(false); loginTip.GetComponent().SetText(0); } public void showForgetPWD_View() { loginView.SetActive(false); registerView.SetActive(false); forgetPWD_View.SetActive(true); } public void login() { InputField user = GetInputField(loginInUser); if (user.text.Trim().Length == 0) { loginTip.color = Color.yellow; loginTip.GetComponent().SetText(41); return; } InputField pwd = GetInputField(loginInPWD); if (pwd.text.Trim().Length == 0) { loginTip.color = Color.yellow; loginTip.GetComponent().SetText(42); return; } UserInfos userInfos = GetUserInfos(); foreach (var userInfo in userInfos.list) { if (userInfo.user == user.text) { if (userInfo.pwd == pwd.text) { loginTip.color = Color.green; loginTip.GetComponent().SetText(43); myUserInfo = userInfo; PlayerPrefs.SetString("LoginRecord_User_" + userInfo_version, userInfo.user); PlayerPrefs.SetString("LoginRecord_PWD_" + userInfo_version, userInfo.pwd); SceneManager.LoadScene("Home", LoadSceneMode.Single); } else { loginTip.color = Color.red; loginTip.GetComponent().SetText(44); } return; } } loginTip.color = Color.yellow; loginTip.GetComponent().SetText(45); } public void Register() { InputField user = GetInputField(registerInUser); if (user.text.Length < 6) { registerTip.color = Color.red; registerTip.GetComponent().SetText(46); return; } InputField pwd1 = GetInputField(registerInPWD1); if (pwd1.text.Length < 6) { registerTip.color = Color.red; registerTip.GetComponent().SetText(47); return; } InputField pwd2 = GetInputField(registerInPWD2); if (pwd1.text != pwd2.text) { registerTip.color = Color.red; registerTip.GetComponent().SetText(48); return; } InputField nickname = GetInputField(registerInNickname); if (nickname.text.Trim().Length == 0) { registerTip.color = Color.yellow; registerTip.GetComponent().SetText(49); return; } UserInfos userInfos = GetUserInfos(); foreach (var userInfo in userInfos.list) { if (userInfo.user == user.text) { registerTip.color = Color.yellow; registerTip.GetComponent().SetText(50); return; } } UserInfo userInfo1 = new UserInfo(); userInfo1.user = user.text; userInfo1.pwd = pwd1.text; userInfo1.nickname = nickname.text; Transform toggleGroup = registerInGender.transform.Find("ToggleGroup"); for (int i = 0; i < toggleGroup.childCount; i++) { if (toggleGroup.GetChild(i).GetComponent().isOn) { userInfo1.gender = i == 0 ? 1 : 2; break; } } userInfos.list.Add(userInfo1); SetUserInfos(userInfos); registerTip.color = Color.green; registerTip.GetComponent().SetText(51); //自动跳转到登录并填写登录信息 GetInputField(loginInUser).text = userInfo1.user; GetInputField(loginInPWD).text = userInfo1.pwd; SelectLoginMode(1); Invoke("showLoginView", 0.5f); } public static UserInfos GetUserInfos() { string userInfosStr = PlayerPrefs.GetString("UserInfos_" + userInfo_version, ""); return userInfosStr.Length == 0 ? new UserInfos(): JsonConvert.DeserializeObject(userInfosStr); } public static void SetUserInfos(UserInfos userInfos) { PlayerPrefs.SetString("UserInfos_" + userInfo_version, JsonConvert.SerializeObject(userInfos)); } public static void SaveUserInfo(UserInfo userInfo) { UserInfos userInfos = GetUserInfos(); for(int i = 0; i < userInfos.list.Count; i++) { UserInfo u = userInfos.list[i]; if (u.user == userInfo.user) { userInfos.list[i] = userInfo; } } SetUserInfos(userInfos); myUserInfo = userInfo; } public static void LoadUserInfo(string username, string password) { UserInfos userInfos = GetUserInfos(); foreach (var userInfo in userInfos.list) { if (userInfo.user == username) { if (userInfo.pwd == password) { myUserInfo = userInfo; } return; } } } } public class UserInfos { public List list = new List(); } [Serializable] public class UserInfo { public string user = ""; public string pwd = ""; public string nickname = ""; public string phone = ""; public int gender = 0; public string birthday = ""; public string national = ""; public string region = ""; public int integral = 0; public int coin = 0; public int diamond = 1000; public List bagList = new List(); public List deviceList = new List(); public float arrowAccValue = 16; public int timeLimitGameHighestScore = 0; public bool deviceCalibrateGuideFinish = false; public bool gameRule1GuideFinish = false; public bool gameRule2GuideFinish = false; public bool openCrossHair = true; public int shootLevel = 0; public void Save() { LoginMgr.SaveUserInfo(this); } }