not really known
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

158 lines
3.8 KiB

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.originaly<evt.stageY){
col.shuntRight(th.index);
}
else if (th.originaly>evt.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();
}
}