xxxxxxxxxx
206
let grid;
let slider;
let defaultFontSize;
let connector = "silo/empty"
function setup() {
let canvas = createCanvas(600, 750);
canvas.parent('sketch-container');
canvas.elt.oncontextmenu = () => {
return false;
};
slider = createSlider(1, 20, 5, 1);
slider.position(10, height + 40);
slider.input(changeGridSize);
checkboxSpoiler = createCheckbox(" SPOILER");
checkboxSpoiler.position(0,height+20);
defaultFontSize = 12;
grid = createEmptyGrid(slider.value());
}
function draw() {
background(255);
textAlign(LEFT);
fill(0);
textSize(15);
if (checkboxSpoiler.checked()){
connector = "conductor/silo\n/empty";
text(" White: conductor/silo/empty, Left click: RED preheater\n Right click: BLACK Converter, Left click on preheater-> empty\n Right click on converter->convert2 (not calculated as output)",0, width+40)
}else{
connector = "silo/empty";
text(" White: silo/empty, Left click: RED preheater\n Right click: BLACK Converter, Left click on preheater-> empty\n Right click on converter->convert2 (not calculated as output)",0, width+40)
}
drawGrid();
checkConnections();
}
function createEmptyGrid(size) {
let newGrid = [];
for (let i = 0; i < size; i++) {
let row = [];
for (let j = 0; j < size; j++) {
row.push(connector);
}
newGrid.push(row);
}
return newGrid;
}
function drawGrid() {
let cellSize = width / grid.length;
for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[i].length; j++) {
if(grid[i][j] != "preheater" && grid[i][j] != "converter" && grid[i][j] != "converter2" && grid[i][j] != connector){
grid[i][j] = connector
}
let x = i * cellSize;
let y = j * cellSize;
stroke(0);
strokeWeight(1);
let cellColor = getColor(grid[i][j]);
fill(cellColor);
rect(x, y, cellSize, cellSize);
textAlign(CENTER, CENTER);
fill(getComplementaryColor(cellColor));
let fontSize = cellSize * 0.15; // A betűméret arányosan változik a cella méretével
textSize(fontSize);
text(grid[i][j], x + cellSize / 2, y + cellSize / 2);
}
}
}
function getColor(type) {
switch (type) {
case "preheater":
return color(255, 0, 0); // piros
case "converter":
return color(0); // fekete
case "converter2":
return color(50, 50, 50); // fekete
default:
return color(255); // fehér
}
}
function getComplementaryColor(inputColor) {
return color(255 - red(inputColor), 255 - green(inputColor), 255 - blue(inputColor));
}
function mousePressed() {
let cellSize = width / grid.length;
let i = floor(mouseX / cellSize);
let j = floor(mouseY / cellSize);
if(mouseY>width){
return;
}
if (mouseButton === LEFT) {
if (grid[i][j] == "preheater"){
grid[i][j] = connector;
}else{
grid[i][j] = "preheater";
}
} else if (mouseButton === RIGHT) {
if (grid[i][j] == "converter"){
grid[i][j] = "converter2";
}else{
grid[i][j] = "converter";
}
}
}
function checkConnections() {
totalMultiplier = 0.0;
totalConverter = 0;
totalPreheater = 0;
let notconnectedstring = "-"
for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[i].length; j++) {
let connected = 0;
for (let x = i - 1; x <= i + 1; x++) {
for (let y = j - 1; y <= j + 1; y++) {
if(i == 0 || j == 0 || i == grid[i].length-1 || j == grid[i].length-1){
connected = 1;
break;
}
if (x >= 0 && x < grid[i].length && y >= 0 && y <grid[i].length && (x !== i || y !== j)) {
if (grid[x][y] === connector) {
connected = 1;
break;
}
}
}}
if(!connected){
notconnectedstring +="[" + i + "," + j +"], ";
stroke(0,255,0)
strokeWeight(3);
noFill()
rect(i*width / grid.length, j*width / grid.length, width / grid.length, width / grid.length);
stroke(0)
strokeWeight(1);
}
if (grid[i][j] === "preheater") {
totalPreheater += 1;
}
if (grid[i][j] === "converter") {
totalMultiplier += 1;
totalConverter +=1;
for (let x = i - 1; x <= i + 1; x++) {
for (let y = j - 1; y <= j + 1; y++) {
if (x >= 0 && x < grid.length && y >= 0 && y < grid[i].length && (x !== i || y !== j)) {
if (grid[x][y] === "preheater") {
totalMultiplier += 0.5;
for (let k = x - 1; k <= x + 1; k++) {
for (let l = y - 1; l <= y + 1; l++) {
if (k >= 0 && k < grid.length && l >= 0 && l < grid[i].length && (k !== x || l !== y)) {
if (grid[k][l] === "converter" || grid[k][l] === "converter2") {
totalMultiplier += 0.3125;
}
}
}}
}
}
}
}
}
}
}
textAlign(LEFT)
fill(0)
textSize(15)
text(notconnectedstring + " cant be connected", 0, height-10)
text("Total converter Value:" + totalMultiplier + ". Converter count: " + totalConverter + ". Value/converter:" + totalMultiplier/totalConverter + ".\nTotal Preheater: " + totalPreheater + ". Value/preheater: " + totalMultiplier/totalPreheater, 0, height-50)
}
function changeGridSize() {
let newSize = slider.value();
grid = createEmptyGrid(newSize);
}