{"version":3,"file":"LWO2Parser.cjs","sources":["../../../src/loaders/lwo/LWO2Parser.js"],"sourcesContent":["class LWO2Parser {\n constructor(IFFParser) {\n this.IFF = IFFParser\n }\n\n parseBlock() {\n this.IFF.debugger.offset = this.IFF.reader.offset\n this.IFF.debugger.closeForms()\n\n const blockID = this.IFF.reader.getIDTag()\n let length = this.IFF.reader.getUint32() // size of data in bytes\n if (length > this.IFF.reader.dv.byteLength - this.IFF.reader.offset) {\n this.IFF.reader.offset -= 4\n length = this.IFF.reader.getUint16()\n }\n\n this.IFF.debugger.dataOffset = this.IFF.reader.offset\n this.IFF.debugger.length = length\n\n // Data types may be found in either LWO2 OR LWO3 spec\n switch (blockID) {\n case 'FORM': // form blocks may consist of sub -chunks or sub-forms\n this.IFF.parseForm(length)\n break\n\n // SKIPPED CHUNKS\n // if break; is called directly, the position in the lwoTree is not created\n // any sub chunks and forms are added to the parent form instead\n // MISC skipped\n case 'ICON': // Thumbnail Icon Image\n case 'VMPA': // Vertex Map Parameter\n case 'BBOX': // bounding box\n // case 'VMMD':\n // case 'VTYP':\n\n // normal maps can be specified, normally on models imported from other applications. Currently ignored\n case 'NORM':\n\n // ENVL FORM skipped\n case 'PRE ':\n case 'POST':\n case 'KEY ':\n case 'SPAN':\n\n // CLIP FORM skipped\n case 'TIME':\n case 'CLRS':\n case 'CLRA':\n case 'FILT':\n case 'DITH':\n case 'CONT':\n case 'BRIT':\n case 'SATR':\n case 'HUE ':\n case 'GAMM':\n case 'NEGA':\n case 'IFLT':\n case 'PFLT':\n\n // Image Map Layer skipped\n case 'PROJ':\n case 'AXIS':\n case 'AAST':\n case 'PIXB':\n case 'AUVO':\n case 'STCK':\n\n // Procedural Textures skipped\n case 'PROC':\n case 'VALU':\n case 'FUNC':\n\n // Gradient Textures skipped\n case 'PNAM':\n case 'INAM':\n case 'GRST':\n case 'GREN':\n case 'GRPT':\n case 'FKEY':\n case 'IKEY':\n\n // Texture Mapping Form skipped\n case 'CSYS':\n\n // Surface CHUNKs skipped\n case 'OPAQ': // top level 'opacity' checkbox\n case 'CMAP': // clip map\n\n // Surface node CHUNKS skipped\n // These mainly specify the node editor setup in LW\n case 'NLOC':\n case 'NZOM':\n case 'NVER':\n case 'NSRV':\n case 'NVSK': // unknown\n case 'NCRD':\n case 'WRPW': // image wrap w ( for cylindrical and spherical projections)\n case 'WRPH': // image wrap h\n case 'NMOD':\n case 'NSEL':\n case 'NPRW':\n case 'NPLA':\n case 'NODS':\n case 'VERS':\n case 'ENUM':\n case 'TAG ':\n case 'OPAC':\n\n // Car Material CHUNKS\n case 'CGMD':\n case 'CGTY':\n case 'CGST':\n case 'CGEN':\n case 'CGTS':\n case 'CGTE':\n case 'OSMP':\n case 'OMDE':\n case 'OUTR':\n case 'FLAG':\n\n case 'TRNL':\n case 'GLOW':\n case 'GVAL': // glow intensity\n case 'SHRP':\n case 'RFOP':\n case 'RSAN':\n case 'TROP':\n case 'RBLR':\n case 'TBLR':\n case 'CLRH':\n case 'CLRF':\n case 'ADTR':\n case 'LINE':\n case 'ALPH':\n case 'VCOL':\n case 'ENAB':\n this.IFF.debugger.skipped = true\n this.IFF.reader.skip(length)\n break\n\n case 'SURF':\n this.IFF.parseSurfaceLwo2(length)\n break\n\n case 'CLIP':\n this.IFF.parseClipLwo2(length)\n break\n\n // Texture node chunks (not in spec)\n case 'IPIX': // usePixelBlending\n case 'IMIP': // useMipMaps\n case 'IMOD': // imageBlendingMode\n case 'AMOD': // unknown\n case 'IINV': // imageInvertAlpha\n case 'INCR': // imageInvertColor\n case 'IAXS': // imageAxis ( for non-UV maps)\n case 'IFOT': // imageFallofType\n case 'ITIM': // timing for animated textures\n case 'IWRL':\n case 'IUTI':\n case 'IINX':\n case 'IINY':\n case 'IINZ':\n case 'IREF': // possibly a VX for reused texture nodes\n if (length === 4) this.IFF.currentNode[blockID] = this.IFF.reader.getInt32()\n else this.IFF.reader.skip(length)\n break\n\n case 'OTAG':\n this.IFF.parseObjectTag()\n break\n\n case 'LAYR':\n this.IFF.parseLayer(length)\n break\n\n case 'PNTS':\n this.IFF.parsePoints(length)\n break\n\n case 'VMAP':\n this.IFF.parseVertexMapping(length)\n break\n\n case 'AUVU':\n case 'AUVN':\n this.IFF.reader.skip(length - 1)\n this.IFF.reader.getVariableLengthIndex() // VX\n break\n\n case 'POLS':\n this.IFF.parsePolygonList(length)\n break\n\n case 'TAGS':\n this.IFF.parseTagStrings(length)\n break\n\n case 'PTAG':\n this.IFF.parsePolygonTagMapping(length)\n break\n\n case 'VMAD':\n this.IFF.parseVertexMapping(length, true)\n break\n\n // Misc CHUNKS\n case 'DESC': // Description Line\n this.IFF.currentForm.description = this.IFF.reader.getString()\n break\n\n case 'TEXT':\n case 'CMNT':\n case 'NCOM':\n this.IFF.currentForm.comment = this.IFF.reader.getString()\n break\n\n // Envelope Form\n case 'NAME':\n this.IFF.currentForm.channelName = this.IFF.reader.getString()\n break\n\n // Image Map Layer\n case 'WRAP':\n this.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() }\n break\n\n case 'IMAG':\n const index = this.IFF.reader.getVariableLengthIndex()\n this.IFF.currentForm.imageIndex = index\n break\n\n // Texture Mapping Form\n case 'OREF':\n this.IFF.currentForm.referenceObject = this.IFF.reader.getString()\n break\n\n case 'ROID':\n this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32()\n break\n\n // Surface Blocks\n case 'SSHN':\n this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString()\n break\n\n case 'AOVN':\n this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString()\n break\n\n // Nodal Blocks\n case 'NSTA':\n this.IFF.currentForm.disabled = this.IFF.reader.getUint16()\n break\n\n case 'NRNM':\n this.IFF.currentForm.realName = this.IFF.reader.getString()\n break\n\n case 'NNME':\n this.IFF.currentForm.refName = this.IFF.reader.getString()\n this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm\n break\n\n // Nodal Blocks : connections\n case 'INME':\n if (!this.IFF.currentForm.nodeName) this.IFF.currentForm.nodeName = []\n this.IFF.currentForm.nodeName.push(this.IFF.reader.getString())\n break\n\n case 'IINN':\n if (!this.IFF.currentForm.inputNodeName) this.IFF.currentForm.inputNodeName = []\n this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString())\n break\n\n case 'IINM':\n if (!this.IFF.currentForm.inputName) this.IFF.currentForm.inputName = []\n this.IFF.currentForm.inputName.push(this.IFF.reader.getString())\n break\n\n case 'IONM':\n if (!this.IFF.currentForm.inputOutputName) this.IFF.currentForm.inputOutputName = []\n this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString())\n break\n\n case 'FNAM':\n this.IFF.currentForm.fileName = this.IFF.reader.getString()\n break\n\n case 'CHAN': // NOTE: ENVL Forms may also have CHAN chunk, however ENVL is currently ignored\n if (length === 4) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag()\n else this.IFF.reader.skip(length)\n break\n\n // LWO2 Spec chunks: these are needed since the SURF FORMs are often in LWO2 format\n case 'SMAN':\n const maxSmoothingAngle = this.IFF.reader.getFloat32()\n this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true\n break\n\n // LWO2: Basic Surface Parameters\n case 'COLR':\n this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) }\n this.IFF.reader.skip(2) // VX: envelope\n break\n\n case 'LUMI':\n this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() }\n this.IFF.reader.skip(2)\n break\n\n case 'SPEC':\n this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() }\n this.IFF.reader.skip(2)\n break\n\n case 'DIFF':\n this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() }\n this.IFF.reader.skip(2)\n break\n\n case 'REFL':\n this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() }\n this.IFF.reader.skip(2)\n break\n\n case 'GLOS':\n this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() }\n this.IFF.reader.skip(2)\n break\n\n case 'TRAN':\n this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32()\n this.IFF.reader.skip(2)\n break\n\n case 'BUMP':\n this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32()\n this.IFF.reader.skip(2)\n break\n\n case 'SIDE':\n this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16()\n break\n\n case 'RIMG':\n this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex()\n break\n\n case 'RIND':\n this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32()\n this.IFF.reader.skip(2)\n break\n\n case 'TIMG':\n this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex()\n break\n\n case 'IMAP':\n this.IFF.reader.skip(2)\n break\n\n case 'TMAP':\n this.IFF.debugger.skipped = true\n this.IFF.reader.skip(length) // needs implementing\n break\n\n case 'IUVI': // uv channel name\n this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length)\n break\n\n case 'IUTL': // widthWrappingMode: 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32()\n break\n case 'IVTL': // heightWrappingMode\n this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32()\n break\n\n // LWO2 USE\n case 'BLOK':\n // skip\n break\n\n default:\n this.IFF.parseUnknownCHUNK(blockID, length)\n }\n\n if (blockID != 'FORM') {\n this.IFF.debugger.node = 1\n this.IFF.debugger.nodeID = blockID\n this.IFF.debugger.log()\n }\n\n if (this.IFF.reader.offset >= this.IFF.currentFormEnd) {\n this.IFF.currentForm = this.IFF.parentForm\n }\n }\n}\n\nexport { LWO2Parser }\n"],"names":[],"mappings":"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"}