⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 72f8d5478bc48e21db471c695579c782709db71c3b6d401876a55fc9852914aa:


0000: 27 75 73 65 20 73 74 72 69 63 74 27 3b 0a 0a 69  'use strict';..i
0010: 6d 70 6f 72 74 20 7b 20 63 6c 6f 63 6b 20 7d 20  mport { clock } 
0020: 66 72 6f 6d 20 27 2e 2e 2f 6d 61 69 6e 27 3b 0a  from '../main';.
0030: 0a 65 78 70 6f 72 74 20 64 65 66 61 75 6c 74 20  .export default 
0040: 63 6c 61 73 73 20 49 6e 74 65 72 76 61 6c 20 7b  class Interval {
0050: 0a 0a 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 28  ..  constructor(
0060: 72 61 74 65 2c 66 75 6e 63 2c 6f 6e 29 20 7b 0a  rate,func,on) {.
0070: 0a 20 20 20 20 74 68 69 73 2e 72 61 74 65 20 3d  .    this.rate =
0080: 20 72 61 74 65 3b 0a 20 20 20 20 74 68 69 73 2e   rate;.    this.
0090: 6f 6e 20 3d 20 6f 6e 3b 0a 20 20 20 20 74 68 69  on = on;.    thi
00a0: 73 2e 63 6c 6f 63 6b 20 3d 20 63 6c 6f 63 6b 28  s.clock = clock(
00b0: 29 3b 20 2f 2f 20 6a 73 68 69 6e 74 20 69 67 6e  ); // jshint ign
00c0: 6f 72 65 3a 6c 69 6e 65 0a 0a 20 20 20 20 74 68  ore:line..    th
00d0: 69 73 2e 70 61 74 74 65 72 6e 20 3d 20 5b 31 5d  is.pattern = [1]
00e0: 3b 0a 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78  ;.    this.index
00f0: 20 3d 20 30 3b 0a 0a 20 20 20 20 74 68 69 73 2e   = 0;..    this.
0100: 65 76 65 6e 74 20 3d 20 66 75 6e 63 20 3f 20 66  event = func ? f
0110: 75 6e 63 20 3a 20 66 75 6e 63 74 69 6f 6e 28 29  unc : function()
0120: 20 7b 20 7d 3b 0a 0a 20 20 20 20 69 66 20 28 74   { };..    if (t
0130: 68 69 73 2e 6f 6e 29 20 7b 0a 20 20 20 20 20 20  his.on) {.      
0140: 74 68 69 73 2e 73 74 61 72 74 28 29 3b 0a 20 20  this.start();.  
0150: 20 20 7d 0a 0a 20 20 7d 0a 0a 20 20 5f 65 76 65    }..  }..  _eve
0160: 6e 74 28 65 29 20 7b 0a 20 20 2f 2f 20 20 69 66  nt(e) {.  //  if
0170: 20 28 74 68 69 73 2e 70 61 74 74 65 72 6e 5b 74   (this.pattern[t
0180: 68 69 73 2e 69 6e 64 65 78 25 74 68 69 73 2e 70  his.index%this.p
0190: 61 74 74 65 72 6e 2e 6c 65 6e 67 74 68 5d 29 20  attern.length]) 
01a0: 7b 0a 20 20 20 20 20 20 74 68 69 73 2e 65 76 65  {.      this.eve
01b0: 6e 74 28 65 29 3b 0a 20 20 2f 2f 20 20 7d 0a 20  nt(e);.  //  }. 
01c0: 20 20 20 74 68 69 73 2e 69 6e 64 65 78 2b 2b 3b     this.index++;
01d0: 0a 20 20 7d 0a 0a 20 20 73 74 6f 70 28 29 20 7b  .  }..  stop() {
01e0: 0a 20 20 20 20 74 68 69 73 2e 6f 6e 20 3d 20 66  .    this.on = f
01f0: 61 6c 73 65 3b 0a 20 20 20 20 74 68 69 73 2e 69  alse;.    this.i
0200: 6e 74 65 72 76 61 6c 2e 63 6c 65 61 72 28 29 3b  nterval.clear();
0210: 0a 20 20 7d 0a 0a 20 20 73 74 61 72 74 28 29 20  .  }..  start() 
0220: 7b 0a 20 20 20 20 74 68 69 73 2e 6f 6e 20 3d 20  {.    this.on = 
0230: 74 72 75 65 3b 0a 20 20 20 20 74 68 69 73 2e 69  true;.    this.i
0240: 6e 74 65 72 76 61 6c 20 3d 20 74 68 69 73 2e 63  nterval = this.c
0250: 6c 6f 63 6b 2e 63 61 6c 6c 62 61 63 6b 41 74 54  lock.callbackAtT
0260: 69 6d 65 28 74 68 69 73 2e 5f 65 76 65 6e 74 2e  ime(this._event.
0270: 62 69 6e 64 28 74 68 69 73 29 2c 20 74 68 69 73  bind(this), this
0280: 2e 63 6c 6f 63 6b 2e 63 6f 6e 74 65 78 74 2e 63  .clock.context.c
0290: 75 72 72 65 6e 74 54 69 6d 65 29 2e 72 65 70 65  urrentTime).repe
02a0: 61 74 28 74 68 69 73 2e 72 61 74 65 2f 31 30 30  at(this.rate/100
02b0: 30 29 2e 74 6f 6c 65 72 61 6e 63 65 28 7b 65 61  0).tolerance({ea
02c0: 72 6c 79 3a 20 30 2e 31 2c 20 6c 61 74 65 3a 31  rly: 0.1, late:1
02d0: 7d 29 3b 0a 20 20 7d 0a 0a 20 20 6d 73 28 6e 65  });.  }..  ms(ne
02e0: 77 72 61 74 65 29 20 7b 0a 20 20 20 20 69 66 20  wrate) {.    if 
02f0: 28 74 68 69 73 2e 6f 6e 29 20 7b 0a 20 20 20 20  (this.on) {.    
0300: 20 20 76 61 72 20 72 61 74 69 6f 20 3d 20 6e 65    var ratio = ne
0310: 77 72 61 74 65 2f 74 68 69 73 2e 72 61 74 65 3b  wrate/this.rate;
0320: 0a 20 20 20 20 20 20 74 68 69 73 2e 72 61 74 65  .      this.rate
0330: 20 3d 20 6e 65 77 72 61 74 65 3b 0a 20 20 20 20   = newrate;.    
0340: 20 20 74 68 69 73 2e 63 6c 6f 63 6b 2e 74 69 6d    this.clock.tim
0350: 65 53 74 72 65 74 63 68 28 74 68 69 73 2e 63 6c  eStretch(this.cl
0360: 6f 63 6b 2e 63 6f 6e 74 65 78 74 2e 63 75 72 72  ock.context.curr
0370: 65 6e 74 54 69 6d 65 2c 20 5b 74 68 69 73 2e 69  entTime, [this.i
0380: 6e 74 65 72 76 61 6c 5d 2c 20 72 61 74 69 6f 29  nterval], ratio)
0390: 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20  ;.    } else {. 
03a0: 20 20 20 20 20 74 68 69 73 2e 72 61 74 65 20 3d       this.rate =
03b0: 20 6e 65 77 72 61 74 65 3b 0a 20 20 20 20 7d 0a   newrate;.    }.
03c0: 20 20 7d 0a 0a 7d 0a                               }..}.