steam-family-bot-core
Version:
一个用于新版 Steam 家庭的库存监控 Bot 插件
203 lines • 7.74 kB
JavaScript
;
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