{"version":3,"file":"js/1.js","sources":["webpack://GUI/./src/addons/addons/fps/userstyle.css","webpack://GUI/./src/addons/addons/fps/_runtime_entry.js","webpack://GUI/./src/addons/addons/fps/userscript.js"],"sourcesContent":["exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".fps-counter {\\n font-size: 0.625rem;\\n font-weight: bold;\\n font-family: \\\"Helvetica Neue\\\", Helvetica, Arial, sans-serif;\\n white-space: nowrap;\\n padding: 0.25rem;\\n user-select: none;\\n color: #0fbd8c;\\n display: none;\\n align-items: center;\\n}\\n\\n.fps-counter.show {\\n display: flex;\\n}\\n\\n.sa-small-stage .fps-counter {\\n display: none;\\n}\", \"\"]);\n\n// exports\n","/* generated by pull.js */\nimport _js from \"./userscript.js\";\nimport _css from \"!css-loader!./userstyle.css\";\nexport const resources = {\n \"userscript.js\": _js,\n \"userstyle.css\": _css,\n};","\nexport default async function ({ addon, console, msg }) {\n const { vm } = addon.tab.traps;\n const { runtime } = vm;\n if (!vm.editingTarget) {\n await new Promise((resolve) => runtime.once(\"PROJECT_LOADED\", resolve));\n }\n\n let fpsCounterElement = document.createElement(\"span\");\n fpsCounterElement.className = \"fps-counter\";\n addon.tab.displayNoneWhileDisabled(fpsCounterElement);\n\n let lastRender;\n let lastFps;\n let wasRunning = false;\n\n const { renderer } = runtime;\n const _draw = renderer.draw;\n renderer.draw = function () {\n _draw.call(this);\n\n const now = runtime.currentMSecs;\n // If it's been more than 500ms since the last draw, we want to reset the variables.\n if (typeof lastRender !== \"number\" || now - lastRender > 500) {\n lastRender = now;\n lastFps = null;\n return;\n }\n // If the current time has been rendered, return, Don't show infinity.\n if (now === lastRender) return;\n // Every time this function is ran, store the current time and remove times from half a second ago\n let smoothing = 0.9;\n let calculatedFps = 1000 / (now - lastRender);\n if (typeof lastFps !== \"number\") lastFps = calculatedFps;\n // Calculate a smoothed FPS so that numbers aren't changing too fast.\n const fps = Math.round(lastFps * smoothing + calculatedFps * (1 - smoothing));\n lastRender = now;\n\n // Show/Hide the element based on if there are any threads running\n if (runtime.threads.length === 0) {\n if (wasRunning) fpsCounterElement.classList.remove(\"show\");\n wasRunning = false;\n return;\n }\n if (!wasRunning) fpsCounterElement.classList.add(\"show\");\n if (fps !== lastFps || !wasRunning) fpsCounterElement.innerText = `FPS: ${lastFps = fps}`;\n wasRunning = true;\n };\n\n while (true) {\n await addon.tab.waitForElement('[class*=\"controls_controls-container\"]', {\n markAsSeen: true,\n reduxEvents: [\"scratch-gui/mode/SET_PLAYER\", \"fontsLoaded/SET_FONTS_LOADED\", \"scratch-gui/locales/SELECT_LOCALE\"],\n });\n addon.tab.appendToSharedSpace({ space: \"afterStopButton\", element: fpsCounterElement, order: 3 });\n }\n}"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;;;A","sourceRoot":""}