0.2.10: Better element placement, newly placed elements selected
This commit is contained in:
parent
08b229814f
commit
59386209fe
@ -12,6 +12,11 @@ To be decided, but at this moment this code is open source and free to use for n
|
||||
|
||||
## Changelog
|
||||
|
||||
### 0.2.10
|
||||
|
||||
* New elements will now do overlap detection on placement
|
||||
* Newly placed elements will now be selected
|
||||
|
||||
### 0.2.9
|
||||
* Active linking is now drawn with quadratic curves
|
||||
* Links can now be deleted by simply trying to link the same link again
|
||||
|
||||
@ -2,6 +2,35 @@
|
||||
First a few needed global functions
|
||||
*/
|
||||
|
||||
function addElement(refClass,props) {
|
||||
let newElement = new refClass(logicEngine,...props);
|
||||
|
||||
let x = Math.round(logicEngine.Canvas.width/2);
|
||||
let y = Math.round(logicEngine.Canvas.height/2);
|
||||
let width = newElement.Width;
|
||||
let height = newElement.Height;
|
||||
|
||||
let noclearspot = true;
|
||||
while (noclearspot) {
|
||||
if (!logicEngine.ActiveContainer.checkOverlayBounds(x,y,width,height)) {
|
||||
noclearspot = false;
|
||||
} else {
|
||||
x += Math.floor(Math.random() * (width - (width - (width*2))) ) + (width - (width*2));
|
||||
y += Math.floor(Math.random() * (height - (height - (height*2))) ) + (height - (height*2));
|
||||
if (x < 0) x = 0;
|
||||
if (y < 0) y = 0;
|
||||
if (x + width > logicEngine.Canvas.width) x = logicEngine.Canvas.width - width;
|
||||
if (y + height > logicEngine.Canvas.height) y = logicEngine.Canvas.height - height;
|
||||
}
|
||||
}
|
||||
newElement.X = x;
|
||||
newElement.Y = y;
|
||||
|
||||
logicEngine.ActiveContainer.AddElement(newElement);
|
||||
logicEngine.ActiveContainer.Select(newElement);
|
||||
return newElement;
|
||||
}
|
||||
|
||||
function setCookie(cname, cvalue, exdays) {
|
||||
let d = new Date();
|
||||
d.setTime(d.getTime() + (exdays*24*60*60*1000));
|
||||
@ -1177,6 +1206,16 @@ class elementContainer {
|
||||
return false;
|
||||
}
|
||||
|
||||
checkOverlayBounds(x,y,width,height) {
|
||||
for (let a = 0; a < this.Elements.length; a++) {
|
||||
if ((x >= this.Elements[a].X) && (x <= (this.Elements[a].X + this.Elements[a].Width)) && (y >= this.Elements[a].Y) && (y <= (this.Elements[a].Y + this.Elements[a].Height))) return this.Elements[a];
|
||||
if (((x + width) >= this.Elements[a].X) && ((x + width) <= (this.Elements[a].X + this.Elements[a].Width)) && (y >= this.Elements[a].Y) && (y <= (this.Elements[a].Y + this.Elements[a].Height))) return this.Elements[a];
|
||||
if ((x >= this.Elements[a].X) && (x <= (this.Elements[a].X + this.Elements[a].Width)) && ((y + height) >= this.Elements[a].Y) && ((y + height) <= (this.Elements[a].Y + this.Elements[a].Height))) return this.Elements[a];
|
||||
if (((x + width) >= this.Elements[a].X) && ((x + width) <= (this.Elements[a].X + this.Elements[a].Width)) && ((y + height) >= this.Elements[a].Y) && ((y + height) <= (this.Elements[a].Y + this.Elements[a].Height))) return this.Elements[a];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class LogicEngine {
|
||||
@ -1397,6 +1436,3 @@ class LogicEngine {
|
||||
this.DrawLoop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
61
js/main.js
61
js/main.js
@ -2,7 +2,7 @@
|
||||
MatCat BrowserLogic Simulator
|
||||
*/
|
||||
|
||||
let Version = "0.2.9";
|
||||
let Version = "0.2.10";
|
||||
let spanVersion = document.getElementById("version");
|
||||
spanVersion.innerText = Version;
|
||||
// get the canvas and get the engine object going
|
||||
@ -57,91 +57,58 @@ btn_Delete.addEventListener('click', function(evt) {
|
||||
|
||||
let btn_AddAND = document.getElementById("btn_AddAND");
|
||||
btn_AddAND.addEventListener('click', function(evt) {
|
||||
let newAND = new LogicAND(logicEngine,2);
|
||||
newAND.X = logicEngine.Canvas.width/2;
|
||||
newAND.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newAND);
|
||||
addElement(LogicAND, [2]);
|
||||
}, false);
|
||||
|
||||
let btn_AddNAND = document.getElementById("btn_AddNAND");
|
||||
btn_AddNAND.addEventListener('click', function(evt) {
|
||||
let newNAND = new LogicNAND(logicEngine,2);
|
||||
newNAND.X = logicEngine.Canvas.width/2;
|
||||
newNAND.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newNAND);
|
||||
addElement(LogicNAND, [2]);
|
||||
}, false);
|
||||
|
||||
let btn_AddOR = document.getElementById("btn_AddOR");
|
||||
btn_AddOR.addEventListener('click', function(evt) {
|
||||
let newOR = new LogicOR(logicEngine,2);
|
||||
newOR.X = logicEngine.Canvas.width/2;
|
||||
newOR.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newOR);
|
||||
addElement(LogicOR, [2]);
|
||||
}, false);
|
||||
|
||||
let btn_AddNOR = document.getElementById("btn_AddNOR");
|
||||
btn_AddNOR.addEventListener('click', function(evt) {
|
||||
let newNOR = new LogicNOR(logicEngine,2);
|
||||
newNOR.X = logicEngine.Canvas.width/2;
|
||||
newNOR.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newNOR);
|
||||
addElement(LogicNOR, [2]);
|
||||
}, false);
|
||||
|
||||
let btn_AddXOR = document.getElementById("btn_AddXOR");
|
||||
btn_AddXOR.addEventListener('click', function(evt) {
|
||||
let newXOR = new LogicXOR(logicEngine);
|
||||
newXOR.X = logicEngine.Canvas.width/2;
|
||||
newXOR.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newXOR);
|
||||
addElement(LogicXOR,[]);
|
||||
}, false);
|
||||
|
||||
let btn_AddXNOR = document.getElementById("btn_AddXNOR");
|
||||
btn_AddXNOR.addEventListener('click', function(evt) {
|
||||
let newXNOR = new LogicXNOR(logicEngine);
|
||||
newXNOR.X = logicEngine.Canvas.width/2;
|
||||
newXNOR.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newXNOR);
|
||||
addElement(LogicXNOR,[]);
|
||||
}, false);
|
||||
|
||||
btn_AddNOT.addEventListener('click', function(evt) {
|
||||
let newNOT = new LogicNOT(logicEngine);
|
||||
newNOT.X = logicEngine.Canvas.width/2;
|
||||
newNOT.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newNOT);
|
||||
addElement(LogicNOT,[]);
|
||||
}, false);
|
||||
|
||||
let btn_AddSWITCH = document.getElementById("btn_AddSWITCH");
|
||||
btn_AddSWITCH.addEventListener('click', function(evt) {
|
||||
let newSWITCH = new InputSwitch(logicEngine);
|
||||
newSWITCH.X = logicEngine.Canvas.width/2;
|
||||
newSWITCH.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newSWITCH);
|
||||
addElement(InputSwitch,[]);
|
||||
}, false);
|
||||
|
||||
let btn_AddBTN = document.getElementById("btn_AddBTN");
|
||||
btn_AddBTN.addEventListener('click', function(evt) {
|
||||
let newBTN = new InputButton(logicEngine);
|
||||
newBTN.X = logicEngine.Canvas.width/2;
|
||||
newBTN.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newBTN);
|
||||
addElement(InputButton,[]);
|
||||
}, false);
|
||||
|
||||
let btn_AddCLK = document.getElementById("btn_AddCLK");
|
||||
btn_AddCLK.addEventListener('click', function(evt) {
|
||||
let newCLK = new ClockElement(logicEngine);
|
||||
newCLK.X = logicEngine.Canvas.width/2;
|
||||
newCLK.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newCLK);
|
||||
logicEngine.Scheduler.addTask(newCLK.Task);
|
||||
let clk = addElement(ClockElement,[]);
|
||||
logicEngine.Scheduler.addTask(clk.Task);
|
||||
}, false);
|
||||
|
||||
let btn_AddPulse = document.getElementById("btn_AddPULSE");
|
||||
btn_AddPulse.addEventListener('click', function(evt) {
|
||||
let newPulse = new PulseElement(logicEngine);
|
||||
newPulse.X = logicEngine.Canvas.width/2;
|
||||
newPulse.Y = logicEngine.Canvas.height/2;
|
||||
logicEngine.ActiveContainer.AddElement(newPulse);
|
||||
logicEngine.Scheduler.addTask(newPulse.Task);
|
||||
let pulse = addElement(PulseElement,[]);
|
||||
logicEngine.Scheduler.addTask(pulse.Task);
|
||||
}, false);
|
||||
|
||||
function CheckForWelcomeCookie() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user