Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Very useful copy tool, allows you to easily copy and paste art. This makes moving art a lot easier.
- By yours truly, DayDun.
- P.S. only admins can use it lol.
- */
- OWOP.tool.addToolObject(new OWOP.tool.class("Copy", OWOP.cursors.select, OWOP.fx.player.NONE, OWOP.RANK.NONE, function (tool) {
- function drawText(ctx, str, x, y, centered) {
- ctx.strokeStyle = "#000000", ctx.fillStyle = "#FFFFFF", ctx.lineWidth = 2.5, ctx.globalAlpha = 0.5;
- if (centered) {
- x -= ctx.measureText(str).width >> 1;
- }
- ctx.strokeText(str, x, y);
- ctx.globalAlpha = 1;
- ctx.fillText(str, x, y);
- }
- tool.setFxRenderer(function (fx, ctx, time) {
- if (!fx.extra.isLocalPlayer) return 1;
- var x = fx.extra.player.x;
- var y = fx.extra.player.y;
- var fxx = (Math.floor(x / 16) - OWOP.camera.x) * OWOP.camera.zoom;
- var fxy = (Math.floor(y / 16) - OWOP.camera.y) * OWOP.camera.zoom;
- var oldlinew = ctx.lineWidth;
- ctx.lineWidth = 1;
- if (tool.extra.end) {
- var s = tool.extra.start;
- var e = tool.extra.end;
- var x = (s[0] - OWOP.camera.x) * OWOP.camera.zoom + 0.5;
- var y = (s[1] - OWOP.camera.y) * OWOP.camera.zoom + 0.5;
- var w = e[0] - s[0];
- var h = e[1] - s[1];
- ctx.beginPath();
- ctx.rect(x, y, w * OWOP.camera.zoom, h * OWOP.camera.zoom);
- ctx.globalAlpha = 1;
- ctx.strokeStyle = "#FFFFFF";
- ctx.stroke();
- ctx.setLineDash([3, 4]);
- ctx.strokeStyle = "#000000";
- ctx.stroke();
- ctx.globalAlpha = 0.25 + Math.sin(time / 500) / 4;
- ctx.fillStyle = OWOP.renderer.patterns.unloaded;
- ctx.fill();
- ctx.setLineDash([]);
- var oldfont = ctx.font;
- ctx.font = "16px sans-serif";
- var txt = (!tool.extra.clicking ? "Right click to copy " : "") + '(' + Math.abs(w) + 'x' + Math.abs(h) + ')';
- var txtx = window.innerWidth >> 1;
- var txty = window.innerHeight >> 1;
- txtx = Math.max(x, Math.min(txtx, x + w * OWOP.camera.zoom));
- txty = Math.max(y, Math.min(txty, y + h * OWOP.camera.zoom));
- drawText(ctx, txt, txtx, txty, true);
- ctx.font = oldfont;
- ctx.lineWidth = oldlinew;
- return 0;
- } else {
- ctx.beginPath();
- ctx.moveTo(0, fxy + 0.5);
- ctx.lineTo(window.innerWidth, fxy + 0.5);
- ctx.moveTo(fxx + 0.5, 0);
- ctx.lineTo(fxx + 0.5, window.innerHeight);
- //ctx.lineWidth = 1;
- ctx.globalAlpha = 1;
- ctx.strokeStyle = "#FFFFFF";
- ctx.stroke();
- ctx.setLineDash([3]);
- ctx.strokeStyle = "#000000";
- ctx.stroke();
- ctx.setLineDash([]);
- ctx.lineWidth = oldlinew;
- return 1;
- }
- });
- tool.extra.start = null;
- tool.extra.end = null;
- tool.extra.clicking = false;
- tool.setEvent('mousedown', function (mouse, event) {
- var s = tool.extra.start;
- var e = tool.extra.end;
- var isInside = function isInside() {
- return mouse.tileX >= s[0] && mouse.tileX < e[0] && mouse.tileY >= s[1] && mouse.tileY < e[1];
- };
- if (mouse.buttons === 1 && !tool.extra.end) {
- tool.extra.start = [mouse.tileX, mouse.tileY];
- tool.extra.clicking = true;
- tool.setEvent('mousemove', function (mouse, event) {
- if (tool.extra.start && mouse.buttons === 1) {
- tool.extra.end = [mouse.tileX, mouse.tileY];
- return 1;
- }
- });
- var finish = function finish() {
- tool.setEvent('mousemove mouseup deselect', null);
- tool.extra.clicking = false;
- var s = tool.extra.start;
- var e = tool.extra.end;
- if (e) {
- if (s[0] === e[0] || s[1] === e[1]) {
- tool.extra.start = null;
- tool.extra.end = null;
- }
- if (s[0] > e[0]) {
- var tmp = e[0];
- e[0] = s[0];
- s[0] = tmp;
- }
- if (s[1] > e[1]) {
- var tmp = e[1];
- e[1] = s[1];
- s[1] = tmp;
- }
- }
- OWOP.renderer.render(OWOP.renderer.rendertype.FX);
- };
- tool.setEvent('deselect', finish);
- tool.setEvent('mouseup', function (mouse, event) {
- if (!(mouse.buttons & 1)) {
- finish();
- }
- });
- } else if (mouse.buttons === 1 && tool.extra.end) {
- if (isInside()) {
- var offx = mouse.tileX;
- var offy = mouse.tileY;
- tool.setEvent('mousemove', function (mouse, event) {
- var dx = mouse.tileX - offx;
- var dy = mouse.tileY - offy;
- tool.extra.start = [s[0] + dx, s[1] + dy];
- tool.extra.end = [e[0] + dx, e[1] + dy];
- });
- var end = function end() {
- tool.setEvent('mouseup deselect mousemove', null);
- };
- tool.setEvent('deselect', end);
- tool.setEvent('mouseup', function (mouse, event) {
- if (!(mouse.buttons & 1)) {
- end();
- }
- });
- } else {
- tool.extra.start = null;
- tool.extra.end = null;
- }
- } else if (mouse.buttons === 2 && tool.extra.end && isInside()) {
- tool.extra.start = null;
- tool.extra.end = null;
- var x = s[0];
- var y = s[1];
- var w = e[0] - s[0];
- var h = e[1] - s[1];
- var c = document.createElement('canvas');
- c.width = w;
- c.height = h;
- var ctx = c.getContext('2d');
- var d = ctx.createImageData(w, h);
- for (var i = y; i < y + h; i++) {
- for (var j = x; j < x + w; j++) {
- var pix = OWOP.world.getPixel(j, i);
- if (!pix) continue;
- d.data[4 * ((i - y) * w + (j - x))] = pix[0];
- d.data[4 * ((i - y) * w + (j - x)) + 1] = pix[1];
- d.data[4 * ((i - y) * w + (j - x)) + 2] = pix[2];
- d.data[4 * ((i - y) * w + (j - x)) + 3] = 255;
- }
- }
- ctx.putImageData(d, 0, 0);
- var paste = OWOP.tool.allTools.paste;
- paste.extra.canvas = c;
- var oldSelect = paste.events.select;
- paste.events.select = function() {
- paste.events.select = oldSelect;
- };
- OWOP.player.tool = "paste";
- }
- });
- }));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement