function AbacusBead(x,y,blockcol,abacus,column,i,value,beadheight){ if (beadheight === undefined) beadheight=-1; var Color = net.brehaut.Color; this.bead = null; this.originaly = null; this.index = i; this.value = value; this.text = null; this.containerbead = null; this.age = 4; this.y = y; this.updateY = function(y){ this.containerbead.y = y; this.y = y; } this.resetAge = function(){ this.age = -1; } this.forceAge = function(age){ this.age = age-1; console.log(this.age); this.updateAge(); } this.updateAge = function(){ // HACK: On iOS, Android and Safari, remove age handling to avoid black beads (saturation not supported) var ua = navigator.userAgent.toLowerCase(); if ((ua.indexOf('safari') != -1 && ua.indexOf('chrome') == -1) || /Android/i.test(ua) || ua.match(/ipad|iphone|ipod/g)) { return; } this.age+=1; if (this.age<=0){ this.redraw("#FFF"); this.age = 0; } else if (this.age<3){ var col = Color(blockcol); col = col.setSaturation(col.getSaturation()/3); col.s = col.s/2; console.log(col.toRGB()); this.redraw(col.toRGB()); } else if (this.age==3){ this.redraw(blockcol); } } this.redraw = function(colour){ var bh; if (beadheight==-1){ bh = abacus.blockHeight; } else { bh = beadheight; } this.bead.graphics.clear().beginStroke("#000000").setStrokeStyle(abacus.blockWidth/25).beginFill(colour).drawRoundRect(-1*abacus.blockWidth/2,0,abacus.blockWidth,bh,abacus.blockHeight/2); } this.drawBead = function(colour){ if (colour === undefined) colour=blockcol; var bh; if (beadheight==-1){ bh = abacus.blockHeight; } else { bh = beadheight; } this.bead = new createjs.Shape(); this.bead.graphics.beginStroke("#000000"); this.bead.graphics.setStrokeStyle(abacus.blockWidth/25); this.bead.graphics.beginFill(colour).drawRoundRect(-1*abacus.blockWidth/2,0,abacus.blockWidth,bh,abacus.blockHeight/2); this.bead.x = 0; this.bead.y = 0; this.containerbead = new createjs.Container(); this.containerbead.addChild(this.bead); this.containerbead.x = x; this.containerbead.y = this.y; abacus.stage.addChild(this.containerbead); } this.updateIndex = function(i){ var oldi = this.index; this.index = i; if (this.index!=oldi){ this.resetAge(); } } this.addClickListeners = function(){ var th = this; var col = column; var previous = "down"; this.bead.on("mousedown", function(evt) { th.originaly = evt.stageY; }); this.bead.on("pressup", function(evt) { if (th.originalyevt.stageY){ col.shuntLeft(th.index); } }); this.bead.addEventListener("click", function(evt){ if (previous === "down") { col.shuntLeft(th.index); previous = "up"; } else if (previous === "up") { col.shuntRight(th.index); previous = "down"; } }); } this.updateValue = function(on,positive){ if (positive === undefined) positive=true; if (on==true&&this.value.toFraction(true).length<=4){ if (positive==false){ this.text.text = "-"+this.value.toFraction(true); } else { this.text.text = this.value.toFraction(true); } } else { this.text.text = ""; } } this.drawText = function(){ var usecol; if (blockcol=="#000"||blockcol=="#000000"){ usecol = "#FFF"; } else { usecol = "#000"; } var text = new createjs.Text("",(abacus.blockWidth/3).toString()+"px Arial", usecol); text.set({ textAlign: 'center' }); text.x = 0; var bh; if (beadheight==-1){ bh = abacus.blockHeight/3; } else { bh = beadheight/2-abacus.blockHeight/3; } text.y = bh; this.containerbead.addChild(text); this.text = text; } this.init = function(){ this.drawBead(); this.addClickListeners(); this.drawText(); } }