40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { vec2 } from 'gl-matrix';
|
|
import { CircleLight, ColorfulCircle, Renderer } from 'sdf-2d';
|
|
import { CharacterTeam, Id, ProjectileBase, settings } from 'shared';
|
|
import { ViewObject } from './view-object';
|
|
|
|
export class ProjectileView extends ProjectileBase implements ViewObject {
|
|
private circle: ColorfulCircle;
|
|
private light: CircleLight;
|
|
|
|
constructor(
|
|
id: Id,
|
|
center: vec2,
|
|
radius: number,
|
|
team: CharacterTeam,
|
|
strength: number,
|
|
) {
|
|
super(id, center, radius, team, strength);
|
|
this.circle = new ColorfulCircle(center, radius / 2, settings.colorIndices[team]);
|
|
this.light = new CircleLight(
|
|
center,
|
|
settings.paletteDim[settings.colorIndices[team]],
|
|
0,
|
|
);
|
|
}
|
|
|
|
public step(deltaTimeInSeconds: number): void {
|
|
super.step(deltaTimeInSeconds);
|
|
|
|
this.circle.center = this.center;
|
|
this.light.center = this.center;
|
|
this.light.intensity = (0.15 * this.strength) / settings.projectileMaxStrength;
|
|
}
|
|
|
|
public beforeDestroy(): void {}
|
|
|
|
public draw(renderer: Renderer, overlay: HTMLElement): void {
|
|
renderer.addDrawable(this.circle);
|
|
renderer.addDrawable(this.light);
|
|
}
|
|
}
|