mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-10-09 20:41:47 +08:00
133 lines
3.4 KiB
TypeScript
133 lines
3.4 KiB
TypeScript
import { IStateDamageable } from '@user/data-state';
|
|
import { BarrageBoss, BossSprite, Hitbox } from './barrage';
|
|
import {
|
|
Container,
|
|
MotaRenderer,
|
|
RenderItem,
|
|
Shader,
|
|
Transform,
|
|
MotaOffscreenCanvas2D
|
|
} from '@motajs/render';
|
|
import { Pop } from '../../../client-modules/src/render/legacy/pop';
|
|
import { SplittableBall } from './palaceBossProjectile';
|
|
import { PointEffect } from '../fx/pointShader';
|
|
import { loading } from '@user/data-base';
|
|
import { clip } from '@user/legacy-plugin-data';
|
|
import { LayerGroup } from '@user/client-modules';
|
|
|
|
loading.once('coreInit', () => {
|
|
const shader = new Shader();
|
|
shader.size(480, 480);
|
|
shader.setHD(true);
|
|
shader.setZIndex(120);
|
|
PalaceBoss.shader = shader;
|
|
PalaceBoss.effect.create(shader, 40);
|
|
});
|
|
|
|
const enum BossStage {
|
|
Prologue,
|
|
|
|
Stage1,
|
|
Stage2,
|
|
Stage3,
|
|
Stage4,
|
|
|
|
End
|
|
}
|
|
|
|
export class PalaceBoss extends BarrageBoss {
|
|
static effect: PointEffect = new PointEffect();
|
|
static shader: Shader;
|
|
|
|
main: BossSprite<BarrageBoss>;
|
|
hitbox: Hitbox.Circle;
|
|
state: IStateDamageable;
|
|
|
|
private stage: BossStage = BossStage.Prologue;
|
|
|
|
/** 用于展示傅里叶频谱的背景元素 */
|
|
private back: SonicBack;
|
|
/** 楼层渲染元素 */
|
|
private group: LayerGroup;
|
|
/** 楼层渲染容器 */
|
|
private mapDraw: Container;
|
|
/** 伤害弹出 */
|
|
pop: Pop;
|
|
|
|
private heroHp: number = 0;
|
|
|
|
constructor() {
|
|
super();
|
|
|
|
const render = MotaRenderer.get('render-main')!;
|
|
this.group = render.getElementById('layer-main') as LayerGroup;
|
|
this.mapDraw = render.getElementById('map-draw') as Container;
|
|
this.pop = render.getElementById('pop-main') as Pop;
|
|
|
|
this.state = core.status.hero;
|
|
this.main = new BossEffect('static', this);
|
|
this.back = new SonicBack('static');
|
|
const { x, y } = core.status.hero.loc;
|
|
const cell = 32;
|
|
this.hitbox = new Hitbox.Circle(x + cell / 2, y + cell / 2, cell / 3);
|
|
}
|
|
|
|
override start(): void {
|
|
super.start();
|
|
|
|
PalaceBoss.shader.appendTo(this.mapDraw);
|
|
this.main.appendTo(this.group);
|
|
|
|
// const event = this.group.getLayer('event');
|
|
// const hero = event?.getExtends('floor-hero') as HeroRenderer;
|
|
// hero?.on('moveTick', this.moveTick);
|
|
|
|
SplittableBall.init({});
|
|
this.heroHp = core.status.hero.hp;
|
|
}
|
|
|
|
override end(): void {
|
|
super.end();
|
|
|
|
PalaceBoss.shader.remove();
|
|
this.main.remove();
|
|
this.back.remove();
|
|
this.main.destroy();
|
|
this.back.destroy();
|
|
|
|
// const event = this.group.getLayer('event');
|
|
// const hero = event?.getExtends('floor-hero') as HeroRenderer;
|
|
// hero?.off('moveTick', this.moveTick);
|
|
|
|
SplittableBall.end();
|
|
|
|
PalaceBoss.effect.end();
|
|
core.status.hero.hp = this.heroHp;
|
|
|
|
clip('choices:0');
|
|
}
|
|
|
|
ai(time: number, frame: number): void {}
|
|
}
|
|
|
|
class BossEffect extends BossSprite<PalaceBoss> {
|
|
protected preDraw(
|
|
canvas: MotaOffscreenCanvas2D,
|
|
transform: Transform
|
|
): boolean {
|
|
return true;
|
|
}
|
|
|
|
protected postDraw(
|
|
canvas: MotaOffscreenCanvas2D,
|
|
transform: Transform
|
|
): void {}
|
|
}
|
|
|
|
class SonicBack extends RenderItem {
|
|
protected render(
|
|
canvas: MotaOffscreenCanvas2D,
|
|
transform: Transform
|
|
): void {}
|
|
}
|