2019-10-14 20:00:42 +02:00
|
|
|
function nand3(id) {
|
|
|
|
this.id = id;
|
|
|
|
this.rep = add(80, 80, "blue", "black", this.id, false);
|
|
|
|
this.pin1 = new pin(0);
|
|
|
|
this.pin2 = new pin(0);
|
|
|
|
this.pin3 = new pin(0);
|
|
|
|
this.o = new pin(1);
|
|
|
|
this.o.nei = this;
|
|
|
|
this.activation = function() {
|
|
|
|
if (!((this.pin1.val && this.pin2.val) && this.pin3.val)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.x = function() {
|
|
|
|
let name = "#" + this.id;
|
|
|
|
return parseFloat($(name).attr("x"));
|
|
|
|
}
|
|
|
|
|
|
|
|
this.y = function() {
|
|
|
|
let name = "#" + this.id;
|
|
|
|
return parseFloat($(name).attr("y"));
|
|
|
|
}
|
|
|
|
|
|
|
|
//design
|
|
|
|
let g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
|
|
|
|
$(g).attr({
|
2018-06-24 10:02:09 +02:00
|
|
|
width: "100%",
|
|
|
|
height: "100%"
|
|
|
|
});
|
2019-10-14 20:00:42 +02:00
|
|
|
let skin = $(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')).attr({
|
|
|
|
x: "50",
|
|
|
|
y: "50",
|
|
|
|
id: (id + "-skin"),
|
|
|
|
width: "80",
|
|
|
|
height: "80"
|
2018-06-24 10:02:09 +02:00
|
|
|
});
|
2019-10-14 20:00:42 +02:00
|
|
|
let img = $(document.createElement('img')).attr({
|
|
|
|
height: "72",
|
|
|
|
width: "72",
|
|
|
|
src: "textures/gates/nand_gate.jpg"
|
|
|
|
});
|
|
|
|
let iDiv = document.createElement("div");
|
|
|
|
$(iDiv).append(img);
|
|
|
|
this.skin = skin;
|
|
|
|
this.img = img;
|
|
|
|
$(skin).append(iDiv);
|
|
|
|
//noname(this);
|
|
|
|
$(g).append(skin);
|
|
|
|
let elem = document.getElementById("svg1");
|
2018-06-24 10:02:09 +02:00
|
|
|
elem.appendChild(g);
|
2019-10-14 20:00:42 +02:00
|
|
|
|
|
|
|
//updating
|
|
|
|
this.update = function() {
|
|
|
|
//the main object and his pins
|
|
|
|
let x = this.x();
|
|
|
|
let y = this.y();
|
|
|
|
this.pin1.set(x - 20, y);
|
|
|
|
this.pin2.set(x - 20, y + 60);
|
|
|
|
this.pin3.set(x - 20, y + 30);
|
|
|
|
this.o.set(x + 80, y + 30);
|
|
|
|
|
|
|
|
//and the skin
|
|
|
|
let name = "#" + this.id + "-skin";
|
|
|
|
let skin = $(name);
|
|
|
|
skin.attr("x", (parseFloat($((this.rep)).attr("x")) + 4).toString());
|
|
|
|
skin.attr("y", (parseFloat($((this.rep)).attr("y")) + 4).toString());
|
|
|
|
}
|
|
|
|
pieces[pieces.length] = this;
|
|
|
|
|
|
|
|
|
|
|
|
clk(this, [this.pin1, this.pin2, this.pin3, this.o]);
|
2018-06-24 10:02:09 +02:00
|
|
|
}
|
|
|
|
|
2019-10-14 20:00:42 +02:00
|
|
|
function clk(ob, arr) {
|
|
|
|
$((ob.img)).on("mousedown touchstart", function(e) {
|
|
|
|
e.preventDefault();
|
|
|
|
let svg = document.getElementById("svg1");
|
|
|
|
$(svg).append(ob.rep);
|
|
|
|
$(svg).append($(ob.pin1.rep));
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
|
|
$(svg).append($(i.rep));
|
|
|
|
}
|
|
|
|
$(svg).append($(ob.skin));
|
|
|
|
selected = ob.id;
|
|
|
|
});
|
|
|
|
$((ob.img)).on("mouseup touchend", function() {
|
|
|
|
selected = "yay";
|
|
|
|
});
|
2018-06-24 10:02:09 +02:00
|
|
|
}
|