LoginMgr.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Newtonsoft.Json;
  5. /* 登录管理者,用户数据定义和存储 */
  6. public class LoginMgr : MonoBehaviour
  7. {
  8. [SerializeField] GameObject loginView;
  9. [SerializeField] GameObject registerView;
  10. [SerializeField] GameObject forgetPWD_View;
  11. public static UserInfo myUserInfo = new UserInfo();
  12. public void showRegisterView() {
  13. loginView.SetActive(false);
  14. registerView.SetActive(true);
  15. forgetPWD_View.SetActive(false);
  16. AgreenmentOption.ins.gameObject.SetActive(true);
  17. }
  18. public void showLoginView() {
  19. loginView.SetActive(true);
  20. registerView.SetActive(false);
  21. forgetPWD_View.SetActive(false);
  22. AgreenmentOption.ins.gameObject.SetActive(true);
  23. }
  24. public void showForgetPWD_View() {
  25. loginView.SetActive(false);
  26. registerView.SetActive(false);
  27. forgetPWD_View.SetActive(true);
  28. AgreenmentOption.ins.gameObject.SetActive(false);
  29. }
  30. public static bool HasToken() {
  31. string IdAndToken = PlayerPrefs.GetString("IdAndToken", "");
  32. return string.IsNullOrEmpty(IdAndToken) ? false : true;
  33. }
  34. void Awake() {
  35. transform.Find("AgreementPopup").gameObject.SetActive(true);
  36. }
  37. }
  38. public class UserInfo {
  39. public int id;
  40. public int avatarID = 0;
  41. public string nickname = "超级射手";
  42. public int gender = 1;
  43. public string phone = "";
  44. public string birthday = "";
  45. public string country = "";
  46. public string state = "";
  47. public string city = "";
  48. public int integral = 0;
  49. public int coin = 0;
  50. public int diamond = 1000;
  51. public string mac = "";
  52. public List<PropInfo> bagList = new List<PropInfo>();
  53. public List<DeviceInfo> deviceList = new List<DeviceInfo>();
  54. //显示游戏最高分(不同距离分数独立)
  55. public Dictionary<string, float> timeLimitGameScores = new Dictionary<string, float>();
  56. //闯关记录(gameType:通关数)(野兔、野鸡、野狼的通关数)
  57. public Dictionary<int, int> challengeLevels = new Dictionary<int, int>();
  58. public string guideRecord = "";
  59. public void Save()
  60. {
  61. try { UserComp.Instance.saveUserInfo(this); } catch (System.Exception e) { Debug.LogError(e.Message); }
  62. }
  63. public void SetChallengeLevelPass(int gameType, int level) {
  64. if (gameType != 3 && gameType != 4 && gameType != 5) return;
  65. if (challengeLevels.ContainsKey(gameType)) {
  66. if (level <= challengeLevels[gameType]) {
  67. return;
  68. }
  69. }
  70. challengeLevels.Remove(gameType);
  71. challengeLevels.Add(gameType, level);
  72. }
  73. public int GetChallengeLevelPass(int gameType) {
  74. if (challengeLevels.ContainsKey(gameType)) {
  75. return challengeLevels[gameType];
  76. }
  77. return 0;
  78. }
  79. //判断引导是否完成(服务端保存)
  80. //index0: 新手引导NewUserGuide
  81. public bool IsGuideFinish(int index) {
  82. if (index == 0) {
  83. return PlayerPrefs.GetInt("NewUserGuideFinish_" + LoginMgr.myUserInfo.id, 0) == 1;
  84. }
  85. char[] chars = guideRecord.ToCharArray();
  86. if (index < chars.Length) {
  87. return chars[index] == '1';
  88. }
  89. return false;
  90. }
  91. public void SaveGuideFinish(int index) {
  92. if (index == 0) {
  93. PlayerPrefs.SetInt("NewUserGuideFinish_" + LoginMgr.myUserInfo.id, 1);
  94. return;
  95. }
  96. char[] chars = guideRecord.ToCharArray();
  97. if (index < chars.Length) {
  98. if (chars[index] == '1') return;
  99. chars[index] = '1';
  100. } else {
  101. int newLen = index + 1;
  102. char[] newChars = new char[newLen];
  103. for (int i = 0; i < newLen; i++) {
  104. newChars[i] = i < chars.Length ? chars[i] : '0';
  105. }
  106. newChars[index] = '1';
  107. chars = newChars;
  108. }
  109. this.guideRecord = string.Join("", chars);
  110. UserPlayer.ins?.call("userComp.saveGuideRecord", this.guideRecord);
  111. }
  112. }
  113. public class UserSettings {
  114. //打开BGM
  115. public bool openBGM = true;
  116. //打开音效
  117. public bool openEffect = true;
  118. //是否打开准心
  119. public bool openCrossHair = true;
  120. //射击难度
  121. public int shootLevel = 0;
  122. //游戏里的箭重,单位克
  123. public float actualArrowWeight = 20;
  124. //弓箭旋转转化
  125. public BowRotateConvert bowRotateConvert = new BowRotateConvert();
  126. //游戏中是否固定镜头
  127. public bool bowCameraFixed = true;
  128. //训练模式
  129. public bool trainMode = false;
  130. //设备校准引导-是否已经完成
  131. public bool deviceCalibrateGuideFinish = false;
  132. //游戏规则引导-是否已经完成(完成则保存对应的GameType)
  133. public HashSet<int> gameRuleGuideFinish = new HashSet<int>();
  134. private static UserSettings _ins;
  135. public static UserSettings ins {
  136. get {
  137. if (_ins == null) {
  138. string dataStr = PlayerPrefs.GetString("UserSettings", "{}");
  139. try {
  140. _ins = JsonConvert.DeserializeObject<UserSettings>(dataStr);
  141. }
  142. catch (System.Exception) {}
  143. if (_ins == null) {
  144. _ins = new UserSettings();
  145. }
  146. if (CommonConfig.SpecialVersion1) {
  147. if (PlayerPrefs.GetInt("sv1_UserSettings_2", 0) == 0) {
  148. PlayerPrefs.SetInt("sv1_UserSettings_2", 1);
  149. UserSettings us = _ins;
  150. us.bowRotateConvert.screenSize = 60;
  151. us.bowRotateConvert.screenDistance = 1.5f;
  152. us.Save();
  153. }
  154. }
  155. }
  156. return _ins;
  157. }
  158. }
  159. public void Save() {
  160. PlayerPrefs.SetString("UserSettings", JsonConvert.SerializeObject(this));
  161. }
  162. }
  163. /*
  164. 描述1
  165. 已知:
  166. 屏幕宽高比例w:h=16:9,屏幕尺寸s=60.11英寸,屏幕距离d=2.50米,实际指向右边树的角度为e=5.56°。
  167. 可知:
  168. 屏幕尺寸s1 = (s * 0.0254)米
  169. 屏幕单位大小为unit,关系式(w*unit)^2 + (h*unit)^2 = s1^2
  170. 结果:
  171. 向量(玩家->右边树)在屏幕上投影的长度比例q = tan(e) * d / unit
  172. */
  173. /*
  174. 描述2(适配各种尺寸的屏幕)
  175. 已知:
  176. 屏幕宽高比例w:h=16:9,屏幕尺寸s=(任意)英寸,屏幕距离d=(任意)米,游戏指向右边树的角度为r=27.30°。
  177. 借用描述1的结果q
  178. 可知:
  179. 屏幕尺寸s1 = (s * 0.0254)米
  180. 屏幕单位大小为unit,关系式(w*unit)^2 + (h*unit)^2 = s1^2
  181. 实际指向右边树的角度为e = atan(q * unit / d)
  182. 结果:
  183. 游戏转动角度:实际转动角度 = r / e
  184. */
  185. public class BowRotateConvert {
  186. public float screenSize = 60; //屏幕尺寸(英寸)
  187. public float screenDistance = 2.5f; //玩家距离屏幕多远(米)
  188. [NonSerialized] public float fieldOfView = 25;
  189. //获取建议的屏幕距离
  190. public float GetAdviseScreenDistance() {
  191. float w = 16;
  192. float h = 9;
  193. float s1 = screenSize * 0.0254f;
  194. float unit = s1 / Mathf.Sqrt(w * w + h * h);
  195. float screenHeight = 9 * unit;
  196. return screenHeight * 0.5f / Mathf.Tan(fieldOfView / 2 / 180 * Mathf.PI);
  197. }
  198. // 游戏旋转角度 : 实际旋转角度 (这个版本丢弃掉这个功能-所以直接返回1)
  199. public float GetRate() {
  200. return 1;
  201. }
  202. // 游戏旋转角度 : 实际旋转角度
  203. // public float GetRate() {
  204. // double w = 16;
  205. // double h = 9;
  206. // double s = Convert.ToDouble(screenSize);
  207. // double d = Convert.ToDouble(screenDistance);
  208. // double r = 27.3 / 180 * Math.PI;
  209. // double q = get_q();
  210. // double s1 = s * 0.0254;
  211. // double unit = Math.Sqrt(Math.Pow(s1, 2) / (Math.Pow(w, 2) + Math.Pow(h, 2)));
  212. // double e = Math.Atan(q * unit / d);
  213. // return (float) (r / e);
  214. // }
  215. // private double get_q() {
  216. // double w = 16;
  217. // double h = 9;
  218. // double s = 60.11;
  219. // double d = 2.5;
  220. // double e = 5.56 / 180 * Math.PI;
  221. // double s1 = s * 0.0254;
  222. // double unit = Math.Sqrt(Math.Pow(s1, 2) / (Math.Pow(w, 2) + Math.Pow(h, 2)));
  223. // double q = Math.Tan(e) * d / unit;
  224. // return q;
  225. // }
  226. }