diff --git a/bubbo-bubbo/.eslintrc.json b/bubbo-bubbo/.eslintrc.json index 7b5e17f..1982aa4 100644 --- a/bubbo-bubbo/.eslintrc.json +++ b/bubbo-bubbo/.eslintrc.json @@ -7,8 +7,6 @@ "eslint:recommended", "plugin:@typescript-eslint/recommended" ], - "overrides": [ - ], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": "latest", @@ -19,147 +17,6 @@ "simple-import-sort" ], "rules": { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "comma-dangle": ["error", "always-multiline"], - "no-cond-assign": ["error", "except-parens"], - "no-console": ["error", { "allow": ["warn", "error"] }], - "@typescript-eslint/explicit-member-accessibility": [ - "error", - { - "accessibility": "explicit", - "overrides": { - "constructors": "off", - "methods": "explicit", - "properties": "explicit", - "parameterProperties": "explicit" - } - } - ], - "accessor-pairs": "error", - "array-callback-return": "error", - "block-scoped-var": "error", - "consistent-return": "error", - "curly": ["error", "multi-line"], - "dot-location": ["error", "property"], - "dot-notation": "error", - "eqeqeq": "error", - "no-alert": "error", - "no-caller": "error", - "no-div-regex": "error", - "no-else-return": "error", - "no-empty-function": "error", - "no-eq-null": "error", - "no-eval": "error", - "no-extend-native": "error", - "no-extra-bind": "error", - "no-extra-label": "error", - "no-implicit-coercion": ["error", { "boolean": false, "number": true, "string": true, "allow": [] }], - "no-implicit-globals": "error", - "no-implied-eval": "error", - "no-iterator": "error", - "no-labels": "error", - "no-lone-blocks": "error", - "no-loop-func": "error", - "no-multi-str": "error", - "no-new": "error", - "no-new-func": "error", - "no-new-wrappers": "error", - "no-octal-escape": "error", - "no-proto": "error", - "no-return-assign": "error", - "no-script-url": "error", - "no-self-compare": "error", - "no-sequences": "error", - "no-throw-literal": "error", - "no-unmodified-loop-condition": "error", - "no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true }], - "no-useless-call": "error", - "no-useless-concat": "error", - "no-void": "error", - "yoda": "error", - "no-catch-shadow": "error", - "no-label-var": "error", - "no-restricted-globals": "error", - "no-undef-init": "error", - "no-use-before-define": ["error", "nofunc"], - "simple-import-sort/imports": "error", - "simple-import-sort/exports": "error", - "brace-style": "off", // use prettier - "camelcase": ["error", { "properties": "always" }], - "comma-spacing": ["error", { "before": false, "after": true }], - "func-names": ["error", "always"], - "func-style": ["error", "declaration", { "allowArrowFunctions": true }], - "indent": ["error", 4, { "SwitchCase": 1, "VariableDeclarator": { "var": 1, "let": 1, "const": 1 } }], - "max-depth": ["error", 6], - "max-len": ["error", { "code": 125, "tabWidth": 4, "comments": 200 }], - "max-nested-callbacks": ["error", { "max": 5 }], - "max-params": ["error", { "max": 10 }], - "max-statements-per-line": ["error", { "max": 2 }], - "new-cap": ["error", { "newIsCap": true, "capIsNew": false, "properties": false }], - "padding-line-between-statements": [ - "error", - { "blankLine": "always", "prev": "*", "next": "return" }, - { "blankLine": "always", "prev": ["const", "let", "var"], "next": "*"}, - { "blankLine": "any", "prev": ["const", "let", "var"], "next": ["const", "let", "var"]} - ], - "no-array-constructor": "error", - "no-lonely-if": "error", - "no-mixed-operators": "off", - "lines-between-class-members": ["error", "always", { "exceptAfterSingleLine": true }], - "no-nested-ternary": "error", - "no-new-object": "error", - "no-restricted-syntax": ["error", "DebuggerStatement", "EmptyStatement", "LabeledStatement", "WithStatement"], - "no-unneeded-ternary": "error", - "one-var": ["error", "never"], - "quotes": ["error", "single", { "allowTemplateLiterals": true }], - "semi": ["error", "always"], - "space-before-function-paren": "off", // use prettier - "space-infix-ops": "error", - "spaced-comment": ["error", "always"], - "arrow-body-style": ["error", "as-needed"], - "no-confusing-arrow": ["error", { "allowParens": true }], - "no-useless-computed-key": "error", - "no-useless-rename": "error", - "no-var": "error", - "object-shorthand": "error", - "prefer-const": "error", - "prefer-template": "error", - "array-bracket-spacing": "off", - "arrow-parens": "off", - "arrow-spacing": "off", - "block-spacing": "off", - "comma-style": "off", - "computed-property-spacing": "off", - "eol-last": "off", - "func-call-spacing": "off", - "generator-star-spacing": "off", - "jsx-quotes": "off", - "key-spacing": "off", - "keyword-spacing": "off", - "linebreak-style": "off", - "new-parens": "off", - "newline-per-chained-call": "off", - "no-floating-decimal": "off", - "no-mixed-spaces-and-tabs": "off", - "no-multi-spaces": "off", - "no-multiple-empty-lines": "off", - "no-trailing-spaces": ["error", { "skipBlankLines": true }], - "no-whitespace-before-property": "off", - "object-curly-spacing": "off", - "one-var-declaration-per-line": "off", - "operator-linebreak": "off", - "padded-blocks": "off", - "quote-props": "off", - "rest-spread-spacing": "off", - "semi-spacing": "off", - "space-before-blocks": "off", - "space-in-parens": "off", - "space-unary-ops": "off", - "template-curly-spacing": "off", - "unicode-bom": "off", - "wrap-iife": "off", - "wrap-regex": "off", - "yield-star-spacing": "off" + "@typescript-eslint/no-explicit-any": "off" } } \ No newline at end of file diff --git a/bubbo-bubbo/.prettierrc.json b/bubbo-bubbo/.prettierrc similarity index 77% rename from bubbo-bubbo/.prettierrc.json rename to bubbo-bubbo/.prettierrc index e291c40..5738f88 100644 --- a/bubbo-bubbo/.prettierrc.json +++ b/bubbo-bubbo/.prettierrc @@ -2,5 +2,5 @@ "tabWidth": 4, "singleQuote": true, "trailingComma": "all", - "printWidth": 100 + "printWidth": 120 } diff --git a/bubbo-bubbo/package-lock.json b/bubbo-bubbo/package-lock.json index 9524dde..a3d4161 100644 --- a/bubbo-bubbo/package-lock.json +++ b/bubbo-bubbo/package-lock.json @@ -8,8 +8,11 @@ "name": "bubbo-bubbo", "version": "1.0.0", "dependencies": { - "gsap": "^3.12.2", - "pixi.js": "^8.0.0-rc.5", + "@pixi/sound": "6.0.0", + "@pixi/ui": "^2.0.0", + "gsap": "^3.12.5", + "pixi-filters": "^6.0.0", + "pixi.js": "^8.0.3", "typed-signals": "^2.5.0" }, "devDependencies": { @@ -22,15 +25,15 @@ "@assetpack/plugin-mipmap": "^0.8.0", "@assetpack/plugin-texture-packer": "^0.8.0", "@assetpack/plugin-webfont": "^0.8.0", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", - "eslint": "^8.52.0", - "eslint-plugin-simple-import-sort": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "eslint": "^8.57.0", + "eslint-plugin-simple-import-sort": "^12.0.0", "npm-run-all": "^4.1.5", - "prettier": "^3.0.3", + "prettier": "^3.2.5", "rimraf": "^5.0.5", - "typescript": "^5.2.2", - "vite": "^5.0.11" + "typescript": "^5.4.2", + "vite": "^5.1.6" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -610,9 +613,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -655,9 +658,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -796,13 +799,13 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -845,9 +848,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@isaacs/cliui": { @@ -1506,6 +1509,26 @@ "integrity": "sha512-maKotoKJCQiQGBJwfM+iYdQKjrPN/Tn9+72F4WIf706zp/5vKoxW688Rsktg5BX4Mcn7ZkZvcJYTxj2Mv87lFA==", "dev": true }, + "node_modules/@pixi/sound": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@pixi/sound/-/sound-6.0.0.tgz", + "integrity": "sha512-fEaCs2JmyYT1qqouFS3DydSccI35dyYD0pKK2hEbIGVDKUTvl224x0p4qme2YU9l465WRtM7gspLzP5fFf1mxQ==", + "peerDependencies": { + "pixi.js": "^8.0.0" + } + }, + "node_modules/@pixi/ui": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@pixi/ui/-/ui-2.0.0.tgz", + "integrity": "sha512-5RvAGSUFSFskU53gcPAkHvFlzqkzmS2hwjP2XPSn8+aE97ztW3YNnMXlx3tV0YAIXSQlfJyJevAImAxDGmn9oA==", + "dependencies": { + "tweedle.js": "^2.1.0", + "typed-signals": "^2.5.0" + }, + "peerDependencies": { + "pixi.js": "^8.0.2" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -1755,9 +1778,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", - "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/minimatch": { @@ -1773,22 +1796,22 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", - "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/type-utils": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1804,8 +1827,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -1814,15 +1837,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", - "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4" }, "engines": { @@ -1833,7 +1856,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -1842,13 +1865,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1859,13 +1882,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", - "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1877,7 +1900,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -1886,9 +1909,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1899,16 +1922,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -1925,18 +1949,33 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", - "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", "semver": "^7.5.4" }, "engines": { @@ -1947,16 +1986,16 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1994,9 +2033,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3408,16 +3447,16 @@ } }, "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -3463,9 +3502,9 @@ } }, "node_modules/eslint-plugin-simple-import-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", - "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.0.0.tgz", + "integrity": "sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==", "dev": true, "peerDependencies": { "eslint": ">=5.0.0" @@ -3623,9 +3662,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -4179,9 +4218,9 @@ } }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4296,9 +4335,9 @@ "dev": true }, "node_modules/gsap": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.12.2.tgz", - "integrity": "sha512-EkYnpG8qHgYBFAwsgsGEqvT1WUidX0tt/ijepx7z8EUJHElykg91RvW1XbkT59T0gZzzszOpjQv7SE41XuIXyQ==" + "version": "3.12.5", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.12.5.tgz", + "integrity": "sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==" }, "node_modules/handlebars": { "version": "4.7.8", @@ -6592,10 +6631,18 @@ "pixelmatch": "bin/pixelmatch" } }, + "node_modules/pixi-filters": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pixi-filters/-/pixi-filters-6.0.0.tgz", + "integrity": "sha512-9wJn4bfQKak+lefyk9BSCenhMBvGQi2t4Uz+BVqw6WK8wM2NgqeTC64mhXRtrdYeCG9gIFX0Lc6q1S8rBqwJbg==", + "peerDependencies": { + "pixi.js": ">=8.0.0-0" + } + }, "node_modules/pixi.js": { - "version": "8.0.0-rc.5", - "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-8.0.0-rc.5.tgz", - "integrity": "sha512-Xm3aPFzn6M8pYFeLr4J9kjl/PwTEz725OlBO6fyPXUXpDRl5h9nMSMeAaZhs4aq34Lck6a3HqxO+CBTZAuxpfg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-8.0.3.tgz", + "integrity": "sha512-+G0hg6Mzl2WMD4KG1O6B3H3WIWOCik/9PK2F/WyKMQd/qcHE3tIFkebtGbLqsbc7kRzZM1xT1qcyx8anSsmnvg==", "dependencies": { "@pixi/colord": "^2.9.6", "@types/css-font-loading-module": "^0.0.12", @@ -6636,9 +6683,9 @@ } }, "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, "funding": [ { @@ -6745,9 +6792,9 @@ } }, "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -8043,12 +8090,12 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -8091,6 +8138,11 @@ "node": "*" } }, + "node_modules/tweedle.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tweedle.js/-/tweedle.js-2.1.0.tgz", + "integrity": "sha512-0ReQgVjepoZkE6t0upWNgCRbplHkQJQYk1LStXugwSR728GLFmGDRuaQJlxeC/iBlxud6+P1RdODjaO25vHAqw==" + }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -8201,9 +8253,9 @@ } }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -8433,13 +8485,13 @@ } }, "node_modules/vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", "dev": true, "dependencies": { "esbuild": "^0.19.3", - "postcss": "^8.4.32", + "postcss": "^8.4.35", "rollup": "^4.2.0" }, "bin": { @@ -9027,9 +9079,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -9065,9 +9117,9 @@ } }, "@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true }, "@ffmpeg-installer/darwin-arm64": { @@ -9149,13 +9201,13 @@ "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "dependencies": { @@ -9187,9 +9239,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "@isaacs/cliui": { @@ -9701,6 +9753,21 @@ "integrity": "sha512-maKotoKJCQiQGBJwfM+iYdQKjrPN/Tn9+72F4WIf706zp/5vKoxW688Rsktg5BX4Mcn7ZkZvcJYTxj2Mv87lFA==", "dev": true }, + "@pixi/sound": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@pixi/sound/-/sound-6.0.0.tgz", + "integrity": "sha512-fEaCs2JmyYT1qqouFS3DydSccI35dyYD0pKK2hEbIGVDKUTvl224x0p4qme2YU9l465WRtM7gspLzP5fFf1mxQ==", + "requires": {} + }, + "@pixi/ui": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@pixi/ui/-/ui-2.0.0.tgz", + "integrity": "sha512-5RvAGSUFSFskU53gcPAkHvFlzqkzmS2hwjP2XPSn8+aE97ztW3YNnMXlx3tV0YAIXSQlfJyJevAImAxDGmn9oA==", + "requires": { + "tweedle.js": "^2.1.0", + "typed-signals": "^2.5.0" + } + }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -9860,9 +9927,9 @@ } }, "@types/json-schema": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", - "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "@types/minimatch": { @@ -9878,22 +9945,22 @@ "dev": true }, "@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", - "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/type-utils": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -9903,83 +9970,95 @@ } }, "@typescript-eslint/parser": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", - "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" } }, "@typescript-eslint/type-utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", - "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@typescript-eslint/utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", - "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" } }, @@ -10007,9 +10086,9 @@ "dev": true }, "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true }, "acorn-jsx": { @@ -11103,16 +11182,16 @@ "dev": true }, "eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -11170,9 +11249,9 @@ } }, "eslint-plugin-simple-import-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", - "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.0.0.tgz", + "integrity": "sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==", "dev": true, "requires": {} }, @@ -11270,9 +11349,9 @@ "dev": true }, "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -11701,9 +11780,9 @@ } }, "globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -11790,9 +11869,9 @@ "dev": true }, "gsap": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.12.2.tgz", - "integrity": "sha512-EkYnpG8qHgYBFAwsgsGEqvT1WUidX0tt/ijepx7z8EUJHElykg91RvW1XbkT59T0gZzzszOpjQv7SE41XuIXyQ==" + "version": "3.12.5", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.12.5.tgz", + "integrity": "sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==" }, "handlebars": { "version": "4.7.8", @@ -13524,10 +13603,16 @@ "pngjs": "^3.0.0" } }, + "pixi-filters": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pixi-filters/-/pixi-filters-6.0.0.tgz", + "integrity": "sha512-9wJn4bfQKak+lefyk9BSCenhMBvGQi2t4Uz+BVqw6WK8wM2NgqeTC64mhXRtrdYeCG9gIFX0Lc6q1S8rBqwJbg==", + "requires": {} + }, "pixi.js": { - "version": "8.0.0-rc.5", - "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-8.0.0-rc.5.tgz", - "integrity": "sha512-Xm3aPFzn6M8pYFeLr4J9kjl/PwTEz725OlBO6fyPXUXpDRl5h9nMSMeAaZhs4aq34Lck6a3HqxO+CBTZAuxpfg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-8.0.3.tgz", + "integrity": "sha512-+G0hg6Mzl2WMD4KG1O6B3H3WIWOCik/9PK2F/WyKMQd/qcHE3tIFkebtGbLqsbc7kRzZM1xT1qcyx8anSsmnvg==", "requires": { "@pixi/colord": "^2.9.6", "@types/css-font-loading-module": "^0.0.12", @@ -13564,9 +13649,9 @@ "dev": true }, "postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, "requires": { "nanoid": "^3.3.7", @@ -13640,9 +13725,9 @@ "dev": true }, "prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true }, "process": { @@ -14577,9 +14662,9 @@ } }, "ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "requires": {} }, @@ -14610,6 +14695,11 @@ "safe-buffer": "^5.0.1" } }, + "tweedle.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tweedle.js/-/tweedle.js-2.1.0.tgz", + "integrity": "sha512-0ReQgVjepoZkE6t0upWNgCRbplHkQJQYk1LStXugwSR728GLFmGDRuaQJlxeC/iBlxud6+P1RdODjaO25vHAqw==" + }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -14693,9 +14783,9 @@ } }, "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "dev": true }, "uglify-js": { @@ -14876,14 +14966,14 @@ } }, "vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", "dev": true, "requires": { "esbuild": "^0.19.3", "fsevents": "~2.3.3", - "postcss": "^8.4.32", + "postcss": "^8.4.35", "rollup": "^4.2.0" } }, diff --git a/bubbo-bubbo/package.json b/bubbo-bubbo/package.json index 078d5cd..b270031 100644 --- a/bubbo-bubbo/package.json +++ b/bubbo-bubbo/package.json @@ -23,8 +23,11 @@ "types": "tsc" }, "dependencies": { - "gsap": "^3.12.2", - "pixi.js": "^8.0.0-rc.5", + "gsap": "^3.12.5", + "pixi.js": "^8.0.3", + "pixi-filters": "^6.0.0", + "@pixi/ui": "^2.0.0", + "@pixi/sound": "6.0.0", "typed-signals": "^2.5.0" }, "devDependencies": { @@ -37,14 +40,14 @@ "@assetpack/plugin-mipmap": "^0.8.0", "@assetpack/plugin-texture-packer": "^0.8.0", "@assetpack/plugin-webfont": "^0.8.0", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", - "eslint": "^8.52.0", - "eslint-plugin-simple-import-sort": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "eslint": "^8.57.0", + "eslint-plugin-simple-import-sort": "^12.0.0", "npm-run-all": "^4.1.5", - "prettier": "^3.0.3", + "prettier": "^3.2.5", "rimraf": "^5.0.5", - "typescript": "^5.2.2", - "vite": "^5.0.11" + "typescript": "^5.4.2", + "vite": "^5.1.6" } } diff --git a/bubbo-bubbo/src/assets.ts b/bubbo-bubbo/src/assets.ts index 5f8e8e3..cc4e91f 100644 --- a/bubbo-bubbo/src/assets.ts +++ b/bubbo-bubbo/src/assets.ts @@ -12,8 +12,7 @@ import manifest from '../src/manifest.json'; export const resolveJsonUrl = { extension: ExtensionType.ResolveParser, - test: (value: string): boolean => - Resolver.RETINA_PREFIX.test(value) && value.endsWith('.json'), + test: (value: string): boolean => Resolver.RETINA_PREFIX.test(value) && value.endsWith('.json'), parse: resolveTextureUrl.parse, } as ResolveURLParser; diff --git a/bubbo-bubbo/src/game/entities/Bubble.ts b/bubbo-bubbo/src/game/entities/Bubble.ts index 8867ede..4e81f7b 100644 --- a/bubbo-bubbo/src/game/entities/Bubble.ts +++ b/bubbo-bubbo/src/game/entities/Bubble.ts @@ -81,9 +81,7 @@ export class Bubble extends SpoofBubble { // Used to debug the visuals of the physics body, only accounts for body radius and centers on bubble view if (designConfig.debugBody) { - this.view.addChild( - new Graphics().circle(0, 0, this.body.radius).fill({ color: 0xffffff, alpha: 0.5 }), - ); + this.view.addChild(new Graphics().circle(0, 0, this.body.radius).fill({ color: 0xffffff, alpha: 0.5 })); } } diff --git a/bubbo-bubbo/src/game/entities/BubbleReserve.ts b/bubbo-bubbo/src/game/entities/BubbleReserve.ts index 746c481..84a1608 100644 --- a/bubbo-bubbo/src/game/entities/BubbleReserve.ts +++ b/bubbo-bubbo/src/game/entities/BubbleReserve.ts @@ -23,28 +23,31 @@ export class BubbleReserve { private _base: Sprite; constructor() { + const baseWrapper = new Container(); + baseWrapper.scale.set(0.9); + this.view.addChild(baseWrapper); + // Create a sprite instance from the "bubble-reserve-base" texture. this._base = Sprite.from('bubble-reserve-base'); - // Set the anchor point and scale of the base. this._base.anchor.set(0.5); - this._base.scale.set(0.9); + baseWrapper.addChild(this._base); - this.view.addChild(this._base); + const ringWrapper = new Container(); + ringWrapper.scale = 0.85; + ringWrapper.y -= 2; + baseWrapper.addChild(ringWrapper); const ring = Sprite.from('bubble-reserve-ring'); - // Set the anchor point and scale of the base to be less than the base. // Move two pixels to offset the shadow ring.anchor.set(0.5); - ring.scale.set(0.85); - ring.y -= 2; - this._base.addChild(ring); + ringWrapper.addChild(ring); // Create the bubble view to represent the next shot for the cannon this._bubbleView = new BubbleView(); this._bubbleView.view.scale.set(0); - ring.addChild(this._bubbleView.view); + ringWrapper.addChild(this._bubbleView.view); } /** diff --git a/bubbo-bubbo/src/game/entities/Cannon.ts b/bubbo-bubbo/src/game/entities/Cannon.ts index 6eb2259..9926c56 100644 --- a/bubbo-bubbo/src/game/entities/Cannon.ts +++ b/bubbo-bubbo/src/game/entities/Cannon.ts @@ -67,8 +67,7 @@ export class Cannon { } // Set the color of the cannon arrow and main body using chain assignment - this._parts['cannon-arrow'].tint = this._parts['cannon-main'].tint = - boardConfig.bubbleTypeToColor[value]; + this._parts['cannon-arrow'].tint = this._parts['cannon-main'].tint = boardConfig.bubbleTypeToColor[value]; // Set the type of the current bubble view this._bubbleView.type = value; diff --git a/bubbo-bubbo/src/game/systems/AimSystem.ts b/bubbo-bubbo/src/game/systems/AimSystem.ts index dfa07f6..3f9caa1 100644 --- a/bubbo-bubbo/src/game/systems/AimSystem.ts +++ b/bubbo-bubbo/src/game/systems/AimSystem.ts @@ -158,12 +158,7 @@ export class AimSystem implements System { * @param angle - The angle of the line * @param alreadyIntersected - Whether or not the line has already intersected the outer wall (should only be used by the function itself) */ - private _calculateEdgeNodes( - originX: number, - originY: number, - angle: number, - alreadyIntersected?: Line, - ) { + private _calculateEdgeNodes(originX: number, originY: number, angle: number, alreadyIntersected?: Line) { // Get a line instance from the object pool and add it to the `_aimLines` array const line = pool.get(Line); diff --git a/bubbo-bubbo/src/game/systems/EffectsSystem.ts b/bubbo-bubbo/src/game/systems/EffectsSystem.ts index f23010e..e663114 100644 --- a/bubbo-bubbo/src/game/systems/EffectsSystem.ts +++ b/bubbo-bubbo/src/game/systems/EffectsSystem.ts @@ -1,5 +1,4 @@ -// TODO: Filters v8 Types? -import { ShockwaveFilter } from '@pixi/filter-shockwave'; +import { ShockwaveFilter } from 'pixi-filters/shockwave'; import { sfx } from '../../audio'; import { randomRange } from '../../utils/maths/rand'; @@ -83,7 +82,7 @@ export class EffectsSystem implements System { this._activeShockwave = false; // Remove any filters from the game container - this.game.gameContainer.filters = null; + this.game.gameContainer.filters = []; // Set the game container position back to its original position this.game.gameContainer.x = this.game.gameContainerPosition.x; @@ -99,10 +98,8 @@ export class EffectsSystem implements System { if (!this._activeShockwave) return; // Update the position of the game container to simulate screen shake. - this.game.gameContainer.x = - this.game.gameContainerPosition.x + Math.random() * this._shockIntensity; - this.game.gameContainer.y = - this.game.gameContainerPosition.y + Math.random() * this._shockIntensity; + this.game.gameContainer.x = this.game.gameContainerPosition.x + Math.random() * this._shockIntensity; + this.game.gameContainer.y = this.game.gameContainerPosition.y + Math.random() * this._shockIntensity; // Stop the shockwave effect if the time has exceeded a certain threshold. if (this.shockwaveFilter.time > 0.4) this.stopShockwave(); diff --git a/bubbo-bubbo/src/game/systems/HudSystem.ts b/bubbo-bubbo/src/game/systems/HudSystem.ts index 8d4c459..9d88406 100644 --- a/bubbo-bubbo/src/game/systems/HudSystem.ts +++ b/bubbo-bubbo/src/game/systems/HudSystem.ts @@ -79,7 +79,7 @@ export class HudSystem implements System { // Create the top section of the hud // Create the top hud element - this._topTray = new NineSliceSprite({ texture: Texture.from('top-tray')}); + this._topTray = new NineSliceSprite({ texture: Texture.from('top-tray') }); this._topTray.x = -designConfig.content.width * 0.5; this._topTray.width = designConfig.content.width; @@ -94,10 +94,8 @@ export class HudSystem implements System { this._hiddenTitle.view.scale.set(0.85); this._hiddenTitle.view.y -= 55; - this._roundedTray.addChild(this._hiddenTitle.view); - // Create the bottom section of the hud - this._bottomTray = new NineSliceSprite({ texture: Texture.from('bottom-tray')}); + this._bottomTray = new NineSliceSprite({ texture: Texture.from('bottom-tray') }); this._bottomTray.height = boardConfig.bounceLine - 30; this._bottomTray.pivot.y = this._bottomTray.height; this._bottomTray.x -= designConfig.content.width * 0.5; @@ -107,11 +105,11 @@ export class HudSystem implements System { this._scoreCounter = new ScoreCounter(); // Create the visual representation of the left bounds - this._leftBorder = new NineSliceSprite({ texture: Texture.from('game-side-border')}); + this._leftBorder = new NineSliceSprite({ texture: Texture.from('game-side-border') }); this._leftBorder.x = -(designConfig.content.width * 0.5) - this._leftBorder.width; // Create the visual representation of the right bounds - this._rightBorder = new NineSliceSprite({ texture: Texture.from('game-side-border')}); + this._rightBorder = new NineSliceSprite({ texture: Texture.from('game-side-border') }); this._rightBorder.x = designConfig.content.width * 0.5; // Get a reference to the pause system @@ -134,7 +132,7 @@ export class HudSystem implements System { designConfig.content.width, designConfig.content.height, ) - .fill({ color: 0x030320}); + .fill({ color: 0x030320 }); // Create the tutorial popout this._helperPanel = new HelperPanel(); @@ -147,6 +145,7 @@ export class HudSystem implements System { this._rightBorder, this._topTray, this._roundedTray, + this._hiddenTitle.view, ); this._gameHudContainer.addChild( this._bottomTray, @@ -232,9 +231,7 @@ export class HudSystem implements System { this._toasterList.push(toaster); // Pop up the toaster and assign it score value and a callback for when the animation ends // Add the toaster animation to the pause system - this.game.systems - .get(PauseSystem) - .addTween(toaster.popScore(increment, this._killToaster.bind(this))); + this.game.systems.get(PauseSystem).addTween(toaster.popScore(increment, this._killToaster.bind(this))); // Add the toaster to the screen this.view.addChild(toaster.view); // Update the score counter @@ -290,8 +287,7 @@ export class HudSystem implements System { this._rightBorder.height = h; // Position the score counter - this._scoreCounter.view.x = - designConfig.content.width * 0.5 - this._scoreCounter.view.width - 30; + this._scoreCounter.view.x = designConfig.content.width * 0.5 - this._scoreCounter.view.width - 30; this._scoreCounter.view.y = -70; } @@ -301,8 +297,7 @@ export class HudSystem implements System { const topTrayHeight = this._height - designConfig.content.height; // Set the height of the top tray and its y position - this._topTray.height = - topTrayHeight + this._topTrayOffsetRatio * designConfig.content.height; + this._topTray.height = topTrayHeight + this._topTrayOffsetRatio * designConfig.content.height; this._topTray.y = -this._height; // Reset the scale of the rounded tray @@ -315,6 +310,8 @@ export class HudSystem implements System { this._roundedTray.visible = mod > 0.9; this._roundedTray.scale.set(Math.min(mod, 1)); this._roundedTray.y = this._topTray.y + this._topTray.height - this._topTray.height * 0.5; + this._hiddenTitle.view.y = this._topTray.y + this._topTray.height * 0.5 - 55; + this._hiddenTitle.view.scale = this._roundedTray.scale.x * 0.85; } /** diff --git a/bubbo-bubbo/src/game/systems/LevelSystem.ts b/bubbo-bubbo/src/game/systems/LevelSystem.ts index 95fa466..58bcaf1 100644 --- a/bubbo-bubbo/src/game/systems/LevelSystem.ts +++ b/bubbo-bubbo/src/game/systems/LevelSystem.ts @@ -5,13 +5,7 @@ import { Signal } from 'typed-signals'; import { sfx } from '../../audio'; import { normalize, scale, sub } from '../../utils/maths/point'; import { randomRange } from '../../utils/maths/rand'; -import { - boardConfig, - BubbleType, - isSpecialType, - randomType, - SpecialBubbleType, -} from '../boardConfig'; +import { boardConfig, BubbleType, isSpecialType, randomType, SpecialBubbleType } from '../boardConfig'; import { designConfig } from '../designConfig'; import { Bubble, SpoofBubble } from '../entities/Bubble'; import { BubbleLine, MAX_BUBBLE_INDEX } from '../entities/BubbleLine'; @@ -252,14 +246,8 @@ export class LevelSystem implements System { // The number of new lines is incremented by 1 this._newLineCount++; - const { - urgentMinLines, - animInTime, - urgentAnimInTime, - maxDecrement, - decrementIn, - animInDecrement, - } = boardConfig.newLine; + const { urgentMinLines, animInTime, urgentAnimInTime, maxDecrement, decrementIn, animInDecrement } = + boardConfig.newLine; // Determine urgency based on the amount of lines in the grid const isUrgent = this.lines.length < urgentMinLines; @@ -280,10 +268,7 @@ export class LevelSystem implements System { This decrement is capped by the maxDecrement configuration parameter */ if (this._newLineCount % decrementIn === 0) { - this._newLineSpeedDecrement = Math.min( - this._newLineSpeedDecrement + animInDecrement, - maxDecrement, - ); + this._newLineSpeedDecrement = Math.min(this._newLineSpeedDecrement + animInDecrement, maxDecrement); } } @@ -438,8 +423,7 @@ export class LevelSystem implements System { let selection = 0; // Set the amount of total chance remaining after subtracting the chance of previous selected bubble types in a random selection process - let remainingChance = - Math.random() * totalChance - chancePerType.get(boardConfig.bubbleTypes[0])!; + let remainingChance = Math.random() * totalChance - chancePerType.get(boardConfig.bubbleTypes[0])!; while (selection < boardConfig.bubbleTypes.length && remainingChance > 0) { // Increment selection @@ -485,8 +469,7 @@ export class LevelSystem implements System { // If the gridJ is one more than the bottom line, then a new line is added // Otherwise, the bubble is placed on the existing line gridJ. - const line: BubbleLine = - gridJ === this.getLine('bottom').j + 1 ? this.addLine(false) : this.lines[gridJ]; + const line: BubbleLine = gridJ === this.getLine('bottom').j + 1 ? this.addLine(false) : this.lines[gridJ]; // Connecting the bubble to the grid location (gridI and line.j). bubble.connect(gridI, line.j); @@ -495,9 +478,7 @@ export class LevelSystem implements System { const gridExpectedEven = gridI % 2 === 0; if (gridExpectedEven !== line.isEven) { - console.error( - `Trying to set even = ${gridExpectedEven} where line is even = ${line.isEven}`, - ); + console.error(`Trying to set even = ${gridExpectedEven} where line is even = ${line.isEven}`); } // Add bubble to the line, set its x position @@ -711,11 +692,7 @@ export class LevelSystem implements System { * @param gridHit - An object that holds the coordinates of the bubble that the projectile hit. * @param prioritiseSide - A string value either "left" or "right" which represents the side that should be prioritized to connect the projectile (should only be used by the function). */ - public handleConnect( - projectile: Bubble, - gridHit: { i: number; j: number }, - prioritiseSide?: 'left' | 'right', - ) { + public handleConnect(projectile: Bubble, gridHit: { i: number; j: number }, prioritiseSide?: 'left' | 'right') { // Get the line holding the bubble that has been hit const hitLine = this.lines[gridHit.j]; // Get the neighbouring coordinates of that hit bubble @@ -735,8 +712,7 @@ export class LevelSystem implements System { spoof.i = gridHit.i; // Determine which side the project hit - const side: typeof prioritiseSide = - projectileX < this.calculateBubbleX(spoof) ? 'left' : 'right'; + const side: typeof prioritiseSide = projectileX < this.calculateBubbleX(spoof) ? 'left' : 'right'; neighbours.forEach((coords) => { spoof.i = coords.i; @@ -752,9 +728,7 @@ export class LevelSystem implements System { // If prioritiseSide is defined, it filters the neighboring bubbles to only include those on the specified side. if (prioritiseSide && prioritiseSide !== relativeSide) return; - const dist = Math.sqrt( - Math.pow(projectileX - estimatedPosX, 2) + Math.pow(projectileY - estimatedPosY, 2), - ); + const dist = Math.sqrt(Math.pow(projectileX - estimatedPosX, 2) + Math.pow(projectileY - estimatedPosY, 2)); distances.push({ i: coords.i, @@ -773,10 +747,7 @@ export class LevelSystem implements System { distances = distances .splice(0, 3) // Filter this list again to only include valid grid positions (where there is no bubble yet and it is within the grid bounds). - .filter( - (value) => - this.isValidGrid(value.i, value.j, true) && !this.getBubbleAt(value.i, value.j), - ); + .filter((value) => this.isValidGrid(value.i, value.j, true) && !this.getBubbleAt(value.i, value.j)); // If there are no valid positions left, the function calls itself again with the closest neighboring bubble (backup) and the prioritized side. if (distances.length === 0 && backup) { @@ -932,10 +903,7 @@ export class LevelSystem implements System { // Add the unvisited neighbours that match the type or if matchType is false const toAdd = neighbours.filter( - (n) => - n && - !visited.includes(n) && - (!matchType || !isSpecial(n.type) || initialBubble === current), + (n) => n && !visited.includes(n) && (!matchType || !isSpecial(n.type) || initialBubble === current), )!; toVisit.push(...toAdd); diff --git a/bubbo-bubbo/src/game/systems/SpaceDecorSystem.ts b/bubbo-bubbo/src/game/systems/SpaceDecorSystem.ts index dd006b0..6b3e288 100644 --- a/bubbo-bubbo/src/game/systems/SpaceDecorSystem.ts +++ b/bubbo-bubbo/src/game/systems/SpaceDecorSystem.ts @@ -100,17 +100,13 @@ class BubbleOrbit { this._subBubbles[i].type = randomType(); // Scale the sub-bubble based on the main bubble's scale. - this._subBubbles[i].view.scale.set( - this._mainBubble.view.scale.x * randomRange(0.3, 0.7, false), - ); + this._subBubbles[i].view.scale.set(this._mainBubble.view.scale.x * randomRange(0.3, 0.7, false)); // Initialize the orbit angle, direction, radius, and speed for this sub-bubble. this._orbitAngles[i] = Math.random() * Math.PI; this._orbitDirections[i] = Math.sign(randomRange(-1, 1, false)); - this._orbitRadii[i] = - this._mainBubble.view.width * 0.5 + this._subBubbles[i].view.width * 0.5 + 10; - this._orbitSpeeds[i] = - (this._subBubbles[i].view.scale.x / this._mainBubble.view.scale.x) * 0.5; + this._orbitRadii[i] = this._mainBubble.view.width * 0.5 + this._subBubbles[i].view.width * 0.5 + 10; + this._orbitSpeeds[i] = (this._subBubbles[i].view.scale.x / this._mainBubble.view.scale.x) * 0.5; this.view.addChild(this._subBubbles[i].view); } @@ -211,10 +207,7 @@ export class SpaceDecorSystem { count--; // Check if the point is within the minimum width from the center - if ( - Math.abs(x - this._width / 2) < minWidth && - Math.abs(y - this._height / 2) < minWidth - ) { + if (Math.abs(x - this._width / 2) < minWidth && Math.abs(y - this._height / 2) < minWidth) { continue; } @@ -269,9 +262,7 @@ export class SpaceDecorSystem { // Check if the window width is greater than the minimum width for the content if (w > designConfig.content.width * 2) { // Determine the number of decor elements based on whether the device is a mobile device or not - const decorCount = device.isMobileDevice() - ? designConfig.decorCountMobile - : designConfig.decorCountDesktop; + const decorCount = device.isMobileDevice() ? designConfig.decorCountMobile : designConfig.decorCountDesktop; // Generate the new decor elements this._createDecor(this.generateRandomPoints(decorCount)); diff --git a/bubbo-bubbo/src/navigation.ts b/bubbo-bubbo/src/navigation.ts index 6641507..8b2cc52 100644 --- a/bubbo-bubbo/src/navigation.ts +++ b/bubbo-bubbo/src/navigation.ts @@ -156,11 +156,9 @@ class Navigation { // Unlink resize handler if exists if (isOverlay) { - this.currentOverlayResize && - window.removeEventListener('resize', this.currentOverlayResize); + this.currentOverlayResize && window.removeEventListener('resize', this.currentOverlayResize); } else { - this.currentScreenResize && - window.removeEventListener('resize', this.currentScreenResize); + this.currentScreenResize && window.removeEventListener('resize', this.currentScreenResize); } // Unlink update function if method is available diff --git a/bubbo-bubbo/src/screens/LoadScreen.ts b/bubbo-bubbo/src/screens/LoadScreen.ts index 92ac1a5..a7cf100 100644 --- a/bubbo-bubbo/src/screens/LoadScreen.ts +++ b/bubbo-bubbo/src/screens/LoadScreen.ts @@ -97,11 +97,7 @@ export class LoadScreen extends Container { this._spinner.rotation -= delta / 60; // Lerp the rotations of the cannon to the spinner rotation but with an offset - this._cannon.rotation = lerp( - this._cannon.rotation, - this._spinner.rotation - this._targetOffset, - 0.1, - ); + this._cannon.rotation = lerp(this._cannon.rotation, this._spinner.rotation - this._targetOffset, 0.1); // When tick is zero, randomise aforementioned offset if (this._tick <= 0) { diff --git a/bubbo-bubbo/src/screens/ResultScreen.ts b/bubbo-bubbo/src/screens/ResultScreen.ts index 7ff4ff1..3e64747 100644 --- a/bubbo-bubbo/src/screens/ResultScreen.ts +++ b/bubbo-bubbo/src/screens/ResultScreen.ts @@ -214,17 +214,11 @@ class ResultsPanel { const verticalGap = 30; // Create stat instances and attach to panel - this._bubblesPoppedStat = new StatView( - i18n.t('resultsBreakdownPopped'), - breakdownPanel.width * 0.9, - ); + this._bubblesPoppedStat = new StatView(i18n.t('resultsBreakdownPopped'), breakdownPanel.width * 0.9); this._bubblesPoppedStat.view.y = verticalOffset - verticalGap; this._comboStat = new StatView(i18n.t('resultsBreakdownCombo'), breakdownPanel.width * 0.9); this._comboStat.view.y = verticalOffset; - this._powerupsUsedStat = new StatView( - i18n.t('resultsBreakdownPowerups'), - breakdownPanel.width * 0.9, - ); + this._powerupsUsedStat = new StatView(i18n.t('resultsBreakdownPowerups'), breakdownPanel.width * 0.9); this._powerupsUsedStat.view.y = verticalOffset + verticalGap; informationContainer.addChild( diff --git a/bubbo-bubbo/src/screens/TitleScreen.ts b/bubbo-bubbo/src/screens/TitleScreen.ts index 5d64884..6119b5c 100644 --- a/bubbo-bubbo/src/screens/TitleScreen.ts +++ b/bubbo-bubbo/src/screens/TitleScreen.ts @@ -182,8 +182,7 @@ export class TitleScreen extends Container implements AppScreen { this._cannon.view.y = h - this._footer.height * 0.5; this._playBtn.x = w * 0.5; - this._playBtn.y = - this._cannon.view.y - this._cannon.view.height / 2 - this._playBtn.height / 2 + 10; + this._playBtn.y = this._cannon.view.y - this._cannon.view.height / 2 - this._playBtn.height / 2 + 10; this._portholeOne.view.x = 40; this._portholeOne.view.y = 40; @@ -233,9 +232,7 @@ export class TitleScreen extends Container implements AppScreen { const type = randomType(); // Use the type to assign a colour - this._footer = new Graphics() - .ellipse(0, 0, 300, 125) - .fill({ color: boardConfig.bubbleTypeToColor[type] }); + this._footer = new Graphics().ellipse(0, 0, 300, 125).fill({ color: boardConfig.bubbleTypeToColor[type] }); this._bottomAnimContainer.addChild(this._footer); this._cannon = new Cannon(); diff --git a/bubbo-bubbo/src/ui/HelperPanel.ts b/bubbo-bubbo/src/ui/HelperPanel.ts index 78514d7..cf272d4 100644 --- a/bubbo-bubbo/src/ui/HelperPanel.ts +++ b/bubbo-bubbo/src/ui/HelperPanel.ts @@ -35,11 +35,9 @@ export class HelperPanel { }); helpText.anchor.set(0.5); - - helpText.x = -75; - panel.addChild(helpText); - - this.view.addChild(panel); + helpText.x = -55; + helpText.scale.set(0.75); + this.view.addChild(panel, helpText); } /** diff --git a/bubbo-bubbo/src/ui/ScoreCounter.ts b/bubbo-bubbo/src/ui/ScoreCounter.ts index e36bd59..5329cc5 100644 --- a/bubbo-bubbo/src/ui/ScoreCounter.ts +++ b/bubbo-bubbo/src/ui/ScoreCounter.ts @@ -35,7 +35,8 @@ export class ScoreCounter { // Offset text this._scoreText.x = 20; this._scoreText.anchor.y = 0.5; - this._base.addChild(this._scoreText); + this._scoreText.scale.set(0.75); + this.view.addChild(this._scoreText); // Set the score to 0 this.setScore(0); diff --git a/bubbo-bubbo/src/ui/Title.ts b/bubbo-bubbo/src/ui/Title.ts index d04d93b..31df1e8 100644 --- a/bubbo-bubbo/src/ui/Title.ts +++ b/bubbo-bubbo/src/ui/Title.ts @@ -17,6 +17,7 @@ export class Title { // Add top part of the title const bubboText = i18n.t('gameTitle'); + const topWrapper = new Container(); const titleTop = new Text({ text: bubboText, style: { @@ -27,15 +28,17 @@ export class Title { }); titleTop.anchor.set(0.5); - this.view.addChild(titleTop); + topWrapper.addChild(titleTop); + this.view.addChild(topWrapper); // Assign a random type to the top title's bubble const bubbleTop = new BubbleView(randomType()); bubbleTop.view.position.set(titleTop.width * 0.5 - 33.5, 7); bubbleTop.view.scale.set(1.6); - titleTop.addChild(bubbleTop.view); + topWrapper.addChild(bubbleTop.view); + const bottomWrapper = new Container(); // Add bottom part of the title const titleBottom = new Text({ text: bubboText, @@ -46,17 +49,18 @@ export class Title { }, }); - titleBottom.y = titleTop.height - 20; + bottomWrapper.y = titleTop.height - 20; titleBottom.anchor.set(0.5); - this.view.addChild(titleBottom); + bottomWrapper.addChild(titleBottom); + this.view.addChild(bottomWrapper); // Assign a random type to the bottom title's bubble const bubbleBottom = new BubbleView(randomType()); bubbleBottom.view.position.set(titleBottom.width * 0.5 - 33.5, 7); bubbleBottom.view.scale.set(1.6); - titleBottom.addChild(bubbleBottom.view); + bottomWrapper.addChild(bubbleBottom.view); // Create sub header const subtitle = new Text({ @@ -69,7 +73,7 @@ export class Title { }); subtitle.anchor.set(0.5); - subtitle.y = titleBottom.y + titleBottom.height - 30; + subtitle.y = bottomWrapper.y + bottomWrapper.height - 30; this.view.addChild(subtitle); } } diff --git a/bubbo-bubbo/src/ui/buttons/PrimaryButton.ts b/bubbo-bubbo/src/ui/buttons/PrimaryButton.ts index f66bedb..ac3f9dd 100644 --- a/bubbo-bubbo/src/ui/buttons/PrimaryButton.ts +++ b/bubbo-bubbo/src/ui/buttons/PrimaryButton.ts @@ -29,7 +29,7 @@ export class PrimaryButton extends FancyButton { const text = new Text({ text: options?.text ?? '', style: { - // Predefine text styles that can be overwritten + // Predefine text styles that can be overwritten fill: 0x49c8ff, fontFamily: 'Bungee Regular', fontWeight: 'bold', diff --git a/bubbo-bubbo/src/ui/buttons/SecondaryButton.ts b/bubbo-bubbo/src/ui/buttons/SecondaryButton.ts index 24187c4..15f4ed1 100644 --- a/bubbo-bubbo/src/ui/buttons/SecondaryButton.ts +++ b/bubbo-bubbo/src/ui/buttons/SecondaryButton.ts @@ -36,7 +36,7 @@ export class SecondaryButton extends FancyButton { const text = new Text({ text: options?.text ?? '', style: { - // Predefine text styles that can be overwritten + // Predefine text styles that can be overwritten fill: 0x000000, fontFamily: 'Bungee Regular', fontWeight: 'bold', diff --git a/bubbo-bubbo/src/utils/device.ts b/bubbo-bubbo/src/utils/device.ts index 6edf891..073976a 100644 --- a/bubbo-bubbo/src/utils/device.ts +++ b/bubbo-bubbo/src/utils/device.ts @@ -4,8 +4,6 @@ export const device = { * @returns true if the device is mobile, false otherwise. */ isMobileDevice() { - return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Windows Phone|Opera Mini/i.test( - navigator.userAgent, - ); + return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Windows Phone|Opera Mini/i.test(navigator.userAgent); }, };