BaseBuffer.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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(otherEndTime<currentTime){
  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. Tick(dt: number): void {
  67. }
  68. Run(data:any):void{
  69. this.startTime=director.getCurrentTime();
  70. this.endTime=this.startTime+this.time;
  71. }
  72. GetUUID(): number {
  73. return this.uuid;
  74. }
  75. }