mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-03-04 03:37:07 +08:00
65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
// 示例插件:文字弹出
|
||
|
||
let pop: any[] = [];
|
||
|
||
let time = 0;
|
||
|
||
// 插件必须有默认导出,并返回所有外部会用到的函数,所有返回的函数会被转发到core上
|
||
// 并且在这里面完成所有的初始化,函数外部也可以进行初始化,但完全不能涉及到样板相关内容
|
||
export default function init() {
|
||
if (!main.replayChecking)
|
||
core.registerAnimationFrame('pop', true, popValue);
|
||
// 返回值是所有外部可见内容
|
||
return { addPop, pop };
|
||
}
|
||
|
||
/**
|
||
* 弹出文字
|
||
*/
|
||
function popValue(t: number) {
|
||
if (t - time < 15) return;
|
||
let ctx = core.getContextByName('pop')!;
|
||
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);
|
||
core.fillBoldText(
|
||
ctx,
|
||
one.value,
|
||
one.px,
|
||
one.py,
|
||
'#f22',
|
||
'#000',
|
||
'24px normal'
|
||
);
|
||
if (one.frame >= 90) count++;
|
||
});
|
||
if (count > 0) pop.splice(0, count);
|
||
time = t;
|
||
}
|
||
|
||
/**
|
||
* 添加弹出文字
|
||
* @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);
|
||
}
|