logic mod + fixes

This commit is contained in:
JustAGenericUsername 2024-01-24 12:51:15 -05:00
parent 3154ad5859
commit 417c17622e
2 changed files with 294 additions and 1 deletions

291
mods/logicgates.js Normal file
View File

@ -0,0 +1,291 @@
elements.output = {
color: "#601616",
category: "logic",
state: "solid",
behavior: behaviors.WALL,
conduct: 1,
tick: function(pixel){
for (var i = 0; i < adjacentCoords.length; i++) {
var coord = adjacentCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y,true) && pixel.charged) {
if (pixelMap[x][y].element == "logic_wire" && pixelMap[x][y].lstate == 0){
if (pixelMap[x][y].lastUpdate == pixelTicks){
pixelMap[x][y].lstate = 2
pixelMap[x][y].color = pixelColorPick(pixelMap[x][y], "#ffe49c")
} else {
pixelMap[x][y].lstate = 1
}
}
}
}
}
}
elements.logic_wire = {
color: "#3d4d2c",
behavior: behaviors.WALL,
state: "solid",
category: "logic",
tick: function (pixel){ // -2 uncharge spread -1 uncharge buffer 0 uncharged 1 charge buffer 2 charge spread
pixel.lastUpdate = pixelTicks
if (!pixel.lstate){
pixel.lstate = 0
}
if (pixel.lstate == 0){
for (var i = 0; i < adjacentCoords.length; i++) {
var coord = adjacentCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y,true)) {
if (pixelMap[x][y].element == "output" && pixelMap[x][y].charge == 1){
pixel.lstate == 2;
pixel.color = pixelColorPick(pixel, "#ffe49c");
}
}
}
}
if (pixel.lstate == 2){
for (var i = 0; i < adjacentCoords.length; i++) {
var coord = adjacentCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y,true)) {
if (pixelMap[x][y].element == "logic_wire" && pixelMap[x][y].lstate == 0){
if (pixelMap[x][y].lastUpdate == pixelTicks){
pixelMap[x][y].lstate = 2
pixelMap[x][y].color = pixelColorPick(pixelMap[x][y], "#ffe49c")
} else {
pixelMap[x][y].lstate = 1
}
} else if (pixelMap[x][y].element == "output" && pixelMap[x][y].charged == 0){
pixel.lstate = -2
pixel.color = pixelColorPick(pixel, "#3d4d2c")
}
}
}
}
if (pixel.lstate == 1){
pixel.lstate = 2
pixel.color = pixelColorPick(pixel, "#ffe49c");
}
if (pixel.lstate == -2){
for (var i = 0; i < adjacentCoords.length; i++) {
var coord = adjacentCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y,true)) {
if (pixelMap[x][y].element == "logic_wire" && (pixelMap[x][y].lstate == 1 || pixelMap[x][y].lstate == 2)){
if (pixelMap[x][y].lastUpdate == pixelTicks){
pixelMap[x][y].lstate = -2
pixelMap[x][y].color = pixelColorPick(pixelMap[x][y], "#3d4d2c")
} else {
pixelMap[x][y].lstate = -1
}
}
}
}
pixel.lstate = 0
}
if (pixel.lstate == -1){
pixel.lstate = -2
pixel.color = pixelColorPick(pixel, "#3d4d2c");
}
}
}
function countNeighbors(){
var results = {
"charged": 0,
"uncharged": 0,
}
for (var i = 0; i < squareCoords.length; i++) {
var coord = squareCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y, true)) {
var otherPixel = pixelMap[x][y];
if (otherPixel.element == "logic_wire"){
if (otherPixel.lstate){
results.charged = results.charged + 1;
} else {
results.uncharged = results.uncharged + 1;
}
}
}
}
return results;
}
function chargeOutputs(){
for (var i = 0; i < squareCoords.length; i++) {
var coord = squareCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y, true)) {
var otherPixel = pixelMap[x][y];
if (otherPixel.element == "output"){
otherPixel.charged = 1;
}
}
}
}
function unchargeOutputs(){
for (var i = 0; i < squareCoords.length; i++) {
var coord = squareCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y, true)) {
var otherPixel = pixelMap[x][y];
if (otherPixel.element == "output"){
otherPixel.charged = 0;
}
}
}
}
elements.not_gate = {
color: "#4a1b18",
category: "logic",
state: "solid",
behavior: behaviors.WALL,
tick: function(pixel){
var countNeighborsResult = countNeighbors()
if (countNeighborsResult.charged == 0){
chargeOutputs();
} else {
unchargeOutputs();
}
}
}
elements.and_gate = {
color: "#184a23",
category: "logic",
state: "solid",
behavior: behaviors.WALL,
tick: function(pixel){
var countNeighborsResult = countNeighbors()
if (countNeighborsResult.uncharged == 0){
chargeOutputs();
} else {
unchargeOutputs();
}
}
}
elements.xor_gate = {
color: "#30184a",
category: "logic",
state: "solid",
behavior: behaviors.WALL,
tick: function(pixel){
var countNeighborsResult = countNeighbors()
if (countNeighborsResult.charged == 1){
chargeOutputs();
} else {
unchargeOutputs();
}
}
}
elements.or_gate = {
color: "#4a4018",
category: "logic",
state: "solid",
behavior: behaviors.WALL,
tick: function(pixel){
var countNeighborsResult = countNeighbors()
if (countNeighborsResult.charged >= 1){
chargeOutputs();
} else {
unchargeOutputs();
}
}
}
elements.E2L_lever = {
color: "#b2ba75",
behavior: behaviors.WALL,
state: "solid",
category: "logic",
tick: function(pixel){
if (pixel.start === pixelTicks){
pixel.cooldown = 0;
pixel.toggleMode = 1;
}
for (var i = 0; i < adjacentCoords.length; i++) {
var coord = adjacentCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y,true)) {
if ((pixelMap[x][y].charge || pixelMap[x][y].chargeCD) && pixel.cooldown == 0){
for (var i = 0; i < adjacentCoords.length; i++) {
var coord = adjacentCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y,true)) {
if (pixelMap[x][y].element == "logic_wire"){
if (pixel.toggleMode == 1){
pixelMap[x][y].lstate = 2
pixelMap[x][y].color = pixelColorPick(pixel, "#ffe49c");
} else {
pixelMap[x][y].lstate = -2
pixelMap[x][y].color = pixelColorPick(pixel, "#3d4d2c");
}
}
}
}
pixel.cooldown = 15
if (pixel.toggleMode){
pixel.toggleMode = 0;
} else {
pixel.toggleMode = 1;
}
}
}
}
if (pixel.cooldown){
pixel.cooldown = pixel.cooldown - 1
}
}
}
elements.E2L_button = {
color: "#b2ba75",
behavior: behaviors.WALL,
state: "solid",
category: "logic",
tick: function(pixel){
if (pixel.start === pixelTicks){
pixel.cooldown = 0;
pixel.toggleMode = 1;
}
for (var i = 0; i < adjacentCoords.length; i++) {
var coord = adjacentCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y,true)) {
if ((pixelMap[x][y].charge || pixelMap[x][y].chargeCD) && pixel.cooldown == 0){
for (var i = 0; i < adjacentCoords.length; i++) {
var coord = adjacentCoords[i];
var x = pixel.x+coord[0];
var y = pixel.y+coord[1];
if (!isEmpty(x,y,true)) {
if (pixelMap[x][y].element == "logic_wire"){
if (pixel.toggleMode == 1){
pixelMap[x][y].lstate = 2
pixelMap[x][y].color = pixelColorPick(pixel, "#ffe49c");
} else {
pixelMap[x][y].lstate = -2
pixelMap[x][y].color = pixelColorPick(pixel, "#3d4d2c");
}
}
}
}
pixel.cooldown = 5
if (pixel.toggleMode){
pixel.toggleMode = 0;
} else {
pixel.toggleMode = 1;
}
}
}
}
if (pixel.cooldown){
pixel.cooldown = pixel.cooldown - 1
}
}
}

View File

@ -1527,6 +1527,8 @@ elements.invisiblewall = {
} }
}, },
category: "solids", category: "solids",
movable: false,
noMix: true,
}, },
elements.bismuth = { elements.bismuth = {
color: ["#818181","#989898","#b0b0b0","#c9c9c9"], color: ["#818181","#989898","#b0b0b0","#c9c9c9"],
@ -2013,7 +2015,7 @@ elements.element_filler = {
onSelect: function() { onSelect: function() {
var answer6 = prompt("Please input the desired element of this filler. It will not work if you do multiple filter types while paused.",(elemfillerVar||undefined)); var answer6 = prompt("Please input the desired element of this filler. It will not work if you do multiple filter types while paused.",(elemfillerVar||undefined));
if (!answer6) { return } if (!answer6) { return }
elemfillerVar = answer6; elemfillerVar = mostSimilarElement(answer6);
}, },
tick: function(pixel){ tick: function(pixel){
var neighbors = 0; var neighbors = 0;