HumanBreak/src/plugin/pop.ts

65 lines
1.6 KiB
TypeScript
Raw Normal View History

2022-11-13 18:02:05 +08:00
// 示例插件:文字弹出
let pop: any[] = [];
2022-12-31 21:44:33 +08:00
let time = 0;
2022-11-13 18:02:05 +08:00
// 插件必须有默认导出并返回所有外部会用到的函数所有返回的函数会被转发到core上
// 并且在这里面完成所有的初始化,函数外部也可以进行初始化,但完全不能涉及到样板相关内容
export default function init() {
if (!main.replayChecking)
core.registerAnimationFrame('pop', true, popValue);
// 返回值是所有外部可见内容
return { addPop, pop };
}
/**
*
*/
2022-12-31 21:44:33 +08:00
function popValue(t: number) {
if (t - time < 15) return;
2022-12-30 11:06:46 +08:00
let ctx = core.getContextByName('pop')!;
2022-11-13 18:02:05 +08:00
if (!ctx) ctx = core.createCanvas('pop', 0, 0, core._PX_, core._PY_, 90);
core.clearMap(ctx);
let count = 0;
pop.forEach(function (one) {
// 由frame计算出dy
const dy = 6 - one.frame * 0.2;
const dx = 1;
one.py -= dy;
one.px += dx;
one.frame++;
// 绘制
if (one.frame >= 60) core.setAlpha(ctx, 3 - one.frame / 30);
else core.setAlpha(ctx, 1);
2022-12-31 18:24:21 +08:00
core.fillBoldText(
ctx,
one.value,
one.px,
one.py,
'#f22',
'#000',
'24px normal'
);
2022-11-13 18:02:05 +08:00
if (one.frame >= 90) count++;
});
if (count > 0) pop.splice(0, count);
2022-12-31 21:44:33 +08:00
time = t;
2022-11-13 18:02:05 +08:00
}
/**
*
* @param px
* @param py
* @param value
*/
function addPop(px: number, py: number, value: string) {
var data = {
px: px,
py: py,
value: value,
frame: 0
};
pop.push(data);
}