RewardDataManager.ts 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. import { RewardItem, RewardData } from './RewardData';
  2. export class RewardDataManager {
  3. private static _instance: RewardDataManager;
  4. private rewardData: RewardData;
  5. private constructor() {
  6. this.rewardData = new RewardData();
  7. this.initRewards();
  8. }
  9. public static get instance(): RewardDataManager {
  10. if (!this._instance) {
  11. this._instance = new RewardDataManager();
  12. }
  13. return this._instance;
  14. }
  15. public getAllRewards(): RewardItem[] {
  16. return this.rewardData.getAllRewards();
  17. }
  18. public unlockReward(id: string): boolean {
  19. return this.rewardData.unlockReward(id);
  20. }
  21. public getRewardById(id: string): RewardItem | undefined {
  22. return this.rewardData.getRewardById(id);
  23. }
  24. // 加载/保存功能
  25. public loadRewards() {
  26. // 从本地存储加载解锁状态
  27. const savedData = localStorage.getItem('rewardData');
  28. if (savedData) {
  29. const parsed = JSON.parse(savedData);
  30. parsed.forEach((item: any) => {
  31. const reward = this.getRewardById(item.id);
  32. if (reward) {
  33. reward.unlocked = item.unlocked;
  34. }
  35. });
  36. }
  37. }
  38. public saveRewards() {
  39. // 保存解锁状态到本地存储
  40. const rewards = this.getAllRewards();
  41. const saveData = rewards.map(reward => ({
  42. id: reward.id,
  43. unlocked: reward.unlocked
  44. }));
  45. localStorage.setItem('rewardData', JSON.stringify(saveData));
  46. }
  47. private initRewards() {
  48. // 这里定义所有奖励的初始数据
  49. const rewardItems: RewardItem[] = [
  50. {
  51. id: "0",
  52. name: "蓝柑橘",
  53. spriteFrame: null,
  54. unlocked: false
  55. },
  56. {
  57. id: "1",
  58. name: "紫晶之吻",
  59. spriteFrame: null,
  60. unlocked: false
  61. },
  62. {
  63. id: "2",
  64. name: "星芒幻境",
  65. spriteFrame: null,
  66. unlocked: false
  67. },
  68. {
  69. id: "3",
  70. name: "琥珀气泡",
  71. spriteFrame: null,
  72. unlocked: false
  73. },
  74. {
  75. id: "4",
  76. name: "樱桃琉璃",
  77. spriteFrame: null,
  78. unlocked: false
  79. },
  80. {
  81. id: "5",
  82. name: "青柠蜜语",
  83. spriteFrame: null,
  84. unlocked: false
  85. },
  86. {
  87. id: "6",
  88. name: "霓虹之夏",
  89. spriteFrame: null,
  90. unlocked: false
  91. },
  92. {
  93. id: "7",
  94. name: "落日熔金",
  95. spriteFrame: null,
  96. unlocked: false
  97. },
  98. {
  99. id: "8",
  100. name: "彩虹冰摇",
  101. spriteFrame: null,
  102. unlocked: false
  103. },
  104. {
  105. id: "9",
  106. name: "莓果青柠",
  107. spriteFrame: null,
  108. unlocked: false
  109. }
  110. ,
  111. {
  112. id: "10",
  113. name: "星穹之泪",
  114. spriteFrame: null,
  115. unlocked: false
  116. }
  117. ,
  118. {
  119. id: "11",
  120. name: "碧海琉璃",
  121. spriteFrame: null,
  122. unlocked: false
  123. }
  124. ,
  125. {
  126. id: "12",
  127. name: "莓屿霞光",
  128. spriteFrame: null,
  129. unlocked: false
  130. }
  131. ,
  132. {
  133. id: "13",
  134. name: "琥珀凝脂",
  135. spriteFrame: null,
  136. unlocked: false
  137. }
  138. ,
  139. {
  140. id: "14",
  141. name: "焦糖幻境",
  142. spriteFrame: null,
  143. unlocked: false
  144. }
  145. ,
  146. {
  147. id: "15",
  148. name: "紫雾轻语",
  149. spriteFrame: null,
  150. unlocked: false
  151. }
  152. ,
  153. {
  154. id: "16",
  155. name: "蜜柚晨风",
  156. spriteFrame: null,
  157. unlocked: false
  158. }
  159. ,
  160. {
  161. id: "17",
  162. name: "绯色",
  163. spriteFrame: null,
  164. unlocked: false
  165. }
  166. ,
  167. {
  168. id: "18",
  169. name: "青柠谜语",
  170. spriteFrame: null,
  171. unlocked: false
  172. }
  173. ,
  174. {
  175. id: "19",
  176. name: "橄榄玉露",
  177. spriteFrame: null,
  178. unlocked: false
  179. }
  180. ,
  181. {
  182. id: "20",
  183. name: "粉晶迷迭",
  184. spriteFrame: null,
  185. unlocked: false
  186. }
  187. ,
  188. {
  189. id: "21",
  190. name: "莓柚星芒",
  191. spriteFrame: null,
  192. unlocked: false
  193. }
  194. ,
  195. {
  196. id: "22",
  197. name: "樱桃绯雪",
  198. spriteFrame: null,
  199. unlocked: false
  200. }
  201. ,
  202. {
  203. id: "23",
  204. name: "蜜桃幻境",
  205. spriteFrame: null,
  206. unlocked: false
  207. }
  208. ,
  209. {
  210. id: "24",
  211. name: "紫荆之环",
  212. spriteFrame: null,
  213. unlocked: false
  214. }
  215. ,
  216. {
  217. id: "25",
  218. name: "红梅夜曲",
  219. spriteFrame: null,
  220. unlocked: false
  221. }
  222. ,
  223. {
  224. id: "26",
  225. name: "炽焰",
  226. spriteFrame: null,
  227. unlocked: false
  228. }
  229. ,
  230. {
  231. id: "27",
  232. name: "青柠马天尼",
  233. spriteFrame: null,
  234. unlocked: false
  235. }
  236. ,
  237. {
  238. id: "28",
  239. name: "草莓马天尼",
  240. spriteFrame: null,
  241. unlocked: false
  242. }
  243. ,
  244. {
  245. id: "29",
  246. name: "莓果青柠",
  247. spriteFrame: null,
  248. unlocked: false
  249. }
  250. ,
  251. {
  252. id: "30",
  253. name: "紫葡星坠",
  254. spriteFrame: null,
  255. unlocked: false
  256. }
  257. ,
  258. {
  259. id: "31",
  260. name: "草莓绯梦",
  261. spriteFrame: null,
  262. unlocked: false
  263. }
  264. ];
  265. rewardItems.forEach(reward => {
  266. this.rewardData.addReward(reward);
  267. });
  268. }
  269. }