GUIManager.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. private static instance:GUIManager;
  71. public static get single():GUIManager{
  72. if(this.instance==null){
  73. this.instance=new GUIManager();
  74. }
  75. return this.instance;
  76. }
  77. }