您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tints every other floor tile a slightly different shade.| Greasemonkey 4.1: ✕ Tampermonkey 4.4: ✔
// ==UserScript== // @name TagPro Tile Pattern // @namespace http://www.reddit.com/u/snaps_/ // @description Tints every other floor tile a slightly different shade.| Greasemonkey 4.1: ✕ Tampermonkey 4.4: ✔ // @include http://tagpro-*.koalabeast.com:* // @include http://tangent.jukejuice.com:* // @include http://tagpro-test.koalabeast.com/game // @include http://*.newcompte.fr:* // @license GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html // @author snaps // @version 0.1.2 // ==/UserScript== /* User-Defined Variables */ // The color to tint the floor tiles. var TINT_COLOR = "#663300"; // How much to tint the floor tiles. Should be a number from 0 to 1. // In practice try values from 0.05 to 1 in increments of .2 to start, // then smaller amounts to hone in on what you like. var OPACITY = 0.05; /* End of User-Defined Variables */ /** * Executes `fn` when the relevant parts of the `tagpro` object have * been initialized. * @param {Function} fn - The function to execute. */ function waitForInitialized(fn) { if (!tagpro || !tagpro.tiles || !tagpro.tiles.draw || !tagpro.renderer) { setTimeout(function() { waitForInitialized(fn); }, 10); } else { // Only override if we load early enough. if (!tagpro.renderer.layers.backgroundDrawn) { fn(); } } } waitForInitialized(function() { var stdDraw = tagpro.tiles.draw; // ids of the tiles we're interested in changing. var floorTiles = [2, 11, 12, 17, 18]; var prefix = "__tinted__"; /** * Set tint of a given canvas element. * @param {HTMLElement} image - Canvas element holding the image to tint. * @param {string} [color="#000000"] - Color string to tint the tiles, like "#FF0000". * @param {number} [opacity="0.01"] - How much to preserve the original image. */ var setTint = function(image, color, opacity) { // Adapted from: http://stackoverflow.com/a/4231508/1698058 var tint = document.createElement("canvas"); tint.width = image.width; tint.height = image.height; var tintCtx = tint.getContext("2d"); tintCtx.fillStyle = color || "#000000"; tintCtx.fillRect(0, 0, tint.width, tint.height); tintCtx.globalCompositeOperation = "destination-atop"; tintCtx.drawImage(image, 0, 0); var imageCtx = image.getContext("2d"); imageCtx.globalAlpha = opacity || 0.01; imageCtx.drawImage(tint, 0, 0); } /** * Creates the tinted texture for the tile of the given id and sets * the relevant values such that the returned value will function in * the original `tagpro.tiles.draw` function. * @param {(number|string)} tileId - The original id of the tile to set information for. * @return {string} - The new id to use for the tile. */ var setTintedTexture = function(tileId) { var originalTileId = tileId; tileId = prefix + originalTileId; if (!tagpro.tiles[tileId] || !PIXI.TextureCache[tileId]) { var tile = tagpro.tiles[originalTileId]; tagpro.tiles[tileId] = tile; var spread = tile.spread || 0; var elt = document.createElement("canvas"); elt.width = tile.size || 40; elt.height = tile.size || 40; var ctx = elt.getContext("2d"); var sx = tile.x * 40 - spread; var sy = tile.y * 40 - spread; var size = (tile.size || 40) + spread * 2; ctx.drawImage(tagpro.tiles.image, sx, sy, size, size, 0, 0, size, size); setTint(elt, TINT_COLOR, OPACITY); PIXI.TextureCache[tileId] = PIXI.Texture.fromCanvas(elt); } return tileId; } // Override `tagpro.tiles.draw`. tagpro.tiles.draw = function() { // Only make changes when drawing background tiles. if (tagpro.tiles.draw.caller === tagpro.tiles.drawLayers) { var loc = arguments[2]; var floorTile = floorTiles.indexOf(arguments[1]) !== -1; if (loc && !(typeof arguments[1] == "object") && floorTile) { var arrayLoc = { x: Math.floor(loc.x / 40), y: Math.floor(loc.y / 40) }; if ((arrayLoc.x % 2 == 0 && arrayLoc.y % 2 == 0) || (arrayLoc.x % 2 == 1 && arrayLoc.y % 2 == 1)) { arguments[1] = setTintedTexture(arguments[1]); } } } return stdDraw.apply(null, arguments); } });