// ==UserScript==
// @name OWOP Brush Tool
// @version 1.0
// @namespace none
// @author jau
// @description Brush Tool
// @include https://ourworldofpixels.com/*
// @run-at document-end
// @grant none
// ==/UserScript==
var mindr = 1;
var maxdr = 10000;
var brDiameter = 2;
OWOP.tool.addToolObject(new OWOP.tool.class('Brush', OWOP.cursors.brush, OWOP.fx.player.RECT_SELECT_ALIGNED(brDiameter), false, function (tool) {
tool.brDiameter = 2; //Declaring variable for brush diameter.
var lastX, lastY;
document.addEventListener("keydown", rainbowToggle, false);
var rainbowPressed = null;
function rainbowToggle(e) {
/* tab key pressed to toggle rainbow mode */
if (e.keyCode == 9) {
rainbowPressed = !rainbowPressed;
}
}
tool.setEvent('mousedown mousemove', function (mouse, event) {
var usedButtons = 3; /* Left and right mouse buttons are always used... */
var color = mouse.buttons === 2 ? [255, 255, 255] : OWOP.player.selectedColor; /* White color if right clicking */
switch (OWOP.mouse.buttons) {
case 1:
case 2:
if (!lastX || !lastY) {
lastX = OWOP.mouse.tileX;
lastY = OWOP.mouse.tileY;
}
(0, OWOP.util.line)(lastX, lastY, OWOP.mouse.tileX, OWOP.mouse.tileY, 1, function (x, y) {
var pixel = OWOP.world.getPixel(x, y);
var R = Math.floor(tool.brDiameter / 2);
if (pixel !== null) {
if (!rainbowPressed && mouse.buttons == 1) {
for(var ix = 0; ix < tool.brDiameter; ix++) {
for(var iy = 0; iy < tool.brDiameter; iy++) {
OWOP.world.setPixel(x + ix - R, y + iy - R, color);
}
}
} else if (rainbowPressed && mouse.buttons == 1) {
for(var ix = 0; ix < tool.brDiameter; ix++) {
for(var iy = 0; iy < tool.brDiameter; iy++) {
OWOP.world.setPixel(x + ix - R, y + iy - R, [(Math.random()*255)|0, (Math.random()*255)|0, (Math.random()*255)|0]);
}
}
} else if (mouse.buttons == 2) {
for(var ix = 0; ix < tool.brDiameter; ix++) {
for(var iy = 0; iy < tool.brDiameter; iy++) {
OWOP.world.setPixel(x + ix - R, y + iy - R, [255,255,255]);
}
}
}
}});
lastX = OWOP.mouse.tileX;
lastY = OWOP.mouse.tileY;
break;
case 4:
if (event.ctrlKey) {
usedButtons |= 4;
var color = OWOP.world.getPixel(mouse.tileX, mouse.tileY);
if (color) {
OWOP.player.selectedColor = color;
}
}
break;
}
return usedButtons;
});
tool.setEvent('mouseup', function (mouse) {
lastX = null;
lastY = null;
});
tool.setFxRenderer(function (fx, ctx, time) { //BAN THONCC
var x = fx.extra.player.x;
var y = fx.extra.player.y;
var diameter = tool.brDiameter
var fxx = (Math.floor(x / 16) - Math.floor(diameter / 2) - OWOP.camera.x) * OWOP.camera.zoom;
var fxy = (Math.floor(y / 16) - Math.floor(diameter / 2) - OWOP.camera.y) * OWOP.camera.zoom;
ctx.globalAlpha = 0.8;
ctx.strokeStyle = fx.extra.player.htmlRgb;
ctx.strokeRect(fxx, fxy, OWOP.camera.zoom * diameter, OWOP.camera.zoom * diameter);
return 1; /* Rendering finished (won't change on next frame) */
});
}));
var brDiamWinn = OWOP.windowSys.addWindow(new OWOP.windowSys.class.window('Brush diameter.', {}, function(win) {
win.container.title = ' ';
win.container.style.height = '16px';
win.container.style.overflow = 'hidden';
var brDiamElmm = OWOP.util.mkHTML('span', { innerHTML: OWOP.tool.allTools.brush.brDiameter });
win.addObj(brDiamElmm);
var Rbarr = OWOP.util.mkHTML('input', {
type: 'range', style: '-moz-appearance:none;-webkit-appearance:none;appearance:none;height:6px;outline:none;float:right;',
min: mindr, max: maxdr,
value: OWOP.tool.allTools.brush.brDiameter,
oninput: function() {
OWOP.tool.allTools.brush.brDiameter = this.value;
brDiamElmm.innerHTML = this.value;
}, ondblclick:function() {
this.value = 1;
this.onchange();
}
});
win.addObj(Rbarr);
}).move(800, 32));