StateManager.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { _decorator, Label, Node } from 'cc';
  2. import { Singleton } from './Singleton';
  3. import { Constants } from '../../data/Constants';
  4. import { userIns } from '../../data/UserData';
  5. const { ccclass, property } = _decorator;
  6. @ccclass('StateManager')
  7. class StateManager extends Singleton{
  8. //存储状态字段与 UI 组件的绑定关系
  9. private uiBindings: Map<string, Label[]> = new Map();
  10. /**
  11. * 注册UI组件
  12. * @param field 注册的key uiName
  13. * @param label 具体的文本
  14. */
  15. public registerUI(field: string, label: Label|any): void {
  16. if(!this.uiBindings.has(field)) {
  17. this.uiBindings.set(field, []);
  18. }
  19. //将UI组件添加到绑定列表
  20. let uiArr:Array<any> = this.uiBindings.get(field);
  21. if(!uiArr.includes(label)){
  22. uiArr.push(label);
  23. }
  24. //初始化UI显示
  25. this.updateSingleUI(field, label);
  26. }
  27. /**
  28. * 全局更新所有绑定该字段
  29. * @param field 注册的key uiName
  30. */
  31. public updateAllUI(field: string): void {
  32. let labels:Array<any> = this.uiBindings.get(field);
  33. if (labels) {
  34. labels.forEach(label => {
  35. this.updateSingleUI(field, label);
  36. });
  37. }
  38. }
  39. /**
  40. * 更新单个UI组件
  41. * @param field
  42. * @param label
  43. */
  44. private updateSingleUI(field: string, com: Label|any): void {
  45. if(field == Constants.gold){//金币数量
  46. com.string = `${userIns.data.gold}`;
  47. }else if(field == Constants.diamond){//钻石数量
  48. com.string = `${userIns.data.diamond}`;
  49. }else if(field == Constants.levelTask){//任务数据变化
  50. }
  51. }
  52. }
  53. //全局单例
  54. export const stateMgr = StateManager.ins();