把前端从CircuitVerse中拆了出来
This commit is contained in:
commit
5bf1284599
2182 changed files with 189323 additions and 0 deletions
176
public/js/wire.js
Normal file
176
public/js/wire.js
Normal file
|
@ -0,0 +1,176 @@
|
|||
//wire object
|
||||
function Wire(node1, node2, scope) {
|
||||
this.objectType = "Wire";
|
||||
this.node1 = node1;
|
||||
this.scope = scope;
|
||||
this.node2 = node2;
|
||||
this.type = "horizontal";
|
||||
this.updateData();
|
||||
this.scope.wires.push(this);
|
||||
forceResetNodes=true;
|
||||
}
|
||||
|
||||
//if data changes
|
||||
// get the terminals of the wires
|
||||
Wire.prototype.updateData = function() {
|
||||
|
||||
this.x1 = this.node1.absX();
|
||||
this.y1 = this.node1.absY();
|
||||
this.x2 = this.node2.absX();
|
||||
this.y2 = this.node2.absY();
|
||||
if (this.x1 == this.x2) this.type = "vertical";
|
||||
}
|
||||
|
||||
Wire.prototype.updateScope=function(scope){
|
||||
this.scope=scope;
|
||||
this.checkConnections();
|
||||
}
|
||||
|
||||
//to check if nodes are disconnected
|
||||
Wire.prototype.checkConnections = function() {
|
||||
var check = this.node1.deleted||this.node2.deleted||!this.node1.connections.contains(this.node2) || !this.node2.connections.contains(this.node1);
|
||||
if (check) this.delete();
|
||||
return check;
|
||||
}
|
||||
|
||||
|
||||
Wire.prototype.update = function() {
|
||||
|
||||
if(embed)return;
|
||||
|
||||
if(this.node1.absX()==this.node2.absX()){
|
||||
this.x1=this.x2=this.node1.absX();
|
||||
this.type="vertical";
|
||||
}
|
||||
else if(this.node1.absY()==this.node2.absY()){
|
||||
this.y1=this.y2=this.node1.absY();
|
||||
this.type="horizontal";
|
||||
}
|
||||
|
||||
var updated = false;
|
||||
if (wireToBeChecked && this.checkConnections()) {
|
||||
this.delete();
|
||||
return;
|
||||
} // SLOW , REMOVE
|
||||
|
||||
// select a wire
|
||||
if (simulationArea.shiftDown==false&&simulationArea.mouseDown == true && simulationArea.selected == false && this.checkWithin(simulationArea.mouseDownX, simulationArea.mouseDownY)) {
|
||||
simulationArea.selected = true;
|
||||
simulationArea.lastSelected = this;
|
||||
updated = true;
|
||||
}
|
||||
|
||||
// double click on a wire to place a node
|
||||
else if(simulationArea.mouseDown && simulationArea.lastSelected==this&& !this.checkWithin(simulationArea.mouseX, simulationArea.mouseY)){
|
||||
// lets move this wiree !
|
||||
if(this.node1.type == NODE_INTERMEDIATE && this.node2.type == NODE_INTERMEDIATE) {
|
||||
if(this.type=="horizontal"){
|
||||
this.node1.y= simulationArea.mouseY
|
||||
this.node2.y= simulationArea.mouseY
|
||||
} else if(this.type=="vertical"){
|
||||
this.node1.x= simulationArea.mouseX
|
||||
this.node2.x= simulationArea.mouseX
|
||||
}
|
||||
}
|
||||
// var n = new Node(simulationArea.mouseDownX, simulationArea.mouseDownY, 2, this.scope.root);
|
||||
// n.clicked = true;
|
||||
|
||||
// n.wasClicked = true;
|
||||
// simulationArea.lastSelected=n;
|
||||
// this.converge(n);
|
||||
}
|
||||
if (simulationArea.lastSelected == this) {
|
||||
|
||||
}
|
||||
|
||||
if (this.node1.deleted || this.node2.deleted){
|
||||
this.delete();
|
||||
return;
|
||||
} //if either of the nodes are deleted
|
||||
|
||||
//NODE POSITION when we move a COMPONENT to make lines drawen horzontally or vertically
|
||||
if (simulationArea.mouseDown == false) {
|
||||
if (this.type == "horizontal") {
|
||||
if (this.node1.absY() != this.y1) {
|
||||
// if(this.checkConnections()){this.delete();return;}
|
||||
var n = new Node(this.node1.absX(), this.y1, 2, this.scope.root);
|
||||
this.converge(n);
|
||||
updated = true;
|
||||
} else if (this.node2.absY() != this.y2) {
|
||||
// if(this.checkConnections()){this.delete();return;}
|
||||
var n = new Node(this.node2.absX(), this.y2, 2, this.scope.root);
|
||||
this.converge(n);
|
||||
updated = true;
|
||||
}
|
||||
} else if (this.type == "vertical") {
|
||||
|
||||
if (this.node1.absX() != this.x1) {
|
||||
// if(this.checkConnections()){this.delete();return;}
|
||||
var n = new Node(this.x1, this.node1.absY(), 2, this.scope.root);
|
||||
this.converge(n);
|
||||
updated = true;
|
||||
} else if (this.node2.absX() != this.x2) {
|
||||
|
||||
// if(this.checkConnections()){this.delete();return;}
|
||||
var n = new Node(this.x2, this.node2.absY(), 2, this.scope.root);
|
||||
this.converge(n);
|
||||
updated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return updated;
|
||||
}
|
||||
Wire.prototype.draw = function() {
|
||||
|
||||
// for calculating min-max Width,min-max Height
|
||||
|
||||
ctx = simulationArea.context;
|
||||
|
||||
var color;
|
||||
if (simulationArea.lastSelected == this)
|
||||
color = "blue";
|
||||
else if (this.node1.value == undefined||this.node2.value == undefined)
|
||||
color = "red";
|
||||
else if (this.node1.bitWidth == 1)
|
||||
color = ["red", "DarkGreen", "Lime"][this.node1.value + 1];
|
||||
else
|
||||
color = "black";
|
||||
drawLine(ctx, this.node1.absX(), this.node1.absY(), this.node2.absX(), this.node2.absY(), color, 3);
|
||||
|
||||
}
|
||||
|
||||
// checks if node lies on wire
|
||||
Wire.prototype.checkConvergence = function(n) {
|
||||
return this.checkWithin(n.absX(), n.absY());
|
||||
}
|
||||
// fn checks if coordinate lies on wire
|
||||
Wire.prototype.checkWithin = function(x, y) {
|
||||
if ((this.type == "horizontal") && (this.node1.absX() < this.node2.absX()) && (x > this.node1.absX()) && (x < this.node2.absX()) && (y === this.node2.absY()))
|
||||
return true;
|
||||
else if ((this.type == "horizontal") && (this.node1.absX() > this.node2.absX()) && (x < this.node1.absX()) && (x > this.node2.absX()) && (y === this.node2.absY()))
|
||||
return true;
|
||||
else if ((this.type == 'vertical') && (this.node1.absY() < this.node2.absY()) && (y > this.node1.absY()) && (y < this.node2.absY()) && (x === this.node2.absX()))
|
||||
return true;
|
||||
else if ((this.type == 'vertical') && (this.node1.absY() > this.node2.absY()) && (y < this.node1.absY()) && (y > this.node2.absY()) && (x === this.node2.absX()))
|
||||
return true
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
//add intermediate node between these 2 nodes
|
||||
Wire.prototype.converge = function(n) {
|
||||
this.node1.connect(n);
|
||||
this.node2.connect(n);
|
||||
this.delete();
|
||||
}
|
||||
|
||||
|
||||
Wire.prototype.delete = function() {
|
||||
forceResetNodes=true;
|
||||
updateSimulation = true;
|
||||
this.node1.connections.clean(this.node2);
|
||||
this.node2.connections.clean(this.node1);
|
||||
this.scope.wires.clean(this);
|
||||
this.node1.checkDeleted();
|
||||
this.node2.checkDeleted();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue