NoticeManager.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import LayerManager from "../gui/layers/LayerManager";
  2. import NoticeView from "./NoticeView";
  3. export default class NoticeManager
  4. {
  5. private __viewClassMap:Map<number,any>=new Map<number,any>();
  6. private __Pool:Map<number,NoticeView[]>=new Map<number,NoticeView[]>();
  7. /**
  8. * 注册
  9. * @param type
  10. * @param viewClass
  11. */
  12. Register(type:number,viewClass:any):void{
  13. this.__viewClassMap.set(type,viewClass);
  14. }
  15. /**
  16. * 显示提示
  17. * @param data
  18. * @param type
  19. * @param posType
  20. */
  21. ShowPrompt(data:any,type:number,posType:number,layerIndex:number=9):void{
  22. let view:NoticeView=this.CreateByPool(type);
  23. view.Update(data);
  24. view.StartAnimation();
  25. LayerManager.single.AddToLayer(layerIndex,view.GetView());
  26. }
  27. private CreateByPool(type:number):NoticeView{
  28. let list:NoticeView[];
  29. if(this.__Pool.get(type)!=null){
  30. list=this.__Pool.get(type);
  31. if(list.length>0){
  32. return list.shift();
  33. }
  34. }
  35. if(this.__viewClassMap.has(type)==false){
  36. throw new Error("找不到对应的Notice View"+type);
  37. }
  38. let viewClass=this.__viewClassMap.get(type);
  39. let view:NoticeView=new viewClass();
  40. view.type=type;
  41. if(view instanceof NoticeView){
  42. return view;
  43. }else{
  44. throw new Error("Notice 注册的类型必须是NoticeView 的子类!");
  45. }
  46. }
  47. Recycle(value:NoticeView):void{
  48. if(value.GetView().parent!=null){
  49. value.GetView().removeFromParent();
  50. }
  51. let list:NoticeView[];
  52. if(this.__Pool.get(value.type)!=null){
  53. list=this.__Pool.get(value.type);
  54. }else{
  55. list=[];
  56. this.__Pool.set(value.type,list);
  57. }
  58. if(list.indexOf(value)>=0){
  59. throw new Error("重复回收!");
  60. }
  61. list.push(value);
  62. }
  63. private static __instance:NoticeManager;
  64. public static get single():NoticeManager{
  65. if(this.__instance==null){
  66. this.__instance=new NoticeManager();
  67. }
  68. return this.__instance;
  69. }
  70. }