{"mappings":"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","names":["AsciiEffect","renderer","charSet","options","fResolution","iScale","bColor","bAlpha","bBlock","bInvert","strResolution","width","height","domElement","oAscii","iWidth","iHeight","oImg","w","h","initAsciiSize","scene","camera","asciifyImage","oCanvas","oStyle","fLetterSpacing","strFont","fFontSize","fLineHeight","aDefaultCharList","aDefaultColorCharList","oCanvasImg","oCtx","aCharList","oImgData","strChars","y","x","iOffset","iRed","iGreen","iBlue","iAlpha","iCharIdx","fBrightness","strThisChar"],"sources":["../esm/npm/three@0.160.0/node_modules/three/examples/jsm/effects/AsciiEffect.js"],"sourcesContent":["/**\n * Ascii generation is based on https://github.com/hassadee/jsascii/blob/master/jsascii.js\n *\n * 16 April 2012 - @blurspline\n */\n\nclass AsciiEffect {\n\n\tconstructor( renderer, charSet = ' .:-=+*#%@', options = {} ) {\n\n\t\t// ' .,:;=|iI+hHOE#`$';\n\t\t// darker bolder character set from https://github.com/saw/Canvas-ASCII-Art/\n\t\t// ' .\\'`^\",:;Il!i~+_-?][}{1)(|/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW\u00268%B@$'.split('');\n\n\t\t// Some ASCII settings\n\n\t\tconst fResolution = options[ 'resolution' ] || 0.15; // Higher for more details\n\t\tconst iScale = options[ 'scale' ] || 1;\n\t\tconst bColor = options[ 'color' ] || false; // nice but slows down rendering!\n\t\tconst bAlpha = options[ 'alpha' ] || false; // Transparency\n\t\tconst bBlock = options[ 'block' ] || false; // blocked characters. like good O dos\n\t\tconst bInvert = options[ 'invert' ] || false; // black is white, white is black\n\t\tconst strResolution = options[ 'strResolution' ] || 'low';\n\n\t\tlet width, height;\n\n\t\tconst domElement = document.createElement( 'div' );\n\t\tdomElement.style.cursor = 'default';\n\n\t\tconst oAscii = document.createElement( 'table' );\n\t\tdomElement.appendChild( oAscii );\n\n\t\tlet iWidth, iHeight;\n\t\tlet oImg;\n\n\t\tthis.setSize = function ( w, h ) {\n\n\t\t\twidth = w;\n\t\t\theight = h;\n\n\t\t\trenderer.setSize( w, h );\n\n\t\t\tinitAsciiSize();\n\n\t\t};\n\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\trenderer.render( scene, camera );\n\t\t\tasciifyImage( oAscii );\n\n\t\t};\n\n\t\tthis.domElement = domElement;\n\n\n\t\t// Throw in ascii library from https://github.com/hassadee/jsascii/blob/master/jsascii.js (MIT License)\n\n\t\tfunction initAsciiSize() {\n\n\t\t\tiWidth = Math.floor( width * fResolution );\n\t\t\tiHeight = Math.floor( height * fResolution );\n\n\t\t\toCanvas.width = iWidth;\n\t\t\toCanvas.height = iHeight;\n\t\t\t// oCanvas.style.display = \"none\";\n\t\t\t// oCanvas.style.width = iWidth;\n\t\t\t// oCanvas.style.height = iHeight;\n\n\t\t\toImg = renderer.domElement;\n\n\t\t\tif ( oImg.style.backgroundColor ) {\n\n\t\t\t\toAscii.rows[ 0 ].cells[ 0 ].style.backgroundColor = oImg.style.backgroundColor;\n\t\t\t\toAscii.rows[ 0 ].cells[ 0 ].style.color = oImg.style.color;\n\n\t\t\t}\n\n\t\t\toAscii.cellSpacing = 0;\n\t\t\toAscii.cellPadding = 0;\n\n\t\t\tconst oStyle = oAscii.style;\n\t\t\toStyle.whiteSpace = 'pre';\n\t\t\toStyle.margin = '0px';\n\t\t\toStyle.padding = '0px';\n\t\t\toStyle.letterSpacing = fLetterSpacing + 'px';\n\t\t\toStyle.fontFamily = strFont;\n\t\t\toStyle.fontSize = fFontSize + 'px';\n\t\t\toStyle.lineHeight = fLineHeight + 'px';\n\t\t\toStyle.textAlign = 'left';\n\t\t\toStyle.textDecoration = 'none';\n\n\t\t}\n\n\n\t\tconst aDefaultCharList = ( ' .,:;i1tfLCG08@' ).split( '' );\n\t\tconst aDefaultColorCharList = ( ' CGO08@' ).split( '' );\n\t\tconst strFont = 'courier new, monospace';\n\n\t\tconst oCanvasImg = renderer.domElement;\n\n\t\tconst oCanvas = document.createElement( 'canvas' );\n\t\tif ( ! oCanvas.getContext ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst oCtx = oCanvas.getContext( '2d' );\n\t\tif ( ! oCtx.getImageData ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet aCharList = ( bColor ? aDefaultColorCharList : aDefaultCharList );\n\n\t\tif ( charSet ) aCharList = charSet;\n\n\t\t// Setup dom\n\n\t\tconst fFontSize = ( 2 / fResolution ) * iScale;\n\t\tconst fLineHeight = ( 2 / fResolution ) * iScale;\n\n\t\t// adjust letter-spacing for all combinations of scale and resolution to get it to fit the image width.\n\n\t\tlet fLetterSpacing = 0;\n\n\t\tif ( strResolution == 'low' ) {\n\n\t\t\tswitch ( iScale ) {\n\n\t\t\t\tcase 1 : fLetterSpacing = - 1; break;\n\t\t\t\tcase 2 :\n\t\t\t\tcase 3 : fLetterSpacing = - 2.1; break;\n\t\t\t\tcase 4 : fLetterSpacing = - 3.1; break;\n\t\t\t\tcase 5 : fLetterSpacing = - 4.15; break;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( strResolution == 'medium' ) {\n\n\t\t\tswitch ( iScale ) {\n\n\t\t\t\tcase 1 : fLetterSpacing = 0; break;\n\t\t\t\tcase 2 : fLetterSpacing = - 1; break;\n\t\t\t\tcase 3 : fLetterSpacing = - 1.04; break;\n\t\t\t\tcase 4 :\n\t\t\t\tcase 5 : fLetterSpacing = - 2.1; break;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( strResolution == 'high' ) {\n\n\t\t\tswitch ( iScale ) {\n\n\t\t\t\tcase 1 :\n\t\t\t\tcase 2 : fLetterSpacing = 0; break;\n\t\t\t\tcase 3 :\n\t\t\t\tcase 4 :\n\t\t\t\tcase 5 : fLetterSpacing = - 1; break;\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// can't get a span or div to flow like an img element, but a table works?\n\n\n\t\t// convert img element to ascii\n\n\t\tfunction asciifyImage( oAscii ) {\n\n\t\t\toCtx.clearRect( 0, 0, iWidth, iHeight );\n\t\t\toCtx.drawImage( oCanvasImg, 0, 0, iWidth, iHeight );\n\t\t\tconst oImgData = oCtx.getImageData( 0, 0, iWidth, iHeight ).data;\n\n\t\t\t// Coloring loop starts now\n\t\t\tlet strChars = '';\n\n\t\t\t// console.time('rendering');\n\n\t\t\tfor ( let y = 0; y \u003c iHeight; y += 2 ) {\n\n\t\t\t\tfor ( let x = 0; x \u003c iWidth; x ++ ) {\n\n\t\t\t\t\tconst iOffset = ( y * iWidth + x ) * 4;\n\n\t\t\t\t\tconst iRed = oImgData[ iOffset ];\n\t\t\t\t\tconst iGreen = oImgData[ iOffset + 1 ];\n\t\t\t\t\tconst iBlue = oImgData[ iOffset + 2 ];\n\t\t\t\t\tconst iAlpha = oImgData[ iOffset + 3 ];\n\t\t\t\t\tlet iCharIdx;\n\n\t\t\t\t\tlet fBrightness;\n\n\t\t\t\t\tfBrightness = ( 0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue ) / 255;\n\t\t\t\t\t// fBrightness = (0.3*iRed + 0.5*iGreen + 0.3*iBlue) / 255;\n\n\t\t\t\t\tif ( iAlpha == 0 ) {\n\n\t\t\t\t\t\t// should calculate alpha instead, but quick hack :)\n\t\t\t\t\t\t//fBrightness *= (iAlpha / 255);\n\t\t\t\t\t\tfBrightness = 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tiCharIdx = Math.floor( ( 1 - fBrightness ) * ( aCharList.length - 1 ) );\n\n\t\t\t\t\tif ( bInvert ) {\n\n\t\t\t\t\t\tiCharIdx = aCharList.length - iCharIdx - 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// good for debugging\n\t\t\t\t\t//fBrightness = Math.floor(fBrightness * 10);\n\t\t\t\t\t//strThisChar = fBrightness;\n\n\t\t\t\t\tlet strThisChar = aCharList[ iCharIdx ];\n\n\t\t\t\t\tif ( strThisChar === undefined || strThisChar == ' ' )\n\t\t\t\t\t\tstrThisChar = '\u0026nbsp;';\n\n\t\t\t\t\tif ( bColor ) {\n\n\t\t\t\t\t\tstrChars += '\u003cspan style=\\''\n\t\t\t\t\t\t\t+ 'color:rgb(' + iRed + ',' + iGreen + ',' + iBlue + ');'\n\t\t\t\t\t\t\t+ ( bBlock ? 'background-color:rgb(' + iRed + ',' + iGreen + ',' + iBlue + ');' : '' )\n\t\t\t\t\t\t\t+ ( bAlpha ? 'opacity:' + ( iAlpha / 255 ) + ';' : '' )\n\t\t\t\t\t\t\t+ '\\'\u003e' + strThisChar + '\u003c/span\u003e';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstrChars += strThisChar;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstrChars += '\u003cbr/\u003e';\n\n\t\t\t}\n\n\t\t\toAscii.innerHTML = `\u003ctr\u003e\u003ctd style=\"display:block;width:${width}px;height:${height}px;overflow:hidden\"\u003e${strChars}\u003c/td\u003e\u003c/tr\u003e`;\n\n\t\t\t// console.timeEnd('rendering');\n\n\t\t\t// return oAscii;\n\n\t\t}\n\n\t}\n\n}\n\nexport { AsciiEffect };\n"],"version":3}
