Fix lights

This commit is contained in:
schmelczerandras 2020-09-20 19:23:22 +02:00
parent 13843f87a8
commit e44be0c5ee
17 changed files with 179 additions and 117 deletions

View file

@ -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;

View file

@ -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);
}
}

View file

@ -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,
};
}
}

View 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,
};
}
}

View file

@ -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;
}

View file

@ -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);

View file

@ -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);