Fix lights
This commit is contained in:
parent
13843f87a8
commit
e44be0c5ee
17 changed files with 179 additions and 117 deletions
|
|
@ -5,7 +5,7 @@ export abstract class Drawable {
|
|||
// This should be overriden by inherited classes
|
||||
public static readonly descriptor: DrawableDescriptor;
|
||||
|
||||
public abstract distance(target: vec2): number;
|
||||
public abstract minDistance(target: vec2): number;
|
||||
|
||||
protected abstract getObjectToSerialize(transform2d: mat2d, transform1d: number): any;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import { mat2d, vec2, vec3 } from 'gl-matrix';
|
||||
import { Drawable } from '../drawable';
|
||||
import { vec2, vec3 } from 'gl-matrix';
|
||||
import { DrawableDescriptor } from '../drawable-descriptor';
|
||||
import { LightDrawable } from './light-drawable';
|
||||
|
||||
export class CircleLight extends Drawable {
|
||||
export class CircleLight extends LightDrawable {
|
||||
public static readonly descriptor: DrawableDescriptor = {
|
||||
uniformName: 'circleLights',
|
||||
uniformCountMacroName: 'CIRCLE_LIGHT_COUNT',
|
||||
|
|
@ -10,19 +10,7 @@ export class CircleLight extends Drawable {
|
|||
empty: new CircleLight(vec2.fromValues(0, 0), vec3.fromValues(0, 0, 0), 0),
|
||||
};
|
||||
|
||||
constructor(public center: vec2, public color: vec3, public intensity: number) {
|
||||
super();
|
||||
}
|
||||
|
||||
public distance(target: vec2): number {
|
||||
return vec2.dist(this.center, target);
|
||||
}
|
||||
|
||||
protected getObjectToSerialize(transform2d: mat2d, transform1d: number): any {
|
||||
return {
|
||||
center: vec2.transformMat2d(vec2.create(), this.center, transform2d),
|
||||
color: this.color,
|
||||
intensity: this.intensity,
|
||||
};
|
||||
constructor(center: vec2, color: vec3, intensity: number) {
|
||||
super(center, color, intensity);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,39 +1,33 @@
|
|||
import { mat2d, vec2, vec3 } from 'gl-matrix';
|
||||
import { Drawable } from '../drawable';
|
||||
import { DrawableDescriptor } from '../drawable-descriptor';
|
||||
import { LightDrawable } from './light-drawable';
|
||||
|
||||
export class Flashlight extends Drawable {
|
||||
export class Flashlight extends LightDrawable {
|
||||
public static readonly descriptor: DrawableDescriptor = {
|
||||
uniformName: 'flashlights',
|
||||
uniformCountMacroName: 'FLASHLIGHT_COUNT',
|
||||
shaderCombinationSteps: [0, 1, 2, 4],
|
||||
empty: new Flashlight(
|
||||
vec2.fromValues(0, 0),
|
||||
vec2.fromValues(0, 0),
|
||||
vec3.fromValues(0, 0, 0),
|
||||
0
|
||||
0,
|
||||
vec2.fromValues(0, 0)
|
||||
),
|
||||
};
|
||||
|
||||
public constructor(
|
||||
public center: vec2,
|
||||
public direction: vec2,
|
||||
public color: vec3,
|
||||
public intensity: number
|
||||
center: vec2,
|
||||
color: vec3,
|
||||
intensity: number,
|
||||
public direction: vec2
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
public distance(_: vec2): number {
|
||||
return 0;
|
||||
super(center, color, intensity);
|
||||
}
|
||||
|
||||
protected getObjectToSerialize(transform2d: mat2d, transform1d: number): any {
|
||||
return {
|
||||
center: vec2.transformMat2d(vec2.create(), this.center, transform2d),
|
||||
...super.getObjectToSerialize(transform2d, transform1d),
|
||||
direction: this.direction,
|
||||
intensity: this.intensity,
|
||||
color: this.color,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
26
src/drawables/lights/light-drawable.ts
Normal file
26
src/drawables/lights/light-drawable.ts
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import { mat2d, vec2, vec3 } from 'gl-matrix';
|
||||
import { Drawable } from '../../main';
|
||||
|
||||
export class LightDrawable extends Drawable {
|
||||
protected lightnessRatio = 1;
|
||||
|
||||
constructor(public center: vec2, public color: vec3, public intensity: number) {
|
||||
super();
|
||||
}
|
||||
|
||||
public setLightnessRatio(ratio: number) {
|
||||
this.lightnessRatio = ratio;
|
||||
}
|
||||
|
||||
public minDistance(target: vec2): number {
|
||||
return vec2.dist(this.center, target);
|
||||
}
|
||||
|
||||
protected getObjectToSerialize(transform2d: mat2d, transform1d: number): any {
|
||||
return {
|
||||
center: vec2.transformMat2d(vec2.create(), this.center, transform2d),
|
||||
color: this.color,
|
||||
intensity: this.intensity * this.lightnessRatio,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -36,7 +36,7 @@ export class Circle extends Drawable {
|
|||
super();
|
||||
}
|
||||
|
||||
public distance(target: vec2): number {
|
||||
public minDistance(target: vec2): number {
|
||||
return vec2.dist(this.center, target) - this.radius;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ export class InvertedTunnel extends Drawable {
|
|||
super();
|
||||
}
|
||||
|
||||
public distance(target: vec2): number {
|
||||
public minDistance(target: vec2): number {
|
||||
const toFromDelta = vec2.subtract(vec2.create(), this.to, this.from);
|
||||
const targetFromDelta = vec2.subtract(vec2.create(), target, this.from);
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ export class Tunnel extends Drawable {
|
|||
super();
|
||||
}
|
||||
|
||||
public distance(target: vec2): number {
|
||||
public minDistance(target: vec2): number {
|
||||
const toFromDelta = vec2.subtract(vec2.create(), this.to, this.from);
|
||||
const targetFromDelta = vec2.subtract(vec2.create(), target, this.from);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue