waves/public/assets/g/turbowarp/main/js/addon-entry-block-count.js
2025-04-09 17:11:14 -05:00

105 lines
3.6 KiB
JavaScript

(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([["addon-entry-block-count"],{
/***/ "./src/addons/addons/block-count/_runtime_entry.js":
/*!*********************************************************!*\
!*** ./src/addons/addons/block-count/_runtime_entry.js ***!
\*********************************************************/
/*! exports provided: resources */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resources", function() { return resources; });
/* harmony import */ var _blockcount_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blockcount.js */ "./src/addons/addons/block-count/blockcount.js");
/* generated by pull.js */
const resources = {
"blockcount.js": _blockcount_js__WEBPACK_IMPORTED_MODULE_0__["default"]
};
/***/ }),
/***/ "./src/addons/addons/block-count/blockcount.js":
/*!*****************************************************!*\
!*** ./src/addons/addons/block-count/blockcount.js ***!
\*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = (async function ({
addon,
console,
msg
}) {
const vm = addon.tab.traps.vm;
const getBlockCount = () => {
let blockCount = 0;
let scriptCount = 0;
let sprites = new Set(vm.runtime.targets.map(i => i.sprite.blocks._blocks));
sprites.forEach((sprite, i) => {
scriptCount += Object.values(sprite).filter(o => !o.parent).length; // Filter blocks that don't have a parent (meaning it's the top of a stack)
blockCount += Object.values(sprite).filter(o => !o.shadow).length; // shadow blocks should be filtered out
});
return {
blockCount,
scriptCount,
spriteCount: sprites.size - 1 // Backdrop counts as a target so we can subtract it
};
};
const addLiveBlockCount = async () => {
if (vm.editingTarget) {
let handler = null;
while (true) {
const topBar = await addon.tab.waitForElement("[class^='menu-bar_main-menu']", {
markAsSeen: true,
reduxEvents: ["scratch-gui/mode/SET_PLAYER", "fontsLoaded/SET_FONTS_LOADED", "scratch-gui/locales/SELECT_LOCALE"],
reduxCondition: state => !state.scratchGui.mode.isPlayerOnly
});
let display = topBar.appendChild(document.createElement("span"));
addon.tab.displayNoneWhileDisabled(display);
display.style.order = 1;
display.style.padding = "9px";
display.innerText = msg("blocks", {
num: getBlockCount().blockCount
});
let debounce; // debouncing values because of the way 'PROJECT_CHANGED' works
if (handler) {
vm.off("PROJECT_CHANGED", handler);
vm.runtime.off("PROJECT_LOADED", handler);
}
handler = async () => {
clearTimeout(debounce);
debounce = setTimeout(async () => {
display.innerText = msg("blocks", {
num: getBlockCount().blockCount
});
}, 1000);
};
vm.on("PROJECT_CHANGED", handler);
vm.runtime.on("PROJECT_LOADED", handler);
}
} else {
let timeout = setTimeout(function () {
addLiveBlockCount();
clearTimeout(timeout);
}, 1000);
}
};
addLiveBlockCount();
});
/***/ })
}]);
//# sourceMappingURL=addon-entry-block-count.js.map