GUIManager.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { _decorator, Component, Node } from 'cc';
  2. import GUIProxy from './GUIProxy';
  3. const { ccclass, property } = _decorator;
  4. export class GUIManager{
  5. //UI 注册信息
  6. private m_guiMap:Map<number,GUIProxy>=new Map<number,GUIProxy>();
  7. //正在显示的UI
  8. private m_showing:Map<number,GUIProxy>=new Map<number,GUIProxy>();
  9. /**
  10. * 注册UI
  11. * @param key UI 全局唯一KEY
  12. * @param Prefab 预制体地址
  13. */
  14. RegisterGUI(key:number,Prefab:string):void{
  15. if(this.m_guiMap.has(key)){
  16. throw new Error("UI重复注册:"+key);
  17. }
  18. let guiProxy:GUIProxy=new GUIProxy(key,Prefab);
  19. this.m_guiMap.set(key,guiProxy);
  20. }
  21. /**
  22. * 取消注册
  23. * @param key UI 全局唯一KEY
  24. */
  25. Unregister(key:number):void{
  26. if(this.m_guiMap.has(key)==false){
  27. throw new Error("无法取消未注册的UI:"+key);
  28. }
  29. }
  30. /**
  31. * 显示UI
  32. * @param key
  33. * @param data
  34. */
  35. Show(key:number,data?:any):void{
  36. if(this.m_guiMap.has(key)==false){
  37. throw new Error("未注册的UI:"+key);
  38. }
  39. let guiProxy:GUIProxy;
  40. //已经显示
  41. if(this.m_showing.has(key)){
  42. return;
  43. }else{
  44. guiProxy=this.m_guiMap.get(key);
  45. guiProxy.Show(data);
  46. this.m_showing.set(key,guiProxy);
  47. }
  48. }
  49. /**
  50. * 隐藏UI
  51. * @param key
  52. */
  53. Hide(key:number):void{
  54. if(this.m_guiMap.has(key)==false){
  55. throw new Error("未注册的UI:"+key);
  56. }
  57. let guiProxy:GUIProxy;
  58. //已经显示
  59. if(this.m_showing.has(key)==false){
  60. return;
  61. }else{
  62. this.m_showing.delete(key);
  63. guiProxy=this.m_guiMap.get(key);
  64. guiProxy.Hide();
  65. }
  66. }
  67. /**
  68. * 界面是否在显示
  69. */
  70. isShowing(key:number):boolean{
  71. if(this.m_guiMap.has(key)==false){
  72. throw new Error("未注册的UI:"+key);
  73. }
  74. if(this.m_showing.has(key)){
  75. return true
  76. }else{
  77. return false
  78. }
  79. }
  80. /**
  81. * 单例
  82. */
  83. private static instance:GUIManager;
  84. public static get single():GUIManager{
  85. if(this.instance==null){
  86. this.instance=new GUIManager();
  87. }
  88. return this.instance;
  89. }
  90. }