0.2.10: Better element placement, newly placed elements selected

This commit is contained in:
MatCat 2021-02-23 00:46:04 -08:00
parent 08b229814f
commit 59386209fe
3 changed files with 58 additions and 50 deletions

View File

@ -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

View File

@ -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();
}
}

View File

@ -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() {