UNPKG

mylingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

247 lines (222 loc) 6.49 kB
import { Color, MeshStandardMaterial, ObjectSpaceNormalMap, TangentSpaceNormalMap, Vector2 } from "three" import ITexturedStandard, { NormalMapType } from "../../../interface/ITexturedStandard" import loadTexture from "../../utils/loaders/loadTexture" import TexturedBasicMixin from "./TexturedBasicMixin" const mapNames = [ "map", "alphaMap", "envMap", "aoMap", "bumpMap", "displacementMap", "emissiveMap", "lightMap", "metalnessMap", "roughnessMap", "normalMap" ] export default abstract class TexturedStandardMixin extends TexturedBasicMixin implements ITexturedStandard { protected abstract override material: MeshStandardMaterial public get wireframe() { return this.material.wireframe } public set wireframe(val) { this.tryCloneMaterial() this.material.wireframe = val } private _envMap?: string public get envMap() { return this._envMap } public set envMap(val) { this.tryCloneMaterial() this._envMap = val this.material.envMap = val ? loadTexture(val) : null this.applyTexture(mapNames) } private _aoMap?: string public get aoMap() { return this._aoMap } public set aoMap(val) { this.tryCloneMaterial() this._aoMap = val this.material.aoMap = val ? loadTexture(val) : null this.applyTexture(mapNames) } public get aoMapIntensity() { return this.material.aoMapIntensity } public set aoMapIntensity(val) { this.tryCloneMaterial() this.material.aoMapIntensity = val } private _bumpMap?: string public get bumpMap() { return this._bumpMap } public set bumpMap(val) { this.tryCloneMaterial() this._bumpMap = val this.material.bumpMap = val ? loadTexture(val) : null this.applyTexture(mapNames) } public get bumpScale() { return this.material.bumpScale } public set bumpScale(val) { this.tryCloneMaterial() this.material.bumpScale = val } private _displacementMap?: string public get displacementMap() { return this._displacementMap } public set displacementMap(val) { this.tryCloneMaterial() this._displacementMap = val this.material.displacementMap = val ? loadTexture(val) : null this.applyTexture(mapNames) } public get displacementScale() { return this.material.displacementScale } public set displacementScale(val) { this.tryCloneMaterial() this.material.displacementScale = val } public get displacementBias() { return this.material.displacementBias } public set displacementBias(val) { this.tryCloneMaterial() this.material.displacementBias = val } public get emissiveColor() { return "#" + this.material.emissive.getHexString() } public set emissiveColor(val) { this.tryCloneMaterial() this.material.emissive = new Color(val) } private _emissiveMap?: string public get emissiveMap() { return this._emissiveMap } public set emissiveMap(val) { this.tryCloneMaterial() this._emissiveMap = val this.material.emissiveMap = val ? loadTexture(val) : null this.applyTexture(mapNames) } public get emissiveIntensity() { return this.material.emissiveIntensity } public set emissiveIntensity(val) { this.tryCloneMaterial() this.material.emissiveIntensity = val } private _emissive?: boolean public get emissive() { return !!this._emissive } public set emissive(val: boolean) { this._emissive = val if (!val) return this.tryCloneMaterial() this.material.emissiveMap = this.material.map this.material.emissive = this.material.color //todo: make this property reversible } private _lightMap?: string public get lightMap() { return this._lightMap } public set lightMap(val) { this.tryCloneMaterial() this._lightMap = val this.material.lightMap = val ? loadTexture(val) : null this.applyTexture(mapNames) } public get lightMapIntensity() { return this.material.lightMapIntensity } public set lightMapIntensity(val) { this.tryCloneMaterial() this.material.lightMapIntensity = val } private _metalnessMap?: string public get metalnessMap() { return this._metalnessMap } public set metalnessMap(val) { this.tryCloneMaterial() this._metalnessMap = val this.material.metalnessMap = val ? loadTexture(val) : null this.applyTexture(mapNames) } public get metalness() { return this.material.metalness } public set metalness(val) { this.tryCloneMaterial() this.material.metalness = val } private _roughnessMap?: string public get roughnessMap() { return this._roughnessMap } public set roughnessMap(val) { this.tryCloneMaterial() this._roughnessMap = val this.material.roughnessMap = val ? loadTexture(val) : null this.applyTexture(mapNames) } public get roughness() { return this.material.roughness } public set roughness(val) { this.tryCloneMaterial() this.material.roughness = val } private _normalMap?: string public get normalMap() { return this._normalMap } public set normalMap(val) { this.tryCloneMaterial() this._normalMap = val this.material.normalMap = val ? loadTexture(val) : null this.applyTexture(mapNames) } public get normalScale() { return this.material.normalScale } public set normalScale(val: Vector2 | number) { this.tryCloneMaterial() if (typeof val === "number") this.material.normalScale = new Vector2(val, val) else this.material.normalScale = val } private _normalMapType?: NormalMapType public get normalMapType() { return this._normalMapType } public set normalMapType(val) { this.tryCloneMaterial() this._normalMapType = val this.material.normalMapType = val === "objectSpace" ? ObjectSpaceNormalMap : TangentSpaceNormalMap } }