UNPKG

threepipe

Version:

A 3D viewer framework built on top of three.js in TypeScript with a focus on quality rendering, modularity and extensibility.

133 lines 5.4 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { SpotLight } from 'three'; import { iLightCommons } from '../object/iLightCommons'; import { uiColor, uiInput, uiNumber, uiPanelContainer, uiSlider, uiToggle, uiVector } from 'uiconfig.js'; import { onChange3 } from 'ts-browser-helpers'; import { bindToValue } from '../../three'; /** * Extension of three.js SpotLight with additional properties for serialization and UI * * Note - gltf serialization is handled by {@link GLTFLightExtrasExtension} */ let SpotLight2 = class SpotLight2 extends SpotLight { _mapSizeChanged() { this.shadow.map?.dispose(); this.shadow.mapPass?.dispose(); this.shadow.map = null; this.shadow.mapPass = null; this.setDirty({ change: 'shadowMapSize' }); } _shadowCamUpdate(change) { this.shadow.camera.updateProjectionMatrix(); this.setDirty({ change }); } constructor(color, intensity, distance, angle, penumbra, decay) { super(color, intensity, distance, angle, penumbra, decay); this.assetType = 'light'; this.setDirty = iLightCommons.setDirty; this.refreshUi = iLightCommons.refreshUi; this.isSpotLight2 = true; this.target.position.set(0, 0, -1); // because of GLTF spec: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_lights_punctual this.add(this.target); // todo: make sure the child isn't exported in gltf iLightCommons.upgradeLight.call(this); } autoScale() { console.warn('AutoScale not supported on Lights'); return this; } autoCenter() { console.warn('AutoCenter not supported on Lights'); return this; } /** * @deprecated use `this` instead */ get lightObject() { return this; } /** * @deprecated use `this` instead */ get modelObject() { return this; } }; __decorate([ uiToggle('Enabled'), onChange3('setDirty') ], SpotLight2.prototype, "visible", void 0); __decorate([ uiColor('Color', (that) => ({ onChange: () => that.setDirty() })) ], SpotLight2.prototype, "color", void 0); __decorate([ uiSlider('Intensity', [0, 30], 0.01), onChange3('setDirty') ], SpotLight2.prototype, "intensity", void 0); __decorate([ uiSlider('Angle', [0, 2], 0.01), onChange3('setDirty') ], SpotLight2.prototype, "angle", void 0); __decorate([ uiSlider('Penumbra', [0, 0.9999], 0.01), onChange3('setDirty') ], SpotLight2.prototype, "penumbra", void 0); __decorate([ uiInput('Distance'), onChange3('setDirty') ], SpotLight2.prototype, "distance", void 0); __decorate([ uiInput('Decay'), onChange3('setDirty') ], SpotLight2.prototype, "decay", void 0); __decorate([ uiVector('Position', undefined, undefined, (that) => ({ onChange: () => that.setDirty() })) ], SpotLight2.prototype, "position", void 0); __decorate([ uiVector('Rotation', undefined, undefined, (that) => ({ onChange: () => that.setDirty() })) ], SpotLight2.prototype, "rotation", void 0); __decorate([ uiToggle('Cast Shadow'), onChange3('setDirty') ], SpotLight2.prototype, "castShadow", void 0); __decorate([ uiVector('Shadow Map Size'), bindToValue({ obj: 'shadow', key: 'mapSize', onChange: SpotLight2.prototype._mapSizeChanged, onChangeParams: false }) ], SpotLight2.prototype, "shadowMapSize", void 0); __decorate([ uiSlider('Shadow Bias', [-0.001, 0.001], 0.00001), bindToValue({ obj: 'shadow', key: 'bias', onChange: 'setDirty' }) ], SpotLight2.prototype, "shadowBias", void 0); __decorate([ uiSlider('Shadow Radius', [0, 5], 0.01), bindToValue({ obj: 'shadow', key: 'radius', onChange: 'setDirty' }) ], SpotLight2.prototype, "shadowRadius", void 0); __decorate([ uiSlider('Shadow Focus', [0, 1], 0.001), bindToValue({ obj: 'shadow', key: 'focus', onChange: 'setDirty' }) ], SpotLight2.prototype, "shadowFocus", void 0); __decorate([ uiNumber('Shadow Near'), bindToValue({ obj: 'shadow', key: ['camera', 'near'], onChange: SpotLight2.prototype._shadowCamUpdate }) ], SpotLight2.prototype, "shadowNear", void 0); __decorate([ uiNumber('Shadow Far'), bindToValue({ obj: 'shadow', key: ['camera', 'far'], onChange: SpotLight2.prototype._shadowCamUpdate }) ], SpotLight2.prototype, "shadowFar", void 0); __decorate([ uiNumber('Shadow Aspect'), bindToValue({ obj: 'shadow', key: 'aspect', onChange: SpotLight2.prototype._shadowCamUpdate }) ], SpotLight2.prototype, "shadowAspect", void 0); __decorate([ uiSlider('Shadow FOV', [1, 179], 1), bindToValue({ obj: 'shadow', key: 'fov', onChange: SpotLight2.prototype._shadowCamUpdate }) ], SpotLight2.prototype, "shadowFov", void 0); SpotLight2 = __decorate([ uiPanelContainer('Spot Light') ], SpotLight2); export { SpotLight2 }; //# sourceMappingURL=SpotLight2.js.map