build all packages

This commit is contained in:
zhw2590582 committed 2019-05-03 20:46:24 +08:00
1 parent df3f633e78
commit 339996a873
26 files changed
+329 -317

No files matched your search

@@ -1,5 +1,18 @@
function getDanmuTopByDiff(danmus) {
import { getRect } from './utils';
function calculatedTop(danmus) {
let top = 0;
const topMap = {};
for (let index = 0; index < danmus.length; index += 1) {
const item = danmus[index];
if (topMap[item.top]) {
topMap[item.top].push(item);
} else {
topMap[item.top] = [item];
}
}
const topMapKeys = Object.keys(topMap);
let maxDiff = 0;
for (let index = 1; index < danmus.length; index += 1) {
const item = danmus[index];
@@ -11,52 +24,82 @@ function getDanmuTopByDiff(danmus) {
maxDiff = diff;
}
}
return top;
}
function getDanmuTopBySparse(danmus) {
const topMap = {};
for (let index = 0; index < danmus.length; index += 1) {
const item = danmus[index];
if (topMap[item.top]) {
topMap[item.top].push(item);
} else {
topMap[item.top] = [item];
}
}
if (top === 0) {
let maxRight = 0;
for (let index = 0; index < topMapKeys.length; index += 1) {
let minRight = danmus[0].width;
const topKey = topMapKeys[index];
const danmuArr = topMap[topKey];
for (let index = 0; index < danmuArr.length; index += 1) {
const danmu = danmuArr[index];
if (danmu.right < minRight) {
minRight = danmu.right;
}
}
let maxRight = 0;
let top = 0;
const topMapKeys = Object.keys(topMap);
for (let index = 0; index < topMapKeys.length; index += 1) {
let minRight = danmus[0].width;
const topKey = topMapKeys[index];
const danmuArr = topMap[topKey];
for (let index = 0; index < danmuArr.length; index += 1) {
const danmu = danmuArr[index];
if (danmu.right < minRight) {
minRight = danmu.right;
if (minRight > maxRight) {
maxRight = minRight;
[{ top }] = danmuArr;
}
}
if (minRight > maxRight) {
maxRight = minRight;
[{ top }] = danmuArr;
}
}
if (top === 0) {
const randomKey = Math.floor(Math.random() * (2 - topMapKeys.length) + topMapKeys.length - 1);
top = topMapKeys[randomKey];
[top] = topMapKeys
.filter((item, index) => {
return index !== 0 && index !== topMapKeys.length - 1;
})
.sort((prev, next) => {
return topMap[prev].length - topMap[next].length;
});
}
return top;
}
export default function getDanmuTop(danmus) {
let top = getDanmuTopByDiff(danmus);
if (top === 0) {
top = getDanmuTopBySparse(danmus);
export default function getDanmuTop(ins, danmu) {
const [marginTop, marginBottom] = ins.option.margin;
const playerData = getRect(ins.art.template.$player);
const danmus = ins.queue
.filter(
item =>
item.mode === danmu.mode &&
item.$state === 'emit' &&
item.$ref &&
item.$ref.style.fontSize === danmu.$ref.style.fontSize,
)
.map(item => {
const danmuData = getRect(item.$ref);
const { width, height } = danmuData;
const top = danmuData.top - playerData.top;
const left = danmuData.left - playerData.left;
const right = playerData.width - left - width;
return { top, left, height, width, right, item };
})
.sort((prev, next) => {
return prev.top - next.top;
});
if (danmus.length === 0) {
return marginTop;
}
return top;
danmus.unshift({
top: 0,
left: 0,
right: 0,
height: marginTop,
width: playerData.width,
});
danmus.push({
top: playerData.height - marginBottom,
left: 0,
right: 0,
height: marginBottom,
width: playerData.width,
});
return calculatedTop(danmus);
}