|
(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([[1],{ |
|
|
|
"./node_modules/css-loader/index.js!./src/addons/addons/fps/userstyle.css": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
exports = module.exports = __webpack_require__( "./node_modules/css-loader/lib/css-base.js")(false); |
|
|
|
|
|
|
|
|
|
exports.push([module.i, ".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}", ""]); |
|
|
|
|
|
|
|
|
|
}), |
|
|
|
"./src/addons/addons/fps/_runtime_entry.js": |
|
|
|
|
|
|
|
|
|
(function(module, __webpack_exports__, __webpack_require__) { |
|
|
|
"use strict"; |
|
__webpack_require__.r(__webpack_exports__); |
|
__webpack_require__.d(__webpack_exports__, "resources", function() { return resources; }); |
|
var _userscript_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( "./src/addons/addons/fps/userscript.js"); |
|
var _css_loader_userstyle_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__( "./node_modules/css-loader/index.js!./src/addons/addons/fps/userstyle.css"); |
|
var _css_loader_userstyle_css__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_css_loader_userstyle_css__WEBPACK_IMPORTED_MODULE_1__); |
|
|
|
|
|
|
|
const resources = { |
|
"userscript.js": _userscript_js__WEBPACK_IMPORTED_MODULE_0__["default"], |
|
"userstyle.css": _css_loader_userstyle_css__WEBPACK_IMPORTED_MODULE_1___default.a |
|
}; |
|
|
|
}), |
|
|
|
"./src/addons/addons/fps/userscript.js": |
|
|
|
|
|
|
|
|
|
(function(module, __webpack_exports__, __webpack_require__) { |
|
|
|
"use strict"; |
|
__webpack_require__.r(__webpack_exports__); |
|
__webpack_exports__["default"] = (async function (_ref) { |
|
let { |
|
addon, |
|
console, |
|
msg |
|
} = _ref; |
|
const { |
|
vm |
|
} = addon.tab.traps; |
|
const { |
|
runtime |
|
} = vm; |
|
if (!vm.editingTarget) { |
|
await new Promise(resolve => runtime.once("PROJECT_LOADED", resolve)); |
|
} |
|
let fpsCounterElement = document.createElement("span"); |
|
fpsCounterElement.className = "fps-counter"; |
|
addon.tab.displayNoneWhileDisabled(fpsCounterElement); |
|
let lastRender; |
|
let lastFps; |
|
let wasRunning = false; |
|
const { |
|
renderer |
|
} = runtime; |
|
const _draw = renderer.draw; |
|
renderer.draw = function () { |
|
_draw.call(this); |
|
const now = runtime.currentMSecs; |
|
|
|
if (typeof lastRender !== "number" || now - lastRender > 500) { |
|
lastRender = now; |
|
lastFps = null; |
|
return; |
|
} |
|
|
|
if (now === lastRender) return; |
|
|
|
let smoothing = 0.9; |
|
let calculatedFps = 1000 / (now - lastRender); |
|
if (typeof lastFps !== "number") lastFps = calculatedFps; |
|
|
|
const fps = Math.round(lastFps * smoothing + calculatedFps * (1 - smoothing)); |
|
lastRender = now; |
|
|
|
|
|
if (runtime.threads.length === 0) { |
|
if (wasRunning) fpsCounterElement.classList.remove("show"); |
|
wasRunning = false; |
|
return; |
|
} |
|
if (!wasRunning) fpsCounterElement.classList.add("show"); |
|
if (fps !== lastFps || !wasRunning) fpsCounterElement.innerText = "FPS: ".concat(lastFps = fps); |
|
wasRunning = true; |
|
}; |
|
while (true) { |
|
await addon.tab.waitForElement('[class*="controls_controls-container"]', { |
|
markAsSeen: true, |
|
reduxEvents: ["scratch-gui/mode/SET_PLAYER", "fontsLoaded/SET_FONTS_LOADED", "scratch-gui/locales/SELECT_LOCALE"] |
|
}); |
|
addon.tab.appendToSharedSpace({ |
|
space: "afterStopButton", |
|
element: fpsCounterElement, |
|
order: 3 |
|
}); |
|
} |
|
}); |
|
|
|
}) |
|
|
|
}]); |
|
|