UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

78 lines (61 loc) 2.23 kB
import { Light } from "../../../src/engine/graphics/ecs/light/Light.js"; import { DirectionalLightHelper, PointLightHelper, SpotLightHelper } from "three"; import { make3DSymbolicDisplay } from "./make3DSymbolicDisplay.js"; import { buildThreeJSHelperEntity } from "./buildThreeJSHelperEntity.js"; import Renderable from "../../../src/engine/ecs/renderable/Renderable.js"; import { Transform } from "../../../src/engine/ecs/transform/Transform.js"; /** * * @param {Engine} engine * @returns {ComponentSymbolicDisplay} */ export function makeLightSymbolicDisplay(engine) { /** * * @param {Light} light */ function makeHelper(light) { const threeObject = light.__threeObject; if (threeObject === null) { console.warn('Light object is not initialized', light); return null; } if (threeObject === undefined) { console.error('Light object is undefined', light); return null; } switch (light.type.getValue()) { case Light.Type.SPOT: return new SpotLightHelper(threeObject); case Light.Type.POINT: return new PointLightHelper(threeObject); case Light.Type.DIRECTION: return new DirectionalLightHelper(threeObject); default: return null; } } return make3DSymbolicDisplay({ engine, /** * * @param light * @param transform * @param entity * @param {SymbolicDisplayInternalAPI} api */ factory([light, transform, entity], api) { const helper = makeHelper(light); if (helper === null) { //no helper for this light type return; } const entityBuilder = buildThreeJSHelperEntity(helper); const r = entityBuilder.getComponent(Renderable); r.matrixAutoUpdate = false; api.bind(light.type.onChanged, api.update, api); api.emit(entityBuilder); }, components: [Light, Transform] }); }