BufferManager.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { director } from "cc";
  2. import IBuffer from "./IBuffer";
  3. export default class BufferManager
  4. {
  5. private static __groupBufferMap:Map<string,IBuffer[]>=new Map<string,IBuffer[]>();
  6. private static __bufferMap:Map<number,IBuffer>=new Map<number,IBuffer>();
  7. /**
  8. * 运行BUFFER
  9. * @param value
  10. * @param data
  11. */
  12. public static RunBuffer(value:IBuffer,data?:any):void{
  13. if(this.AddBuffer(value)){
  14. value.Run(data);
  15. }
  16. }
  17. /**
  18. * 添加BUFFER
  19. * @param value
  20. */
  21. public static AddBuffer(value:IBuffer):boolean{
  22. let group:IBuffer[];
  23. if(this.__groupBufferMap.has(value.group)){
  24. group=this.__groupBufferMap.get(value.group);
  25. if(group.indexOf(value)>=0){
  26. return false;
  27. }
  28. }else{
  29. group=[];
  30. this.__groupBufferMap.set(value.group,group);
  31. }
  32. group.push(value);
  33. this.__bufferMap.set(value.GetUUID(),value);
  34. return true;
  35. }
  36. /**
  37. * 删除buffer
  38. * @param value
  39. */
  40. public static RemoveBuffer(value:IBuffer):void{
  41. if(this.__bufferMap.has(value.GetUUID())==false){
  42. return;
  43. }
  44. this.__bufferMap.delete(value.GetUUID());
  45. let group:IBuffer[]=this.__groupBufferMap.get(value.group);
  46. let index:number=group.indexOf(value);
  47. group.splice(index,1);
  48. }
  49. /**
  50. * 获取BUFFER 组
  51. * @param group
  52. */
  53. public static GetBufferGroup(group:string):IBuffer[]{
  54. if(this.__groupBufferMap.has(group)==false){
  55. return null;
  56. }
  57. return this.__groupBufferMap.get(group);
  58. }
  59. /**
  60. * 通过BUFFER 唯一ID 获取BUFFER
  61. * @param uuid
  62. */
  63. public static GetBuffer(uuid:number):IBuffer{
  64. if(this.__bufferMap.has(uuid)==false){
  65. return null;
  66. }
  67. return this.__bufferMap.get(uuid);
  68. }
  69. /**
  70. * 心跳
  71. * @param dt
  72. */
  73. public static Tick(dt:number):void{
  74. let currentTime:number=director.getCurrentTime();
  75. let removeList:IBuffer[]=[];
  76. this.__bufferMap.forEach((value , key) =>{
  77. value.Tick(dt);
  78. if(currentTime>value.GetEndTime()){
  79. removeList.push(value);
  80. }
  81. });
  82. //删除超过时间的BUFFER
  83. removeList.forEach(element => {
  84. this.RemoveBuffer(element);
  85. });
  86. }
  87. }