UNPKG

steam-family-bot-core

Version:

一个用于新版 Steam 家庭的库存监控 Bot 插件

203 lines 7.74 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.layoutItems = void 0; const echarts = __importStar(require("echarts")); require("./WordCloudView"); require("./WordCloudSeries"); const wc_1 = __importDefault(require("./wc")); const canvas_1 = require("../canvas"); // https://github.com/timdream/wordcloud2.js/blob/c236bee60436e048949f9becc4f0f67bd832dc5c/index.js#L233 function updateCanvasMask(maskCanvas) { var ctx = maskCanvas.getContext('2d'); var imageData = ctx.getImageData(0, 0, maskCanvas.width, maskCanvas.height); var newImageData = ctx.createImageData(imageData); var toneSum = 0; var toneCnt = 0; for (var i = 0; i < imageData.data.length; i += 4) { var alpha = imageData.data[i + 3]; if (alpha > 128) { var tone = imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2]; toneSum += tone; ++toneCnt; } } var threshold = toneSum / toneCnt; for (var i = 0; i < imageData.data.length; i += 4) { var tone = imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2]; var alpha = imageData.data[i + 3]; if (alpha < 128 || tone > threshold) { // Area not to draw newImageData.data[i] = 0; newImageData.data[i + 1] = 0; newImageData.data[i + 2] = 0; newImageData.data[i + 3] = 0; } else { // Area to draw // The color must be same with backgroundColor newImageData.data[i] = 255; newImageData.data[i + 1] = 255; newImageData.data[i + 2] = 255; newImageData.data[i + 3] = 255; } } ctx.putImageData(newImageData, 0, 0); } function adjustRectAspect(gridRect, aspect) { // var outerWidth = gridRect.width + gridRect.x * 2; // var outerHeight = gridRect.height + gridRect.y * 2; var width = gridRect.width; var height = gridRect.height; if (width > height * aspect) { gridRect.x += (width - height * aspect) / 2; gridRect.width = height * aspect; } else { gridRect.y += (height - width / aspect) / 2; gridRect.height = width / aspect; } } echarts.registerLayout(function (ecModel, api) { ecModel.eachSeriesByType('wordCloud', function (seriesModel) { }); }); echarts.registerPreprocessor(function (option) { var series = (option || {}).series; !echarts.util.isArray(series) && (series = series ? [series] : []); var compats = ['shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY']; echarts.util.each(series, function (seriesItem) { if (seriesItem && seriesItem.type === 'wordCloud') { var textStyle = seriesItem.textStyle || {}; compatTextStyle(textStyle.normal); compatTextStyle(textStyle.emphasis); } }); function compatTextStyle(textStyle) { textStyle && echarts.util.each(compats, function (key) { if (textStyle.hasOwnProperty(key)) { textStyle['text' + echarts.format.capitalFirst(key)] = textStyle[key]; } }); } }); const layoutItems = (seriesModel, api) => { var gridRect = echarts.helper.getLayoutRect(seriesModel.getBoxLayoutParams(), { width: api.getWidth(), height: api.getHeight(), }); var keepAspect = seriesModel.get('keepAspect'); var maskImage = seriesModel.get('maskImage'); var ratio = maskImage ? maskImage.width / maskImage.height : 1; keepAspect && adjustRectAspect(gridRect, ratio); var data = seriesModel.getData(); var canvas = canvas_1.canvasHelper.createCanvas(800, 800); const canvasListener = {}; canvas.addEventListener = function (name, cb) { canvasListener[name] = cb; }; canvas.removeEventListener = function (name, cb) { canvasListener[name] = null; }; canvas.dispatchEvent = (e) => { let cb = canvasListener[e.type]; if (cb) { cb(e); } }; canvas.addEventListener('wordclouddrawn', onWordCloudDrawn); canvas.width = gridRect.width; canvas.height = gridRect.height; var ctx = canvas.getContext('2d'); if (maskImage) { try { ctx.drawImage(maskImage, 0, 0, canvas.width, canvas.height); updateCanvasMask(canvas); } catch (e) { console.error('Invalid mask image'); console.error(e.toString()); } } var sizeRange = seriesModel.get('sizeRange'); var rotationRange = seriesModel.get('rotationRange'); var valueExtent = data.getDataExtent('value'); var DEGREE_TO_RAD = Math.PI / 180; var gridSize = seriesModel.get('gridSize'); // const wc = wordCloudLayoutHelper( canvas) const list = data .mapArray('value', function (value, idx) { var itemModel = data.getItemModel(idx); return [ data.getName(idx), itemModel.get('textStyle.fontSize', true) || echarts.number.linearMap(value, valueExtent, sizeRange), idx, ]; }) .sort(function (a, b) { // Sort from large to small in case there is no more room for more words return b[1] - a[1]; }); (0, wc_1.default)(canvas, { list, gridSize: gridSize, ellipticity: gridRect.height / gridRect.width, minRotation: rotationRange[0] * DEGREE_TO_RAD, maxRotation: rotationRange[1] * DEGREE_TO_RAD, clearCanvas: !maskImage, rotateRatio: 1, rotationStep: seriesModel.get('rotationStep') * DEGREE_TO_RAD, drawOutOfBound: seriesModel.get('drawOutOfBound'), shrinkToFit: seriesModel.get('shrinkToFit'), shuffle: false, shape: seriesModel.get('shape'), }); function onWordCloudDrawn(e) { var item = e.detail.item; if (e.detail.drawn && seriesModel.ondraw) { const drawn = e.detail.drawn; const d = { ...drawn, gx: drawn.gx + gridRect.x / gridSize, gy: drawn.gy + gridRect.y / gridSize, }; seriesModel.ondraw(item[0], item[1], item[2], d); } } if (seriesModel.layoutInstance) { // Dispose previous seriesModel.layoutInstance.dispose(); } seriesModel.layoutInstance = { ondraw: null, dispose: function () { }, }; }; exports.layoutItems = layoutItems; //# sourceMappingURL=wordCloud.js.map