UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 2.67 kB
import{CULLFACE_NONE as t,CULLFACE_BACK as e,CULLFACE_FRONT as i,CULLFACE_FRONTANDBACK as s,FUNC_NEVER as n,FUNC_LESS as a,FUNC_EQUAL as l,FUNC_LESSEQUAL as r,FUNC_GREATER as o,FUNC_NOTEQUAL as d,FUNC_GREATEREQUAL as h,FUNC_ALWAYS as c}from"../../platform/graphics/constants.js";import{Texture as f}from"../../platform/graphics/texture.js";import{SPECOCC_NONE as m,SPECOCC_AO as u,SPECOCC_GLOSSDEPENDENT as p,BLEND_SUBTRACTIVE as v,BLEND_ADDITIVE as g,BLEND_NORMAL as I,BLEND_NONE as y,BLEND_PREMULTIPLIED as b,BLEND_MULTIPLICATIVE as E,BLEND_ADDITIVEALPHA as V,BLEND_MULTIPLICATIVE2X as x,BLEND_SCREEN as _,BLEND_MIN as j,BLEND_MAX as A,SPECULAR_PHONG as k,SPECULAR_BLINN as F}from"../constants.js";import{standardMaterialParameterTypes as O,standardMaterialRemovedParameters as w}from"./standard-material-parameters.js";class M{constructor(){this.removeInvalid=!0,this.valid=!0,this.enumValidators={occludeSpecular:this._createEnumValidator([m,u,p]),cull:this._createEnumValidator([t,e,i,s]),blendType:this._createEnumValidator([v,g,I,y,b,E,V,x,_,j,A]),depthFunc:this._createEnumValidator([n,a,l,r,o,d,h,c]),shadingModel:this._createEnumValidator([k,F])}}setInvalid(t,e){this.valid=!1,this.removeInvalid&&delete e[t]}validate(t){const e=O,i=w,s="path"===t.mappingFormat;for(const n in t){const a=e[n];if(a)if(a.startsWith("enum")){const e=a.split(":")[1];this.enumValidators[e]&&(this.enumValidators[e](t[n])||this.setInvalid(n,t))}else if("number"===a)"number"!=typeof t[n]&&this.setInvalid(n,t);else if("boolean"===a)"boolean"!=typeof t[n]&&this.setInvalid(n,t);else if("string"===a)"string"!=typeof t[n]&&this.setInvalid(n,t);else if("vec2"===a)t[n]instanceof Array&&2===t[n].length||this.setInvalid(n,t);else if("rgb"===a)t[n]instanceof Array&&3===t[n].length||this.setInvalid(n,t);else if("texture"===a)s?"string"!=typeof t[n]&&null!==t[n]&&(t[n]instanceof f||this.setInvalid(n,t)):"number"!=typeof t[n]&&null!==t[n]&&(t[n]instanceof f||this.setInvalid(n,t));else if("boundingbox"===a)t[n].center&&t[n].center instanceof Array&&3===t[n].center.length||this.setInvalid(n,t),t[n].halfExtents&&t[n].halfExtents instanceof Array&&3===t[n].halfExtents.length||this.setInvalid(n,t);else if("cubemap"===a)"number"!=typeof t[n]&&null!==t[n]&&void 0!==t[n]&&(t[n]instanceof f&&t[n].cubemap||this.setInvalid(n,t));else if("chunks"===a){const e=Object.keys(t[n]);for(let i=0;i<e.length;i++)"string"!=typeof t[n][e[i]]&&this.setInvalid(e[i],t[n])}else console.error(`Unknown material type: ${a}`);else i[n]?delete t[n]:this.valid=!1}return t.validated=!0,this.valid}_createEnumValidator(t){return function(e){return t.indexOf(e)>=0}}}export{M as StandardMaterialValidator};