stateManager.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { _decorator, Label} from 'cc';
  2. import { constants } from '../data/constants';
  3. const { ccclass, property } = _decorator;
  4. @ccclass('stateManager')
  5. export class stateManager {
  6. private static instance: stateManager;
  7. //存储状态字段与 UI 组件的绑定关系
  8. private uiBindings: Map<string, Label[]> = new Map();
  9. //获取单例实例
  10. public static ins() {
  11. if (!this.instance) {
  12. this.instance = new stateManager();
  13. }
  14. return this.instance;
  15. }
  16. /**
  17. * 注册UI组件
  18. * @param field 注册的key uiName
  19. * @param label 具体的文本
  20. */
  21. public registerUI(field: string, label: Label|any): void {
  22. if (!this.uiBindings.has(field)) {
  23. this.uiBindings.set(field, []);
  24. }
  25. //将UI组件添加到绑定列表
  26. let uiArr:Array<any> = this.uiBindings.get(field);
  27. if(!uiArr.includes(label)){
  28. uiArr.push(label);
  29. }
  30. //初始化UI显示
  31. this.updateSingleUI(field, label);
  32. }
  33. /**
  34. * 全局更新所有绑定该字段
  35. * @param field 注册的key uiName
  36. */
  37. public updateAllUI(field: string): void {
  38. let labels:Array<any> = this.uiBindings.get(field);
  39. if (labels) {
  40. labels.forEach(label => {
  41. this.updateSingleUI(field, label);
  42. });
  43. }
  44. }
  45. /**
  46. * 更新单个UI组件
  47. * @param field
  48. * @param label
  49. */
  50. private updateSingleUI(field: string, com: Label|any): void {
  51. if(field == constants.playerInfoData){//玩家信息变化
  52. //com.string = `${storageData.pureCount}`;
  53. //com.refreshData();
  54. }else if(field == constants.playerName){//玩家名字变化
  55. }
  56. }
  57. }
  58. export default stateManager.ins();