DataMgr.ts 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. import Weapon from "../Game/weapon";
  2. import Constant, { SkinInfo, Levelitem, SkillInfo, GunInfo } from "./Constant";
  3. /**
  4. * 数据管理类
  5. */
  6. export default class DataMgr {
  7. private static _inst: DataMgr;
  8. public static get inst(): DataMgr {
  9. if (!DataMgr._inst) {
  10. DataMgr._inst = new DataMgr();
  11. }
  12. return DataMgr._inst;
  13. }
  14. private _dataPool: any = {};
  15. public init() {
  16. // cc.sys.localStorage.clear();
  17. if (cc.sys.localStorage.getItem(Constant.ST_GameData)) {
  18. this._dataPool = JSON.parse(cc.sys.localStorage.getItem(Constant.ST_GameData));
  19. } else {
  20. // 初始金币
  21. this._dataPool[Constant.ST_CoinCount] = "1000";
  22. // 初始钻石
  23. this._dataPool[Constant.ST_DiamondCount] = "0";
  24. //初始化皮肤
  25. this._dataPool[Constant.ST_CurSkinId] = "0";
  26. //初始化武器
  27. this._dataPool[Constant.ST_CurMeleeId] = "13";
  28. this._dataPool[Constant.ST_CurRangeId] = "0";
  29. //初始签到信息
  30. this._dataPool[Constant.ST_LastDailyBonusIndex] = "-1";
  31. this._dataPool[Constant.ST_LastDailyBonusTime] = "0";
  32. //初始化关卡信息
  33. this._initLevelData();
  34. // 初始化皮肤数据
  35. this._initSkinData();
  36. //初始化枪械数据
  37. this._initGunData();
  38. this._save();
  39. }
  40. }
  41. /**
  42. * 初始化关卡信息
  43. */
  44. private _initLevelData() {
  45. ``
  46. let levelItemObj: { [key: string]: Levelitem } = {};
  47. // 简单
  48. let levelitem: Levelitem = new Levelitem(`{"Id":"${1001}","State":"${1}","Grade":"0"}`);
  49. levelItemObj["1001"] = levelitem;
  50. for (let i = 1002; i <= 1000 + Constant.CT_TotalLevelCount; i++) {
  51. let levelitem: Levelitem = new Levelitem(`{"Id":"${i}","State":"${0}","Grade":"0"}`);
  52. levelItemObj[i.toString()] = levelitem;
  53. }
  54. // 困难
  55. for (let i = 2001; i <= 2000 + Constant.CT_TotalLevelCount; i++) {
  56. let levelitem: Levelitem = new Levelitem(`{"Id":"${i}","State":"${0}","Grade":"0"}`);
  57. levelItemObj[i.toString()] = levelitem;
  58. }
  59. // 英雄
  60. for (let i = 3001; i <= 3000 + Constant.CT_TotalLevelCount; i++) {
  61. let levelitem: Levelitem = new Levelitem(`{"Id":"${i}","State":"${0}","Grade":"0"}`);
  62. levelItemObj[i.toString()] = levelitem;
  63. }
  64. this._dataPool[Constant.ST_LevelItem] = JSON.stringify(levelItemObj);
  65. }
  66. private _initSkinData() {
  67. // 皮肤数据读表
  68. let price: number[] = [0, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000];
  69. let skinInfoArr: SkinInfo[] = [];
  70. let skinInfo: SkinInfo = new SkinInfo(`{"Id":"${0}","State":"2","Price":"${price[0]}","Level":"0","VideoCount":"0"}`);
  71. skinInfoArr.push(skinInfo);
  72. for (let i = 1; i < price.length; i++) {
  73. let skinInfo: SkinInfo = new SkinInfo(`{"Id":"${i}","State":"0","Price":"${price[i]}","Level":"0","VideoCount":"0"}`);
  74. skinInfoArr.push(skinInfo);
  75. }
  76. this._dataPool[Constant.ST_SkinInfo] = JSON.stringify(skinInfoArr);
  77. }
  78. private _initGunData() {
  79. // 武器数据读表
  80. let price: number[] = [
  81. 0, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  82. 1000, 1000, 1000, 0, 1000, 1000, 1000, 1000, 1000, 1000,
  83. 1000, 1000, 1000, 1000, 1000
  84. ];
  85. let gunInfoArr: GunInfo[] = [];
  86. for (let i = 0; i < price.length; i++) {
  87. let gunInfo: GunInfo = null;
  88. if (i == 0 || i == 13) {
  89. gunInfo = new GunInfo(`{"Id":"${i}","State":"2","Price":"${price[i]}","Level":"0","VideoCount":"0"}`);
  90. } else {
  91. gunInfo = new GunInfo(`{"Id":"${i}","State":"0","Price":"${price[i]}","Level":"0","VideoCount":"0"}`);
  92. }
  93. gunInfoArr.push(gunInfo);
  94. }
  95. this._dataPool[Constant.ST_GunInfo] = JSON.stringify(gunInfoArr);
  96. }
  97. //////////////////////////////////////////////////// 当前使用
  98. /** 声音开关 */
  99. public get AudioOn() {
  100. return this.getItem(Constant.ST_AudioOn, "1") == "1";
  101. }
  102. public set AudioOn(value: boolean) {
  103. this.setItem(Constant.ST_AudioOn, value ? "1" : "0");
  104. }
  105. /** 震动开关 */
  106. public get ShakeOn(): boolean {
  107. return this.getItem(Constant.ST_ShakeOn, "1") == "1";
  108. }
  109. public set ShakeOn(value: boolean) {
  110. this.setItem(Constant.ST_ShakeOn, value ? "1" : "0");
  111. }
  112. /** 金币数据 */
  113. public get CoinCount() {
  114. return parseInt(this.getItem(Constant.ST_CoinCount, "0"));
  115. }
  116. public set CoinCount(value: number) {
  117. this.setItem(Constant.ST_CoinCount, value + "");
  118. cc.game.emit(Constant.E_GAME_LOGIC, { type: Constant.E_COIN_CHANGE });
  119. }
  120. /** 取钻石数据 */
  121. public get DiamondCount() {
  122. return parseInt(this.getItem(Constant.ST_DiamondCount, "0"));
  123. }
  124. public set DiamondCount(value: number) {
  125. this.setItem(Constant.ST_DiamondCount, value + "");
  126. cc.game.emit(Constant.E_GAME_LOGIC, { type: Constant.E_Diamond_CHANGE });
  127. }
  128. /** 总局数_割草模式 */
  129. public get TotoalCount_6() {
  130. return parseInt(this.getItem(Constant.ST_TotoalCount + "6", "1"));
  131. }
  132. public set TotoalCount_6(value: number) {
  133. this.setItem(Constant.ST_TotoalCount + "6", value + "");
  134. }
  135. /** 最后奖励的天数 */
  136. public get LastDailyBonusIndex() {
  137. return parseInt(this.getItem(Constant.ST_LastDailyBonusIndex, "-1"));
  138. }
  139. public set LastDailyBonusIndex(value: number) {
  140. this.setItem(Constant.ST_LastDailyBonusIndex, value + "");
  141. }
  142. /** 最后一次签到的时间 */
  143. public get LastDailyBonusTime() {
  144. return this.getItem(Constant.ST_LastDailyBonusTime, "0");
  145. }
  146. public set LastDailyBonusTime(value: string) {
  147. this.setItem(Constant.ST_LastDailyBonusTime, value + "");
  148. }
  149. /** 加载游戏日期 */
  150. public get LastLoadDate(): string {
  151. return this.getItem(Constant.ST_LastLoadDate, "")
  152. }
  153. public set LastLoadDate(v: string) {
  154. this.setItem(Constant.ST_LastLoadDate, v);
  155. }
  156. /** 今日在线时间 */
  157. public get OnlineToday(): number {
  158. return parseInt(this.getItem(Constant.ST_OnlineToday, "0"));
  159. }
  160. public set OnlineToday(v: number) {
  161. this.setItem(Constant.ST_OnlineToday, v + "");
  162. }
  163. /** 今日在线奖励领取数量 */
  164. public get receiveToday(): number[] {
  165. return JSON.parse(this.getItem(Constant.ST_ReceiveToday, "[0, 0, 0, 0, 0]"));
  166. }
  167. public set receiveToday(v: number[]) {
  168. this.setItem(Constant.ST_ReceiveToday, JSON.stringify(v));
  169. }
  170. /**
  171. * 当前皮肤ID
  172. */
  173. public get CurSkinId() {
  174. return parseInt(this.getItem(Constant.ST_CurSkinId, "0"));
  175. }
  176. /**
  177. * 设置当前皮肤ID
  178. */
  179. public set CurSkinId(value: number) {
  180. if (value == this.CurSkinId) {
  181. return;
  182. }
  183. let preId: number = this.CurSkinId;
  184. let skinInfo: SkinInfo = this.getSkinInfo(preId);
  185. if (skinInfo) {
  186. skinInfo.State = 1;
  187. this.setSkinInfo(preId, skinInfo);
  188. }
  189. let curSkinInfo: SkinInfo = this.getSkinInfo(value);
  190. if (curSkinInfo) {
  191. curSkinInfo.State = 2;
  192. this.setSkinInfo(value, curSkinInfo);
  193. }
  194. this.setItem(Constant.ST_CurSkinId, value + "");
  195. }
  196. /**
  197. * 获取皮肤信息
  198. * @param id 皮肤ID
  199. */
  200. public getSkinInfo(id: number) {
  201. let skinInfos: string = this.getItem(Constant.ST_SkinInfo, "");
  202. if (skinInfos) {
  203. let skinInfoArr: SkinInfo[] = JSON.parse(skinInfos);
  204. if (id >= 0 && id < skinInfoArr.length) {
  205. return skinInfoArr[id];
  206. }
  207. }
  208. return null;
  209. }
  210. /**
  211. * 保存皮肤信息
  212. * @param id 皮肤ID
  213. * @param info 皮肤信息
  214. */
  215. public setSkinInfo(id: number, info: SkinInfo) {
  216. let skinInfos: string = this.getItem(Constant.ST_SkinInfo, "");
  217. if (skinInfos) {
  218. let skinInfoArr: SkinInfo[] = JSON.parse(skinInfos);
  219. if (id >= 0 && id < skinInfoArr.length) {
  220. skinInfoArr[id] = info;
  221. this.setItem(Constant.ST_SkinInfo, JSON.stringify(skinInfoArr));
  222. }
  223. }
  224. }
  225. /**
  226. * 随机获取3个未解锁的皮肤id
  227. */
  228. public getRandomLockSkin() {
  229. let ids: number[] = [];
  230. let skinInfos: string = this.getItem(Constant.ST_SkinInfo, "");
  231. if (skinInfos) {
  232. let skinInfoArr: SkinInfo[] = JSON.parse(skinInfos);
  233. for (let i = 0; i < skinInfoArr.length; i++) {
  234. if (skinInfoArr[i].State == 0) {
  235. ids.push(skinInfoArr[i].Id);
  236. }
  237. }
  238. }
  239. return ids;
  240. }
  241. /**
  242. * 获取武器信息
  243. * @param id 武器ID
  244. */
  245. public getGunInfo(id: number) {
  246. let gunInfos: string = this.getItem(Constant.ST_GunInfo, "");
  247. if (gunInfos) {
  248. let gunInfoArr: GunInfo[] = JSON.parse(gunInfos);
  249. if (id >= 0 && id < gunInfoArr.length) {
  250. return gunInfoArr[id];
  251. }
  252. }
  253. return null;
  254. }
  255. /**
  256. * 保存武器信息
  257. * @param id 皮肤ID
  258. * @param info 皮肤信息
  259. */
  260. public setGunInfo(id: number, info: GunInfo) {
  261. let gunInfos: string = this.getItem(Constant.ST_GunInfo, "");
  262. if (gunInfos) {
  263. let gunInfoArr: GunInfo[] = JSON.parse(gunInfos);
  264. if (id >= 0 && id < gunInfoArr.length) {
  265. gunInfoArr[id] = info;
  266. this.setItem(Constant.ST_GunInfo, JSON.stringify(gunInfoArr));
  267. }
  268. }
  269. }
  270. /**
  271. * 当前近战武器
  272. */
  273. public get CurMelee() {
  274. return parseInt(this.getItem(Constant.ST_CurMeleeId, "13"));
  275. }
  276. private set CurMelee(id: number) {
  277. if (id == this.CurMelee || !Weapon.meleeWaapon.includes(id + 1)) {
  278. return;
  279. }
  280. let preId: number = this.CurMelee;
  281. let gunInfo: GunInfo = this.getGunInfo(preId);
  282. if (gunInfo) {
  283. gunInfo.State = 1;
  284. this.setGunInfo(preId, gunInfo);
  285. }
  286. let curGunInfo: GunInfo = this.getGunInfo(id);
  287. if (curGunInfo) {
  288. curGunInfo.State = 2;
  289. this.setGunInfo(id, curGunInfo);
  290. }
  291. this.setItem(Constant.ST_CurMeleeId, id + "");
  292. }
  293. /**
  294. * 当前远程武器
  295. */
  296. public get CurRange() {
  297. return parseInt(this.getItem(Constant.ST_CurRangeId, "0"));
  298. }
  299. private set CurRange(id: number) {
  300. if (id == this.CurRange || !Weapon.rangeWeapon.includes(id + 1)) {
  301. return;
  302. }
  303. let preId: number = this.CurRange;
  304. let gunInfo: GunInfo = this.getGunInfo(preId);
  305. if (gunInfo) {
  306. gunInfo.State = 1;
  307. this.setGunInfo(preId, gunInfo);
  308. }
  309. let curGunInfo: GunInfo = this.getGunInfo(id);
  310. if (curGunInfo) {
  311. curGunInfo.State = 2;
  312. this.setGunInfo(id, curGunInfo);
  313. }
  314. this.setItem(Constant.ST_CurRangeId, id + "");
  315. }
  316. public get curWeapon() {
  317. return this.CurRange;
  318. }
  319. public set curWeapon(id: number) {
  320. if (Weapon.meleeWaapon.includes(id + 1)) {
  321. this.CurMelee = id;
  322. } else if (Weapon.rangeWeapon.includes(id + 1)) {
  323. this.CurRange = id;
  324. }
  325. }
  326. /** 技能指引 */
  327. public get guide_skill(): boolean {
  328. return this.getItem(Constant.ST_Guide_Skill, true);
  329. }
  330. /** 技能指引 */
  331. public set guide_skill(value: boolean) {
  332. this.setItem(Constant.ST_Guide_Skill, value);
  333. cc.game.emit(Constant.E_ShareOrVideo);
  334. }
  335. ///////////////// 历史最佳 //////////////////////
  336. // 游戏时间
  337. public get best_time(): number {
  338. return parseInt(this.getItem("best_time", "0"));
  339. }
  340. public set best_time(v: number) {
  341. if (v > this.best_time) {
  342. this.setItem("best_time", v + "");
  343. }
  344. }
  345. // 击杀数
  346. public get best_kill(): number {
  347. return parseInt(this.getItem("best_kill", "0"));
  348. }
  349. public set best_kill(v: number) {
  350. if (v > this.best_kill) {
  351. this.setItem("best_kill", v + "");
  352. }
  353. }
  354. // 等级
  355. public get best_level(): number {
  356. return parseInt(this.getItem("best_level", "0"));
  357. }
  358. public set best_level(v: number) {
  359. if (v > this.best_level) {
  360. this.setItem("best_level", v + "");
  361. }
  362. }
  363. // 金币
  364. public get best_coin(): number {
  365. return parseInt(this.getItem("best_coin", "0"));
  366. }
  367. public set best_coin(v: number) {
  368. if (v > this.best_coin) {
  369. this.setItem("best_coin", v + "");
  370. }
  371. }
  372. // 分享次数
  373. public get shareNum(): number {
  374. return this.getItem(Constant.ST_ShareNum, 0)
  375. }
  376. public set shareNum(v: number) {
  377. this.setItem(Constant.ST_ShareNum, v);
  378. // 发送事件更新图标
  379. cc.game.emit(Constant.E_ShareOrVideo);
  380. cc.log("今日分享了", v, "次");
  381. }
  382. ////////////////////////////////////////////////////////////////////////////////
  383. public getItem(key: string, defaultValue: any) {
  384. if (this._dataPool[key] != undefined && this._dataPool[key] != null) {
  385. return this._dataPool[key];
  386. }
  387. return defaultValue;
  388. }
  389. public setItem(key: string, value: any) {
  390. this._dataPool[key] = value;
  391. this._save();
  392. }
  393. private _save() {
  394. cc.sys.localStorage.setItem(Constant.ST_GameData, JSON.stringify(this._dataPool));
  395. }
  396. }