⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 97166c6e62a6574169df7fa63a268f5277fcf15cda0659a24e4c8dda3bfe8d44:


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 6d 61 74 68 20 66 72 6f 6d 20  mport math from 
0020: 27 2e 2e 2f 75 74 69 6c 2f 6d 61 74 68 27 3b 0a  '../util/math';.
0030: 69 6d 70 6f 72 74 20 44 72 75 6e 6b 20 66 72 6f  import Drunk fro
0040: 6d 20 27 2e 2f 64 72 75 6e 6b 27 3b 0a 0a 65 78  m './drunk';..ex
0050: 70 6f 72 74 20 64 65 66 61 75 6c 74 20 63 6c 61  port default cla
0060: 73 73 20 43 6f 75 6e 74 65 72 20 7b 0a 0a 20 20  ss Counter {..  
0070: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 28 6d 69    constructor(mi
0080: 6e 3d 30 2c 20 6d 61 78 3d 31 30 2c 20 6d 6f 64  n=0, max=10, mod
0090: 65 3d 27 75 70 27 2c 20 76 61 6c 75 65 3d 66 61  e='up', value=fa
00a0: 6c 73 65 29 20 7b 0a 20 20 20 20 20 20 20 20 74  lse) {.        t
00b0: 68 69 73 2e 6d 69 6e 20 3d 20 6d 69 6e 3b 0a 20  his.min = min;. 
00c0: 20 20 20 20 20 20 20 74 68 69 73 2e 6d 61 78 20         this.max 
00d0: 3d 20 6d 61 78 3b 0a 20 20 20 20 20 20 20 20 74  = max;.        t
00e0: 68 69 73 2e 76 61 6c 75 65 20 3d 20 76 61 6c 75  his.value = valu
00f0: 65 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e  e;.        this.
0100: 6d 6f 64 65 20 3d 20 6d 6f 64 65 3b 0a 20 20 20  mode = mode;.   
0110: 20 20 20 20 20 74 68 69 73 2e 64 72 75 6e 6b 57       this.drunkW
0120: 61 6c 6b 20 3d 20 6e 65 77 20 44 72 75 6e 6b 28  alk = new Drunk(
0130: 74 68 69 73 2e 6d 69 6e 2c 20 74 68 69 73 2e 6d  this.min, this.m
0140: 61 78 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20  ax);.        if 
0150: 28 74 68 69 73 2e 76 61 6c 75 65 21 3d 3d 66 61  (this.value!==fa
0160: 6c 73 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20  lse) {.         
0170: 20 74 68 69 73 2e 6e 65 78 74 20 3d 20 74 68 69   this.next = thi
0180: 73 5b 74 68 69 73 2e 5f 6d 6f 64 65 5d 3b 0a 20  s[this._mode];. 
0190: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
01a0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
01b0: 65 78 74 20 3d 20 74 68 69 73 2e 66 69 72 73 74  ext = this.first
01c0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
01d0: 7d 0a 0a 20 20 20 20 73 65 74 20 6d 6f 64 65 28  }..    set mode(
01e0: 6d 6f 64 65 29 20 7b 0a 20 20 20 20 20 20 20 20  mode) {.        
01f0: 69 66 20 28 21 28 6d 6f 64 65 20 3d 3d 3d 20 27  if (!(mode === '
0200: 75 70 27 20 7c 7c 20 6d 6f 64 65 20 3d 3d 3d 20  up' || mode === 
0210: 27 64 6f 77 6e 27 20 7c 7c 20 6d 6f 64 65 20 3d  'down' || mode =
0220: 3d 3d 20 27 72 61 6e 64 6f 6d 27 20 7c 7c 20 6d  == 'random' || m
0230: 6f 64 65 20 3d 3d 3d 20 27 64 72 75 6e 6b 27 29  ode === 'drunk')
0240: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
0250: 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 27 54  console.error('T
0260: 68 65 20 6f 6e 6c 79 20 6d 6f 64 65 73 20 63 75  he only modes cu
0270: 72 72 65 6e 74 6c 79 20 61 6c 6c 6f 77 65 64 20  rrently allowed 
0280: 61 72 65 3a 20 75 70 2c 20 64 6f 77 6e 2c 20 72  are: up, down, r
0290: 61 6e 64 6f 6d 2c 20 64 72 75 6e 6b 27 29 3b 0a  andom, drunk');.
02a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
02b0: 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
02c0: 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 65        this._mode
02d0: 20 3d 20 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20   = mode;.       
02e0: 20 69 66 20 28 74 68 69 73 2e 76 61 6c 75 65 29   if (this.value)
02f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 74 68 69   {.          thi
0300: 73 2e 6e 65 78 74 20 3d 20 74 68 69 73 5b 74 68  s.next = this[th
0310: 69 73 2e 5f 6d 6f 64 65 5d 3b 0a 20 20 20 20 20  is._mode];.     
0320: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
0330: 67 65 74 20 6d 6f 64 65 28 29 20 7b 0a 20 20 20  get mode() {.   
0340: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
0350: 2e 5f 6d 6f 64 65 3b 0a 20 20 20 20 7d 0a 0a 20  ._mode;.    }.. 
0360: 20 20 20 66 69 72 73 74 28 29 20 7b 0a 20 20 20     first() {.   
0370: 20 20 20 69 66 20 28 74 68 69 73 2e 76 61 6c 75     if (this.valu
0380: 65 21 3d 3d 66 61 6c 73 65 29 20 7b 0a 20 20 20  e!==false) {.   
0390: 20 20 20 20 20 74 68 69 73 2e 6e 65 78 74 20 3d       this.next =
03a0: 20 74 68 69 73 5b 74 68 69 73 2e 5f 6d 6f 64 65   this[this._mode
03b0: 5d 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ];.        retur
03c0: 6e 20 74 68 69 73 2e 6e 65 78 74 28 29 3b 0a 20  n this.next();. 
03d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 74 68 69       }.      thi
03e0: 73 2e 73 74 61 72 74 56 61 6c 75 65 73 20 3d 20  s.startValues = 
03f0: 7b 0a 20 20 20 20 20 20 20 20 27 75 70 27 3a 20  {.        'up': 
0400: 74 68 69 73 2e 6d 69 6e 2c 0a 20 20 20 20 20 20  this.min,.      
0410: 20 20 27 64 6f 77 6e 27 3a 20 74 68 69 73 2e 6d    'down': this.m
0420: 61 78 2c 0a 20 20 20 20 20 20 20 20 27 64 72 75  ax,.        'dru
0430: 6e 6b 27 3a 20 7e 7e 6d 61 74 68 2e 61 76 65 72  nk': ~~math.aver
0440: 61 67 65 28 74 68 69 73 2e 6d 69 6e 2c 74 68 69  age(this.min,thi
0450: 73 2e 6d 61 78 29 2c 0a 20 20 20 20 20 20 20 20  s.max),.        
0460: 27 72 61 6e 64 6f 6d 27 3a 20 6d 61 74 68 2e 72  'random': math.r
0470: 69 28 74 68 69 73 2e 6d 69 6e 2c 74 68 69 73 2e  i(this.min,this.
0480: 6d 61 78 29 0a 20 20 20 20 20 20 7d 3b 0a 20 20  max).      };.  
0490: 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65 20 3d      this.value =
04a0: 20 74 68 69 73 2e 73 74 61 72 74 56 61 6c 75 65   this.startValue
04b0: 73 5b 74 68 69 73 2e 5f 6d 6f 64 65 5d 3b 0a 20  s[this._mode];. 
04c0: 20 20 20 20 20 74 68 69 73 2e 6e 65 78 74 20 3d       this.next =
04d0: 20 74 68 69 73 5b 74 68 69 73 2e 5f 6d 6f 64 65   this[this._mode
04e0: 5d 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ];.      return 
04f0: 74 68 69 73 2e 76 61 6c 75 65 3b 0a 20 20 20 20  this.value;.    
0500: 7d 0a 0a 20 20 20 20 75 70 28 29 20 7b 0a 20 20  }..    up() {.  
0510: 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65        this.value
0520: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ++;.        if (
0530: 74 68 69 73 2e 76 61 6c 75 65 20 3e 3d 20 74 68  this.value >= th
0540: 69 73 2e 6d 61 78 29 20 7b 0a 20 20 20 20 20 20  is.max) {.      
0550: 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65        this.value
0560: 20 3d 20 74 68 69 73 2e 6d 69 6e 3b 0a 20 20 20   = this.min;.   
0570: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
0580: 65 74 75 72 6e 20 74 68 69 73 2e 76 61 6c 75 65  eturn this.value
0590: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 64 6f 77  ;.    }..    dow
05a0: 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68  n() {.        th
05b0: 69 73 2e 76 61 6c 75 65 2d 2d 3b 0a 20 20 20 20  is.value--;.    
05c0: 20 20 20 20 69 66 20 28 74 68 69 73 2e 76 61 6c      if (this.val
05d0: 75 65 20 3c 20 74 68 69 73 2e 6d 69 6e 29 20 7b  ue < this.min) {
05e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
05f0: 73 2e 76 61 6c 75 65 20 3d 20 74 68 69 73 2e 6d  s.value = this.m
0600: 61 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ax;.        }.  
0610: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
0620: 73 2e 76 61 6c 75 65 3b 0a 20 20 20 20 7d 0a 0a  s.value;.    }..
0630: 20 20 20 20 72 61 6e 64 6f 6d 28 29 20 7b 0a 20      random() {. 
0640: 20 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75         this.valu
0650: 65 20 3d 20 6d 61 74 68 2e 72 69 28 74 68 69 73  e = math.ri(this
0660: 2e 6d 69 6e 2c 20 74 68 69 73 2e 6d 61 78 29 3b  .min, this.max);
0670: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
0680: 74 68 69 73 2e 76 61 6c 75 65 3b 0a 20 20 20 20  this.value;.    
0690: 7d 0a 0a 20 20 20 20 64 72 75 6e 6b 28 29 20 7b  }..    drunk() {
06a0: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 72  .        this.dr
06b0: 75 6e 6b 57 61 6c 6b 2e 6d 69 6e 20 3d 20 74 68  unkWalk.min = th
06c0: 69 73 2e 6d 69 6e 3b 0a 20 20 20 20 20 20 20 20  is.min;.        
06d0: 74 68 69 73 2e 64 72 75 6e 6b 57 61 6c 6b 2e 6d  this.drunkWalk.m
06e0: 61 78 20 3d 20 74 68 69 73 2e 6d 61 78 3b 0a 20  ax = this.max;. 
06f0: 20 20 20 20 20 20 20 74 68 69 73 2e 64 72 75 6e         this.drun
0700: 6b 57 61 6c 6b 2e 76 61 6c 75 65 20 3d 20 74 68  kWalk.value = th
0710: 69 73 2e 76 61 6c 75 65 3b 0a 20 20 20 20 20 20  is.value;.      
0720: 20 20 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 74    this.value = t
0730: 68 69 73 2e 64 72 75 6e 6b 57 61 6c 6b 2e 6e 65  his.drunkWalk.ne
0740: 78 74 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65  xt();.        re
0750: 74 75 72 6e 20 74 68 69 73 2e 76 61 6c 75 65 3b  turn this.value;
0760: 0a 20 20 20 20 7d 0a 7d 0a                       .    }.}.