88 lines
3.3 KiB
JavaScript
88 lines
3.3 KiB
JavaScript
// RedBirdly's mod to draw lines between transmitters/receivers
|
|
// logicgates.js or wifi.js required
|
|
|
|
let logicReceivers = [];
|
|
let logicTransmitters = [];
|
|
let receivers = [];
|
|
let transmitters = [];
|
|
|
|
function updateLogicLists() {
|
|
receivers = [];
|
|
transmitters = [];
|
|
logicReceivers = [];
|
|
logicTransmitters = [];
|
|
|
|
for (let i = 0; i < currentPixels.length; i++) {
|
|
const pixel = currentPixels[i];
|
|
if (pixel.element === "logic_receiver") {
|
|
logicReceivers.push(pixel);
|
|
} else if (pixel.element === "logic_transmitter") {
|
|
logicTransmitters.push(pixel);
|
|
} else if (pixel.element === "receiver") {
|
|
receivers.push(pixel);
|
|
} else if (pixel.element === "transmitter") {
|
|
transmitters.push(pixel);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Function to draw lines between linked transmitters and receivers
|
|
function drawLinks() {
|
|
// Iterate through transmitters and receivers to draw lines for linked channels
|
|
for (const transmitter of logicTransmitters) {
|
|
for (const receiver of logicReceivers) {
|
|
if (transmitter.channel === receiver.channel) {
|
|
ctx.beginPath();
|
|
ctx.moveTo(transmitter.x * pixelSize + pixelSizeHalf, transmitter.y * pixelSize + pixelSizeHalf);
|
|
ctx.lineTo(receiver.x * pixelSize + pixelSizeHalf, receiver.y * pixelSize + pixelSizeHalf);
|
|
ctx.strokeStyle = "RGBA(255,255,255,0.2)";
|
|
|
|
const neighbors = [
|
|
{ x: transmitter.x, y: transmitter.y - 1 }, // Top
|
|
{ x: transmitter.x, y: transmitter.y + 1 }, // Bottom
|
|
{ x: transmitter.x - 1, y: transmitter.y }, // Left
|
|
{ x: transmitter.x + 1, y: transmitter.y } // Right
|
|
];
|
|
|
|
let highlight = false;
|
|
for (const neighbor of neighbors) {
|
|
if (
|
|
neighbor.x >= 0 && neighbor.x < width &&
|
|
neighbor.y >= 0 && neighbor.y < height
|
|
) {
|
|
const neighborPixel = pixelMap[neighbor.x][neighbor.y];
|
|
if (neighborPixel && neighborPixel.lstate > 0) {
|
|
highlight = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (highlight) {
|
|
ctx.strokeStyle = "RGBA(255,200,0,0.4)";
|
|
}
|
|
|
|
ctx.lineWidth = 2;
|
|
ctx.stroke();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Iterate through transmitters and receivers to draw lines for linked channels
|
|
for (const transmitter of transmitters) {
|
|
for (const receiver of receivers) {
|
|
if (transmitter._channel === receiver._channel) {
|
|
ctx.beginPath();
|
|
ctx.moveTo(transmitter.x * pixelSize + pixelSizeHalf, transmitter.y * pixelSize + pixelSizeHalf);
|
|
ctx.lineTo(receiver.x * pixelSize + pixelSizeHalf, receiver.y * pixelSize + pixelSizeHalf);
|
|
ctx.strokeStyle = "RGBA(0,0,255,0.2)";
|
|
ctx.lineWidth = 2;
|
|
ctx.stroke();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
renderPostPixel(updateLogicLists);
|
|
renderPostPixel(drawLinks);
|