BaseBuffer.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { director } from "cc";
  2. import BufferManager from "./BufferManager";
  3. import IBuffer from "./IBuffer";
  4. export default class BaseBuffer implements IBuffer
  5. {
  6. time: number;
  7. startTime: number;
  8. endTime: number;
  9. group: string;
  10. private static uuidIndex:number=0;
  11. private uuid:number;
  12. constructor(group:string,time:number){
  13. this.group=group;
  14. this.time=time;
  15. this.uuid=BaseBuffer.uuidIndex;
  16. BaseBuffer.uuidIndex++;
  17. }
  18. /**
  19. * 合并同组BUFFER 如果BUFFER必须是唯一则在Run 函数中调用。
  20. */
  21. protected mergeBuffer():void{
  22. let groupList:IBuffer[]=BufferManager.GetBufferGroup(this.group);
  23. let otherTime:number=0;
  24. let currentTime:number=director.getCurrentTime();
  25. let otherEndTime:number;
  26. if(groupList.length>1){
  27. groupList.forEach(element => {
  28. //排除自身
  29. if(element!=this){
  30. otherEndTime=element.GetEndTime();
  31. if(currentTime<otherEndTime){
  32. otherTime+=otherEndTime-currentTime;
  33. }
  34. }
  35. });
  36. //清理
  37. while(groupList.length>1){
  38. let buffer:IBuffer;
  39. for (let index = 0; index < groupList.length; index++) {
  40. buffer = groupList[index];
  41. //排除自身
  42. if(buffer!=this){
  43. BufferManager.RemoveBuffer(buffer);
  44. }
  45. }
  46. groupList=BufferManager.GetBufferGroup(this.group);
  47. }
  48. }
  49. //合并时间
  50. this.time+=otherTime;
  51. }
  52. /**
  53. * 剩余时间
  54. */
  55. GetTimeRemaining(): number {
  56. let currentTime:number=director.getCurrentTime();
  57. let endTime:number=this.GetEndTime();
  58. if(currentTime<endTime){
  59. return endTime-currentTime;
  60. }
  61. return 0;
  62. }
  63. GetEndTime(): number {
  64. return this.endTime;
  65. }
  66. GetTime(): number {
  67. return this.time;
  68. }
  69. Tick(dt: number): void {
  70. }
  71. Run(data:any):void{
  72. this.startTime=director.getCurrentTime();
  73. this.endTime=this.startTime+this.time;
  74. }
  75. GetUUID(): number {
  76. return this.uuid;
  77. }
  78. }