⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 4e0b0800b9ed92bc54197cbd8aa4286e1f6bbd32922f7ae1b8b2921c43c881f5:


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: 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 44 72 75 6e 6b 20 7b 0a 0a 20  class Drunk {.. 
0050: 20 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 28 6d     constructor(m
0060: 69 6e 3d 30 2c 20 6d 61 78 3d 39 2c 20 76 61 6c  in=0, max=9, val
0070: 75 65 3d 30 2c 20 69 6e 63 72 65 6d 65 6e 74 3d  ue=0, increment=
0080: 31 2c 20 6c 6f 6f 70 3d 66 61 6c 73 65 29 20 7b  1, loop=false) {
0090: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 69  .        this.mi
00a0: 6e 20 3d 20 6d 69 6e 3b 0a 20 20 20 20 20 20 20  n = min;.       
00b0: 20 74 68 69 73 2e 6d 61 78 20 3d 20 6d 61 78 3b   this.max = max;
00c0: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 61  .        this.va
00d0: 6c 75 65 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  lue = value;.   
00e0: 20 20 20 20 20 74 68 69 73 2e 69 6e 63 72 65 6d       this.increm
00f0: 65 6e 74 20 3d 20 69 6e 63 72 65 6d 65 6e 74 3b  ent = increment;
0100: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f  .        this.lo
0110: 6f 70 20 3d 20 6c 6f 6f 70 3b 0a 20 20 20 20 7d  op = loop;.    }
0120: 0a 0a 20 20 20 20 6e 65 78 74 28 29 20 7b 0a 20  ..    next() {. 
0130: 20 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75         this.valu
0140: 65 20 2b 3d 20 6d 61 74 68 2e 70 69 63 6b 28 2d  e += math.pick(-
0150: 31 20 2a 20 74 68 69 73 2e 69 6e 63 72 65 6d 65  1 * this.increme
0160: 6e 74 2c 20 74 68 69 73 2e 69 6e 63 72 65 6d 65  nt, this.increme
0170: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20  nt);.        if 
0180: 28 74 68 69 73 2e 76 61 6c 75 65 20 3e 20 74 68  (this.value > th
0190: 69 73 2e 6d 61 78 29 20 7b 0a 20 20 20 20 20 20  is.max) {.      
01a0: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c        if (this.l
01b0: 6f 6f 70 29 20 7b 0a 20 20 20 20 20 20 20 20 20  oop) {.         
01c0: 20 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75         this.valu
01d0: 65 20 3d 20 74 68 69 73 2e 6d 69 6e 3b 0a 20 20  e = this.min;.  
01e0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
01f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
0200: 20 20 20 74 68 69 73 2e 76 61 6c 75 65 20 3d 20     this.value = 
0210: 74 68 69 73 2e 6d 61 78 20 2d 20 74 68 69 73 2e  this.max - this.
0220: 69 6e 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20 20  increment;.     
0230: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0240: 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28   }..        if (
0250: 74 68 69 73 2e 76 61 6c 75 65 20 3c 20 74 68 69  this.value < thi
0260: 73 2e 6d 69 6e 29 20 7b 0a 20 20 20 20 20 20 20  s.min) {.       
0270: 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c 6f       if (this.lo
0280: 6f 70 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  op) {.          
0290: 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65        this.value
02a0: 20 3d 20 74 68 69 73 2e 6d 61 78 3b 0a 20 20 20   = this.max;.   
02b0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
02c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
02d0: 20 20 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 74    this.value = t
02e0: 68 69 73 2e 6d 69 6e 20 2b 20 74 68 69 73 2e 69  his.min + this.i
02f0: 6e 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  ncrement;.      
0300: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0310: 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
0320: 20 74 68 69 73 2e 76 61 6c 75 65 3b 0a 20 20 20   this.value;.   
0330: 20 7d 0a 7d 0a                                    }.}.