commit b5395f25cf30253fa7ec2a65f38bee42701a5209 Author: Florian Sylvain Date: Thu Feb 8 14:13:32 2024 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c93fb03 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo + +.env \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..edfa552 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "trailingComma": "none", + "tabWidth": 4, + "semi": false, + "singleQuote": true, + "useTabs": true, + "printWidth": 100 +} \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..c0a6e5a --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..d4b1f8d --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# space-invader + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. + +If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: + +1. Disable the built-in TypeScript Extension + 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` +2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/index.html b/index.html new file mode 100644 index 0000000..e6239b6 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Space Battle + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b890289 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1974 @@ +{ + "name": "space-invader", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "space-invader", + "version": "0.0.0", + "dependencies": { + "pinia": "^2.1.7", + "pixi.js": "^7.4.0", + "vue": "^3.4.15", + "vue-router": "^4.2.5" + }, + "devDependencies": { + "@tsconfig/node20": "^20.1.2", + "@types/node": "^20.11.10", + "@vitejs/plugin-vue": "^5.0.3", + "@vue/tsconfig": "^0.5.1", + "npm-run-all2": "^6.1.1", + "typescript": "~5.3.0", + "vite": "^5.0.11", + "vue-tsc": "^1.8.27" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@pixi/accessibility": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/accessibility/-/accessibility-7.4.0.tgz", + "integrity": "sha512-muosfpn333YNz2s7mtoVlKvcXswFOJ4r+5rePn3r/95KQIpuB+xX6pETuzGq0p8uOpKxtkNokGj5s2dyM0blHA==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0", + "@pixi/events": "7.4.0" + } + }, + "node_modules/@pixi/app": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/app/-/app-7.4.0.tgz", + "integrity": "sha512-9pDB974rfuObG5YHvR7kdWhDiIV26b0GeC4vHRQB3bkmltguMi8SCQ9WQKH3WwRLaflzf9EMZpgX10cU1gLgKg==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0" + } + }, + "node_modules/@pixi/assets": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/assets/-/assets-7.4.0.tgz", + "integrity": "sha512-Z7J2ZYSZ41Pr3CK0IXgtVV1HiLm1sG0AOZHAPMwB82wNdIDvmWowo/LkXvQmSHFLxFlEz1hWOdOFs1daWAeIfg==", + "dependencies": { + "@types/css-font-loading-module": "^0.0.12" + }, + "peerDependencies": { + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/color": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/color/-/color-7.4.0.tgz", + "integrity": "sha512-Qgn3OSW9SFCQ8wrm524anENwIAeRTORC014LkTqaBQrpuOUHrx11SCy4kNFaQyZWO1DCTe4m8g/foCK7zJM7cg==", + "dependencies": { + "@pixi/colord": "^2.9.6" + } + }, + "node_modules/@pixi/colord": { + "version": "2.9.6", + "resolved": "https://registry.npmjs.org/@pixi/colord/-/colord-2.9.6.tgz", + "integrity": "sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==" + }, + "node_modules/@pixi/compressed-textures": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/compressed-textures/-/compressed-textures-7.4.0.tgz", + "integrity": "sha512-M9bpOFeUPuss57mbRtJOD8cGh+X8xsfx8YMBqWzQTAfbA8hsTQ+O4arbMTyIxqZnaTvpmhlhTKwaVaI2V15NAg==", + "peerDependencies": { + "@pixi/assets": "7.4.0", + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/constants": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-7.4.0.tgz", + "integrity": "sha512-jQMPMRqkOTjI4D0cHWqvu+pofw6bIa8861x2vp2kNsmM2zcBO/b01AlmILi5pEDk0nTumgzgmVHZ7dtT9KxfQw==" + }, + "node_modules/@pixi/core": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-7.4.0.tgz", + "integrity": "sha512-X6UiDzmdd2oRK3zQggDrWNIlw5rjZakByRIwI6MRgj17FGkpNkCY78dO1snZ6qnpUoo5M03aSUCFCfq6LKA5Bg==", + "dependencies": { + "@pixi/color": "7.4.0", + "@pixi/constants": "7.4.0", + "@pixi/extensions": "7.4.0", + "@pixi/math": "7.4.0", + "@pixi/runner": "7.4.0", + "@pixi/settings": "7.4.0", + "@pixi/ticker": "7.4.0", + "@pixi/utils": "7.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/display": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-7.4.0.tgz", + "integrity": "sha512-l+K6H9CqB2tQltpaxal3dIPPAOWhBWszrJm5EbK5sVVQFcaWXgeS/Hmniz0DhT7OpPmstcx4nii9hZgRkmMmEg==", + "peerDependencies": { + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/events": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/events/-/events-7.4.0.tgz", + "integrity": "sha512-9hshDahiFDbl3ZJt9cqutST+2aIZ8/bT29VVFuN2f0ZHatbEHVl46jqu0IL8d+TAlNUr+SI/JEaPA6/MR9sH6w==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0" + } + }, + "node_modules/@pixi/extensions": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/extensions/-/extensions-7.4.0.tgz", + "integrity": "sha512-bX0aw6z2D9bJ5NOsrbuWXnBR7sy2z+dyq2EQ2/t0dF6Si764r8FiA0QUGFn9NJO1FTnB9LLjz7q4c0XaWF3mcg==" + }, + "node_modules/@pixi/extract": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/extract/-/extract-7.4.0.tgz", + "integrity": "sha512-PLOdi8LxnRBRTKLx5plA9hWsIObiQ44tKMcyaLIESXNoUGE3135Aih10Hg1whrQcG4n9EqRjNak7LtwKRylRbg==", + "peerDependencies": { + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/filter-alpha": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/filter-alpha/-/filter-alpha-7.4.0.tgz", + "integrity": "sha512-1KjdTcU4drduzF1HDu1clxZgM7b6lfE1CKESlY5CizJSMMGcycOUQRq/TWK54xrsJTyPWwNu5ojma6dcIqLOrw==", + "peerDependencies": { + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/filter-blur": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/filter-blur/-/filter-blur-7.4.0.tgz", + "integrity": "sha512-XUrhswyuc4+flpDL0fQcRuei8ctgYCdTxCuetSqpS+qdf4gOJyq5UyCwDycJiudZD6+R23svUX5OQOPwkWTsNA==", + "peerDependencies": { + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/filter-color-matrix": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/filter-color-matrix/-/filter-color-matrix-7.4.0.tgz", + "integrity": "sha512-Ap5Fh6iJo5Mk6xMTia5KAWj9G0b4F3LiqrrWkM0y9gGzD5ei85Hd+XHHJtzWi+d4P/EWv7KlND6SnVcTZFgV4A==", + "peerDependencies": { + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/filter-displacement": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/filter-displacement/-/filter-displacement-7.4.0.tgz", + "integrity": "sha512-fcFLxFge2V6o7LqIsz/goDTMbwLdHjGggbu9/t4+byNP5f+S2TTR3oT4nulTYhNQph5vyllhSPJgHoqXXRhTwg==", + "peerDependencies": { + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/filter-fxaa": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/filter-fxaa/-/filter-fxaa-7.4.0.tgz", + "integrity": "sha512-W4l01ca9hJpjAfswRkw6UaCNh76E9ymigSVIBzhUUFwjfvVvIh7+O9SnEzkTVHsY15ANsznD0XZjgt3pW/wFbg==", + "peerDependencies": { + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/filter-noise": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/filter-noise/-/filter-noise-7.4.0.tgz", + "integrity": "sha512-q2+CWODAJO79j0StJ+xakX4D8r8w/RLURRiyG+focTIj1ws/7sdDmDsV+jmeKm6pEktwgA3JYWIKZUnezlGf8g==", + "peerDependencies": { + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/graphics": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-7.4.0.tgz", + "integrity": "sha512-9GcXbP/iTFEA5xwXx6sSwGyIYPd6XVhFJR7ALqqnlYC+FvvvHPoh7cN3HPa1Aw9dWpNRKUKuNcoOYPmd0O0aJA==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0", + "@pixi/sprite": "7.4.0" + } + }, + "node_modules/@pixi/math": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-7.4.0.tgz", + "integrity": "sha512-9WCWKX5z/VOYGpsnXXQ73vg/IT+bUXCLO6miXuS5YPXNfw9RpvdV4ZgFmuQwPNM7wfFk5T7Uvfr8ZJRBCfKhZw==" + }, + "node_modules/@pixi/mesh": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/mesh/-/mesh-7.4.0.tgz", + "integrity": "sha512-Ql5B3q8UD898LTKTPAkveOU72tN9xD8CsLPuvmPSrjpE5FlyRhrS90JzD26/sz6H3B7Kfu2gRjilmujCzNvuWA==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0" + } + }, + "node_modules/@pixi/mesh-extras": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/mesh-extras/-/mesh-extras-7.4.0.tgz", + "integrity": "sha512-YMI72eDruRd3iUIxfFNW+siuwvvrBv4/A9GDeBySKdfqbMOnzi0GLjxvF88bcP7eujdJQDwzTnAV4hW0UNIkjw==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/mesh": "7.4.0" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-7.4.0.tgz", + "integrity": "sha512-wFkwU19dCyY5m0JxiKf6UJwvR8XaGDWA/0VXZelBF+WwIj54uKjN4lNSnSApHHByFfq9BRka7B5C1fU9eZNOzg==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0", + "@pixi/sprite": "7.4.0" + } + }, + "node_modules/@pixi/mixin-get-child-by-name": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-7.4.0.tgz", + "integrity": "sha512-GAWXSNnYtZyppxGVpt0lN2Iq6Z1MYuGeE/X5rYd5yO+Ra9VbUaslTRxf2y8H1TTWOPCIs8mcSTNdJTgElSfqbQ==", + "peerDependencies": { + "@pixi/display": "7.4.0" + } + }, + "node_modules/@pixi/mixin-get-global-position": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/mixin-get-global-position/-/mixin-get-global-position-7.4.0.tgz", + "integrity": "sha512-u2EKXi7sv1zG2exk/bpjozBTOElBAsHnA0sHe0kz6sELpNBjv4g2n0Hwfl+qd69S+60zfN44ER+ihbFUWgD5VA==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0" + } + }, + "node_modules/@pixi/particle-container": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/particle-container/-/particle-container-7.4.0.tgz", + "integrity": "sha512-y3cB2EvgzfOm/pw4qBFsKOVoRzhzLy/FFj92DbD3bL5a6Z+YtKblkeWw3P5exzZJBTRn9sEk1vhzBb1HM/WEJw==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0", + "@pixi/sprite": "7.4.0" + } + }, + "node_modules/@pixi/prepare": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/prepare/-/prepare-7.4.0.tgz", + "integrity": "sha512-qMRf0SPVYW6k0ZG19SdddwH/FErywEzkJtS7pCVrFy31RP4dF+ZunEffKNPm3Kf5b94JXd6+lIAxDy4tDVqXNQ==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0", + "@pixi/graphics": "7.4.0", + "@pixi/text": "7.4.0" + } + }, + "node_modules/@pixi/runner": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-7.4.0.tgz", + "integrity": "sha512-TIfocv2TD4xHOiGSpeu2y3GMN09cKEpxiS/rswdCU/aacfgSyvjEmskL/dbq/PSA4FCmjVHLyjgNPvd79WPZhQ==" + }, + "node_modules/@pixi/settings": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-7.4.0.tgz", + "integrity": "sha512-ODWmSVfLnn384xFsXp+NNV6mQ+AwoeI4FtN+tMcJ+w/qQTi+eq6VLIpgqNx2Z/TJESI4HY4jxL6qz4SJEs7SMA==", + "dependencies": { + "@pixi/constants": "7.4.0", + "@types/css-font-loading-module": "^0.0.12", + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/sprite": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-7.4.0.tgz", + "integrity": "sha512-+yQdq3aKS59s9uxiW066geWLCKYTRjtbdgE2qtyUP4pK/bYanWVWash7K8P3qVX8NQsQKjGvNPoa2fkP6MBE1Q==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0" + } + }, + "node_modules/@pixi/sprite-animated": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/sprite-animated/-/sprite-animated-7.4.0.tgz", + "integrity": "sha512-SVIO78hHqVvBg5kh13TES0oqmjBhjeQmCgXVzT1nC62Vxh/6AAd9JOKid706lXoqRgw7H7OhdunEWL6J2zN4KA==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/sprite": "7.4.0" + } + }, + "node_modules/@pixi/sprite-tiling": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/sprite-tiling/-/sprite-tiling-7.4.0.tgz", + "integrity": "sha512-q0wjrdhvqnfSRNYIJ0KHUIT0nARvlmBoKBtjEZLAnk1jQCFzrJIg4qfmsBNDSOzMVaAxAot0EbOLjld6EZmf8w==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0", + "@pixi/sprite": "7.4.0" + } + }, + "node_modules/@pixi/spritesheet": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/spritesheet/-/spritesheet-7.4.0.tgz", + "integrity": "sha512-wztt4ne71AWDY4WMyuoMUrZlYVeKkubRTqT9HcPYxDEClxZAz1ggsr03PB4RGHbNQkVC1ImrAi9fa0D0PkyPYg==", + "peerDependencies": { + "@pixi/assets": "7.4.0", + "@pixi/core": "7.4.0" + } + }, + "node_modules/@pixi/text": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/text/-/text-7.4.0.tgz", + "integrity": "sha512-yVVeWYH6N+E38R+D7tvOVwDhbFxrInZ7fkOllfePu3KaKsUXbjklgtKUyPREs1LGJC8ffrpCPo1k9BVmwFA4Eg==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/sprite": "7.4.0" + } + }, + "node_modules/@pixi/text-bitmap": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/text-bitmap/-/text-bitmap-7.4.0.tgz", + "integrity": "sha512-OkYixlqMW9b1EHtEbSP9mgZEqI0WLN1KP4h2EyJk0LC9lH2Ybp3v7ZGHKAetGkSCt8PXY5AfXbcWtm+TgTWbJw==", + "peerDependencies": { + "@pixi/assets": "7.4.0", + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0", + "@pixi/mesh": "7.4.0", + "@pixi/text": "7.4.0" + } + }, + "node_modules/@pixi/text-html": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/text-html/-/text-html-7.4.0.tgz", + "integrity": "sha512-HOSKLynkL4cXQdv7zMst7+vISKp4ueCdJpV2zwQJnwVa/dHKlMULQ4+F5yxbtgAF8fYcH3iNfFLaraFlx1hL5A==", + "peerDependencies": { + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0", + "@pixi/sprite": "7.4.0", + "@pixi/text": "7.4.0" + } + }, + "node_modules/@pixi/ticker": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-7.4.0.tgz", + "integrity": "sha512-GaDmk27tEpPfUVgVTNQWGuOYGu6ehqmVSGxecCv4No5KHP52+LihTC4YHO06zRxfyrIOgafooDL/vQiEMqas8g==", + "dependencies": { + "@pixi/extensions": "7.4.0", + "@pixi/settings": "7.4.0", + "@pixi/utils": "7.4.0" + } + }, + "node_modules/@pixi/utils": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-VBnxNGGg/uj7k1wmvyNZei2qpbFNN/kdQ2/mwNXJtFcFymVfijNZWRUNobpSRE/yHx40WGYzSm3ZJZrF4WxFzA==", + "dependencies": { + "@pixi/color": "7.4.0", + "@pixi/constants": "7.4.0", + "@pixi/settings": "7.4.0", + "@types/earcut": "^2.1.0", + "earcut": "^2.2.4", + "eventemitter3": "^4.0.0", + "url": "^0.11.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tsconfig/node20": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.2.tgz", + "integrity": "sha512-madaWq2k+LYMEhmcp0fs+OGaLFk0OenpHa4gmI4VEmCKX4PJntQ6fnnGADVFrVkBj0wIdAlQnK/MrlYTHsa1gQ==", + "dev": true + }, + "node_modules/@types/css-font-loading-module": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/css-font-loading-module/-/css-font-loading-module-0.0.12.tgz", + "integrity": "sha512-x2tZZYkSxXqWvTDgveSynfjq/T2HyiZHXb00j/+gy19yp70PHCizM48XFdjBCWH7eHBD0R5i/pw9yMBP/BH5uA==" + }, + "node_modules/@types/earcut": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.4.tgz", + "integrity": "sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==" + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.11.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", + "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz", + "integrity": "sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.11.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.15.tgz", + "integrity": "sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==", + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/shared": "3.4.15", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz", + "integrity": "sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==", + "dependencies": { + "@vue/compiler-core": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.15.tgz", + "integrity": "sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==", + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/compiler-core": "3.4.15", + "@vue/compiler-dom": "3.4.15", + "@vue/compiler-ssr": "3.4.15", + "@vue/shared": "3.4.15", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.33", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.15.tgz", + "integrity": "sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==", + "dependencies": { + "@vue/compiler-dom": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "node_modules/@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", + "dev": true, + "dependencies": { + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.15.tgz", + "integrity": "sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==", + "dependencies": { + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.15.tgz", + "integrity": "sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw==", + "dependencies": { + "@vue/reactivity": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.15.tgz", + "integrity": "sha512-EVW8D6vfFVq3V/yDKNPBFkZKGMFSvZrUQmx196o/v2tHKdwWdiZjYUBS+0Ez3+ohRyF8Njwy/6FH5gYJ75liUw==", + "dependencies": { + "@vue/runtime-core": "3.4.15", + "@vue/shared": "3.4.15", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.15.tgz", + "integrity": "sha512-3HYzaidu9cHjrT+qGUuDhFYvF/j643bHC6uUN9BgM11DVy+pM6ATsG6uPBLnkwOgs7BpJABReLmpL3ZPAsUaqw==", + "dependencies": { + "@vue/compiler-ssr": "3.4.15", + "@vue/shared": "3.4.15" + }, + "peerDependencies": { + "vue": "3.4.15" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz", + "integrity": "sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==" + }, + "node_modules/@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.3.tgz", + "integrity": "sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==", + "dependencies": { + "es-errors": "^1.0.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz", + "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.6", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.6.tgz", + "integrity": "sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "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/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-all2": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.1.2.tgz", + "integrity": "sha512-WwwnS8Ft+RpXve6T2EIEVpFLSqN+ORHRvgNk3H9N62SZXjmzKoRhMFg3I17TK3oMaAEr+XFbRirWS2Fn3BCPSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.3", + "memorystream": "^0.3.1", + "minimatch": "^9.0.0", + "pidtree": "^0.6.0", + "read-package-json-fast": "^3.0.2", + "shell-quote": "^1.7.3" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0", + "npm": ">= 8" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pinia": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pixi.js": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-7.4.0.tgz", + "integrity": "sha512-c2q3NG06RcSzgcyNieuC/ogzdaBKRoZvBlAiPdL8ubhJyEVCoSA+zitjsCe/m3t5cVrrjPnwo81ps+fg908hBw==", + "dependencies": { + "@pixi/accessibility": "7.4.0", + "@pixi/app": "7.4.0", + "@pixi/assets": "7.4.0", + "@pixi/compressed-textures": "7.4.0", + "@pixi/core": "7.4.0", + "@pixi/display": "7.4.0", + "@pixi/events": "7.4.0", + "@pixi/extensions": "7.4.0", + "@pixi/extract": "7.4.0", + "@pixi/filter-alpha": "7.4.0", + "@pixi/filter-blur": "7.4.0", + "@pixi/filter-color-matrix": "7.4.0", + "@pixi/filter-displacement": "7.4.0", + "@pixi/filter-fxaa": "7.4.0", + "@pixi/filter-noise": "7.4.0", + "@pixi/graphics": "7.4.0", + "@pixi/mesh": "7.4.0", + "@pixi/mesh-extras": "7.4.0", + "@pixi/mixin-cache-as-bitmap": "7.4.0", + "@pixi/mixin-get-child-by-name": "7.4.0", + "@pixi/mixin-get-global-position": "7.4.0", + "@pixi/particle-container": "7.4.0", + "@pixi/prepare": "7.4.0", + "@pixi/sprite": "7.4.0", + "@pixi/sprite-animated": "7.4.0", + "@pixi/sprite-tiling": "7.4.0", + "@pixi/spritesheet": "7.4.0", + "@pixi/text": "7.4.0", + "@pixi/text-bitmap": "7.4.0", + "@pixi/text-html": "7.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/rollup": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, + "node_modules/vite": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.15.tgz", + "integrity": "sha512-jC0GH4KkWLWJOEQjOpkqU1bQsBwf4R1rsFtw5GQJbjHVKWDzO6P0nWWBTmjp1xSemAioDFj1jdaK1qa3DnMQoQ==", + "dependencies": { + "@vue/compiler-dom": "3.4.15", + "@vue/compiler-sfc": "3.4.15", + "@vue/runtime-dom": "3.4.15", + "@vue/server-renderer": "3.4.15", + "@vue/shared": "3.4.15" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "dependencies": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..887fe2f --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "space-invader", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build --force" + }, + "dependencies": { + "pinia": "^2.1.7", + "pixi.js": "^7.4.0", + "vue": "^3.4.15", + "vue-router": "^4.2.5" + }, + "devDependencies": { + "@tsconfig/node20": "^20.1.2", + "@types/node": "^20.11.10", + "@vitejs/plugin-vue": "^5.0.3", + "@vue/tsconfig": "^0.5.1", + "npm-run-all2": "^6.1.1", + "typescript": "~5.3.0", + "vite": "^5.0.11", + "vue-tsc": "^1.8.27" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..66b1146 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/game_over.png b/public/game_over.png new file mode 100644 index 0000000..0281ea0 Binary files /dev/null and b/public/game_over.png differ diff --git a/public/gauche_droite.png b/public/gauche_droite.png new file mode 100644 index 0000000..326bd7a Binary files /dev/null and b/public/gauche_droite.png differ diff --git a/public/kssr/Backgrounds/black.png b/public/kssr/Backgrounds/black.png new file mode 100644 index 0000000..82ddab9 Binary files /dev/null and b/public/kssr/Backgrounds/black.png differ diff --git a/public/kssr/Backgrounds/blue.png b/public/kssr/Backgrounds/blue.png new file mode 100644 index 0000000..47642cd Binary files /dev/null and b/public/kssr/Backgrounds/blue.png differ diff --git a/public/kssr/Backgrounds/custom-1.png b/public/kssr/Backgrounds/custom-1.png new file mode 100644 index 0000000..1c3947f Binary files /dev/null and b/public/kssr/Backgrounds/custom-1.png differ diff --git a/public/kssr/Backgrounds/custom-2.png b/public/kssr/Backgrounds/custom-2.png new file mode 100644 index 0000000..549adad Binary files /dev/null and b/public/kssr/Backgrounds/custom-2.png differ diff --git a/public/kssr/Backgrounds/custom.png b/public/kssr/Backgrounds/custom.png new file mode 100644 index 0000000..983f151 Binary files /dev/null and b/public/kssr/Backgrounds/custom.png differ diff --git a/public/kssr/Backgrounds/darkPurple.png b/public/kssr/Backgrounds/darkPurple.png new file mode 100644 index 0000000..d9c3fd4 Binary files /dev/null and b/public/kssr/Backgrounds/darkPurple.png differ diff --git a/public/kssr/Backgrounds/purple.png b/public/kssr/Backgrounds/purple.png new file mode 100644 index 0000000..5e86177 Binary files /dev/null and b/public/kssr/Backgrounds/purple.png differ diff --git a/public/kssr/Bonus/AnekTamil-VariableFont_wdth,wght.ttf b/public/kssr/Bonus/AnekTamil-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000..7fecc83 Binary files /dev/null and b/public/kssr/Bonus/AnekTamil-VariableFont_wdth,wght.ttf differ diff --git a/public/kssr/Bonus/Fontspring-DEMO-balgin-black.otf b/public/kssr/Bonus/Fontspring-DEMO-balgin-black.otf new file mode 100644 index 0000000..d457c83 Binary files /dev/null and b/public/kssr/Bonus/Fontspring-DEMO-balgin-black.otf differ diff --git a/public/kssr/Bonus/Fontspring-DEMO-balgin-regular.otf b/public/kssr/Bonus/Fontspring-DEMO-balgin-regular.otf new file mode 100644 index 0000000..e1bf9bf Binary files /dev/null and b/public/kssr/Bonus/Fontspring-DEMO-balgin-regular.otf differ diff --git a/public/kssr/Bonus/balgin-black.ttf b/public/kssr/Bonus/balgin-black.ttf new file mode 100644 index 0000000..e5cbcfd Binary files /dev/null and b/public/kssr/Bonus/balgin-black.ttf differ diff --git a/public/kssr/Bonus/kenvector_future.ttf b/public/kssr/Bonus/kenvector_future.ttf new file mode 100644 index 0000000..39ebdfa Binary files /dev/null and b/public/kssr/Bonus/kenvector_future.ttf differ diff --git a/public/kssr/Bonus/kenvector_future_thin.ttf b/public/kssr/Bonus/kenvector_future_thin.ttf new file mode 100644 index 0000000..9f4b4fa Binary files /dev/null and b/public/kssr/Bonus/kenvector_future_thin.ttf differ diff --git a/public/kssr/Bonus/sfx_laser1.ogg b/public/kssr/Bonus/sfx_laser1.ogg new file mode 100644 index 0000000..7a9a4d2 Binary files /dev/null and b/public/kssr/Bonus/sfx_laser1.ogg differ diff --git a/public/kssr/Bonus/sfx_laser2.ogg b/public/kssr/Bonus/sfx_laser2.ogg new file mode 100644 index 0000000..6a2d4c5 Binary files /dev/null and b/public/kssr/Bonus/sfx_laser2.ogg differ diff --git a/public/kssr/Bonus/sfx_lose.ogg b/public/kssr/Bonus/sfx_lose.ogg new file mode 100644 index 0000000..496968f Binary files /dev/null and b/public/kssr/Bonus/sfx_lose.ogg differ diff --git a/public/kssr/Bonus/sfx_shieldDown.ogg b/public/kssr/Bonus/sfx_shieldDown.ogg new file mode 100644 index 0000000..e3a7a51 Binary files /dev/null and b/public/kssr/Bonus/sfx_shieldDown.ogg differ diff --git a/public/kssr/Bonus/sfx_shieldUp.ogg b/public/kssr/Bonus/sfx_shieldUp.ogg new file mode 100644 index 0000000..49fdb6c Binary files /dev/null and b/public/kssr/Bonus/sfx_shieldUp.ogg differ diff --git a/public/kssr/Bonus/sfx_twoTone.ogg b/public/kssr/Bonus/sfx_twoTone.ogg new file mode 100644 index 0000000..2027492 Binary files /dev/null and b/public/kssr/Bonus/sfx_twoTone.ogg differ diff --git a/public/kssr/Bonus/sfx_zap.ogg b/public/kssr/Bonus/sfx_zap.ogg new file mode 100644 index 0000000..3f6250d Binary files /dev/null and b/public/kssr/Bonus/sfx_zap.ogg differ diff --git a/public/kssr/PNG/Damage/playerShip1_damage1.png b/public/kssr/PNG/Damage/playerShip1_damage1.png new file mode 100644 index 0000000..eb2ac7d Binary files /dev/null and b/public/kssr/PNG/Damage/playerShip1_damage1.png differ diff --git a/public/kssr/PNG/Damage/playerShip1_damage2.png b/public/kssr/PNG/Damage/playerShip1_damage2.png new file mode 100644 index 0000000..d5f40bd Binary files /dev/null and b/public/kssr/PNG/Damage/playerShip1_damage2.png differ diff --git a/public/kssr/PNG/Damage/playerShip1_damage3.png b/public/kssr/PNG/Damage/playerShip1_damage3.png new file mode 100644 index 0000000..ede5132 Binary files /dev/null and b/public/kssr/PNG/Damage/playerShip1_damage3.png differ diff --git a/public/kssr/PNG/Damage/playerShip2_damage1.png b/public/kssr/PNG/Damage/playerShip2_damage1.png new file mode 100644 index 0000000..313f1e4 Binary files /dev/null and b/public/kssr/PNG/Damage/playerShip2_damage1.png differ diff --git a/public/kssr/PNG/Damage/playerShip2_damage2.png b/public/kssr/PNG/Damage/playerShip2_damage2.png new file mode 100644 index 0000000..fa53047 Binary files /dev/null and b/public/kssr/PNG/Damage/playerShip2_damage2.png differ diff --git a/public/kssr/PNG/Damage/playerShip2_damage3.png b/public/kssr/PNG/Damage/playerShip2_damage3.png new file mode 100644 index 0000000..c3b506c Binary files /dev/null and b/public/kssr/PNG/Damage/playerShip2_damage3.png differ diff --git a/public/kssr/PNG/Damage/playerShip3_damage1.png b/public/kssr/PNG/Damage/playerShip3_damage1.png new file mode 100644 index 0000000..72a1a62 Binary files /dev/null and b/public/kssr/PNG/Damage/playerShip3_damage1.png differ diff --git a/public/kssr/PNG/Damage/playerShip3_damage2.png b/public/kssr/PNG/Damage/playerShip3_damage2.png new file mode 100644 index 0000000..6ad9035 Binary files /dev/null and b/public/kssr/PNG/Damage/playerShip3_damage2.png differ diff --git a/public/kssr/PNG/Damage/playerShip3_damage3.png b/public/kssr/PNG/Damage/playerShip3_damage3.png new file mode 100644 index 0000000..97ebf0b Binary files /dev/null and b/public/kssr/PNG/Damage/playerShip3_damage3.png differ diff --git a/public/kssr/PNG/Effects/fire00.png b/public/kssr/PNG/Effects/fire00.png new file mode 100644 index 0000000..4424075 Binary files /dev/null and b/public/kssr/PNG/Effects/fire00.png differ diff --git a/public/kssr/PNG/Effects/fire01.png b/public/kssr/PNG/Effects/fire01.png new file mode 100644 index 0000000..4efed3d Binary files /dev/null and b/public/kssr/PNG/Effects/fire01.png differ diff --git a/public/kssr/PNG/Effects/fire02.png b/public/kssr/PNG/Effects/fire02.png new file mode 100644 index 0000000..f574dbe Binary files /dev/null and b/public/kssr/PNG/Effects/fire02.png differ diff --git a/public/kssr/PNG/Effects/fire03.png b/public/kssr/PNG/Effects/fire03.png new file mode 100644 index 0000000..89a1fee Binary files /dev/null and b/public/kssr/PNG/Effects/fire03.png differ diff --git a/public/kssr/PNG/Effects/fire04.png b/public/kssr/PNG/Effects/fire04.png new file mode 100644 index 0000000..8cf6645 Binary files /dev/null and b/public/kssr/PNG/Effects/fire04.png differ diff --git a/public/kssr/PNG/Effects/fire05.png b/public/kssr/PNG/Effects/fire05.png new file mode 100644 index 0000000..4a317cf Binary files /dev/null and b/public/kssr/PNG/Effects/fire05.png differ diff --git a/public/kssr/PNG/Effects/fire06.png b/public/kssr/PNG/Effects/fire06.png new file mode 100644 index 0000000..c8ac319 Binary files /dev/null and b/public/kssr/PNG/Effects/fire06.png differ diff --git a/public/kssr/PNG/Effects/fire07.png b/public/kssr/PNG/Effects/fire07.png new file mode 100644 index 0000000..243d5aa Binary files /dev/null and b/public/kssr/PNG/Effects/fire07.png differ diff --git a/public/kssr/PNG/Effects/fire08.png b/public/kssr/PNG/Effects/fire08.png new file mode 100644 index 0000000..37ed06f Binary files /dev/null and b/public/kssr/PNG/Effects/fire08.png differ diff --git a/public/kssr/PNG/Effects/fire09.png b/public/kssr/PNG/Effects/fire09.png new file mode 100644 index 0000000..4ab90ac Binary files /dev/null and b/public/kssr/PNG/Effects/fire09.png differ diff --git a/public/kssr/PNG/Effects/fire10.png b/public/kssr/PNG/Effects/fire10.png new file mode 100644 index 0000000..1b42c69 Binary files /dev/null and b/public/kssr/PNG/Effects/fire10.png differ diff --git a/public/kssr/PNG/Effects/fire11.png b/public/kssr/PNG/Effects/fire11.png new file mode 100644 index 0000000..db78103 Binary files /dev/null and b/public/kssr/PNG/Effects/fire11.png differ diff --git a/public/kssr/PNG/Effects/fire12.png b/public/kssr/PNG/Effects/fire12.png new file mode 100644 index 0000000..d33a64f Binary files /dev/null and b/public/kssr/PNG/Effects/fire12.png differ diff --git a/public/kssr/PNG/Effects/fire13.png b/public/kssr/PNG/Effects/fire13.png new file mode 100644 index 0000000..285ff0d Binary files /dev/null and b/public/kssr/PNG/Effects/fire13.png differ diff --git a/public/kssr/PNG/Effects/fire14.png b/public/kssr/PNG/Effects/fire14.png new file mode 100644 index 0000000..a83fc70 Binary files /dev/null and b/public/kssr/PNG/Effects/fire14.png differ diff --git a/public/kssr/PNG/Effects/fire15.png b/public/kssr/PNG/Effects/fire15.png new file mode 100644 index 0000000..1bdb0bf Binary files /dev/null and b/public/kssr/PNG/Effects/fire15.png differ diff --git a/public/kssr/PNG/Effects/fire16.png b/public/kssr/PNG/Effects/fire16.png new file mode 100644 index 0000000..6cb5886 Binary files /dev/null and b/public/kssr/PNG/Effects/fire16.png differ diff --git a/public/kssr/PNG/Effects/fire17.png b/public/kssr/PNG/Effects/fire17.png new file mode 100644 index 0000000..8f5b92d Binary files /dev/null and b/public/kssr/PNG/Effects/fire17.png differ diff --git a/public/kssr/PNG/Effects/fire18.png b/public/kssr/PNG/Effects/fire18.png new file mode 100644 index 0000000..84dbb73 Binary files /dev/null and b/public/kssr/PNG/Effects/fire18.png differ diff --git a/public/kssr/PNG/Effects/fire19.png b/public/kssr/PNG/Effects/fire19.png new file mode 100644 index 0000000..db435cd Binary files /dev/null and b/public/kssr/PNG/Effects/fire19.png differ diff --git a/public/kssr/PNG/Effects/shield1.png b/public/kssr/PNG/Effects/shield1.png new file mode 100644 index 0000000..8d25f4b Binary files /dev/null and b/public/kssr/PNG/Effects/shield1.png differ diff --git a/public/kssr/PNG/Effects/shield2.png b/public/kssr/PNG/Effects/shield2.png new file mode 100644 index 0000000..485a3f7 Binary files /dev/null and b/public/kssr/PNG/Effects/shield2.png differ diff --git a/public/kssr/PNG/Effects/shield3.png b/public/kssr/PNG/Effects/shield3.png new file mode 100644 index 0000000..2925cd6 Binary files /dev/null and b/public/kssr/PNG/Effects/shield3.png differ diff --git a/public/kssr/PNG/Effects/speed.png b/public/kssr/PNG/Effects/speed.png new file mode 100644 index 0000000..d014dec Binary files /dev/null and b/public/kssr/PNG/Effects/speed.png differ diff --git a/public/kssr/PNG/Effects/star1.png b/public/kssr/PNG/Effects/star1.png new file mode 100644 index 0000000..67551ae Binary files /dev/null and b/public/kssr/PNG/Effects/star1.png differ diff --git a/public/kssr/PNG/Effects/star2.png b/public/kssr/PNG/Effects/star2.png new file mode 100644 index 0000000..a047ef6 Binary files /dev/null and b/public/kssr/PNG/Effects/star2.png differ diff --git a/public/kssr/PNG/Effects/star3.png b/public/kssr/PNG/Effects/star3.png new file mode 100644 index 0000000..c9026d3 Binary files /dev/null and b/public/kssr/PNG/Effects/star3.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlack1.png b/public/kssr/PNG/Enemies/enemyBlack1.png new file mode 100644 index 0000000..bc2fa4c Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlack1.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlack2.png b/public/kssr/PNG/Enemies/enemyBlack2.png new file mode 100644 index 0000000..0e6b91c Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlack2.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlack3.png b/public/kssr/PNG/Enemies/enemyBlack3.png new file mode 100644 index 0000000..dafec1b Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlack3.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlack4.png b/public/kssr/PNG/Enemies/enemyBlack4.png new file mode 100644 index 0000000..a575c9d Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlack4.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlack5.png b/public/kssr/PNG/Enemies/enemyBlack5.png new file mode 100644 index 0000000..739dcf0 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlack5.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlue1.png b/public/kssr/PNG/Enemies/enemyBlue1.png new file mode 100644 index 0000000..cedc073 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlue1.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlue2.png b/public/kssr/PNG/Enemies/enemyBlue2.png new file mode 100644 index 0000000..bf3bd0c Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlue2.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlue3.png b/public/kssr/PNG/Enemies/enemyBlue3.png new file mode 100644 index 0000000..9a63d03 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlue3.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlue4.png b/public/kssr/PNG/Enemies/enemyBlue4.png new file mode 100644 index 0000000..d5670a3 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlue4.png differ diff --git a/public/kssr/PNG/Enemies/enemyBlue5.png b/public/kssr/PNG/Enemies/enemyBlue5.png new file mode 100644 index 0000000..e740509 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyBlue5.png differ diff --git a/public/kssr/PNG/Enemies/enemyGreen1.png b/public/kssr/PNG/Enemies/enemyGreen1.png new file mode 100644 index 0000000..064e290 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyGreen1.png differ diff --git a/public/kssr/PNG/Enemies/enemyGreen2.png b/public/kssr/PNG/Enemies/enemyGreen2.png new file mode 100644 index 0000000..5189d24 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyGreen2.png differ diff --git a/public/kssr/PNG/Enemies/enemyGreen3.png b/public/kssr/PNG/Enemies/enemyGreen3.png new file mode 100644 index 0000000..74e2bca Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyGreen3.png differ diff --git a/public/kssr/PNG/Enemies/enemyGreen4.png b/public/kssr/PNG/Enemies/enemyGreen4.png new file mode 100644 index 0000000..112e299 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyGreen4.png differ diff --git a/public/kssr/PNG/Enemies/enemyGreen5.png b/public/kssr/PNG/Enemies/enemyGreen5.png new file mode 100644 index 0000000..5938270 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyGreen5.png differ diff --git a/public/kssr/PNG/Enemies/enemyRed1.png b/public/kssr/PNG/Enemies/enemyRed1.png new file mode 100644 index 0000000..fb0c0a2 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyRed1.png differ diff --git a/public/kssr/PNG/Enemies/enemyRed2.png b/public/kssr/PNG/Enemies/enemyRed2.png new file mode 100644 index 0000000..3ee96c5 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyRed2.png differ diff --git a/public/kssr/PNG/Enemies/enemyRed3.png b/public/kssr/PNG/Enemies/enemyRed3.png new file mode 100644 index 0000000..bc8eacd Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyRed3.png differ diff --git a/public/kssr/PNG/Enemies/enemyRed4.png b/public/kssr/PNG/Enemies/enemyRed4.png new file mode 100644 index 0000000..a3216d4 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyRed4.png differ diff --git a/public/kssr/PNG/Enemies/enemyRed5.png b/public/kssr/PNG/Enemies/enemyRed5.png new file mode 100644 index 0000000..645cdf3 Binary files /dev/null and b/public/kssr/PNG/Enemies/enemyRed5.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue01.png b/public/kssr/PNG/Lasers/laserBlue01.png new file mode 100644 index 0000000..b76aaf7 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue01.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue02.png b/public/kssr/PNG/Lasers/laserBlue02.png new file mode 100644 index 0000000..3f923a3 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue02.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue03.png b/public/kssr/PNG/Lasers/laserBlue03.png new file mode 100644 index 0000000..a16e9a8 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue03.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue04.png b/public/kssr/PNG/Lasers/laserBlue04.png new file mode 100644 index 0000000..6f3b910 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue04.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue05.png b/public/kssr/PNG/Lasers/laserBlue05.png new file mode 100644 index 0000000..85cff7d Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue05.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue06.png b/public/kssr/PNG/Lasers/laserBlue06.png new file mode 100644 index 0000000..a621875 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue06.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue07.png b/public/kssr/PNG/Lasers/laserBlue07.png new file mode 100644 index 0000000..e1848bf Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue07.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue08.png b/public/kssr/PNG/Lasers/laserBlue08.png new file mode 100644 index 0000000..7a46396 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue08.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue09.png b/public/kssr/PNG/Lasers/laserBlue09.png new file mode 100644 index 0000000..35624e6 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue09.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue10.png b/public/kssr/PNG/Lasers/laserBlue10.png new file mode 100644 index 0000000..dd6b766 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue10.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue11.png b/public/kssr/PNG/Lasers/laserBlue11.png new file mode 100644 index 0000000..c062349 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue11.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue12.png b/public/kssr/PNG/Lasers/laserBlue12.png new file mode 100644 index 0000000..48b6103 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue12.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue13.png b/public/kssr/PNG/Lasers/laserBlue13.png new file mode 100644 index 0000000..c5ec6a3 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue13.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue14.png b/public/kssr/PNG/Lasers/laserBlue14.png new file mode 100644 index 0000000..254601e Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue14.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue15.png b/public/kssr/PNG/Lasers/laserBlue15.png new file mode 100644 index 0000000..1ea1966 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue15.png differ diff --git a/public/kssr/PNG/Lasers/laserBlue16.png b/public/kssr/PNG/Lasers/laserBlue16.png new file mode 100644 index 0000000..1def98f Binary files /dev/null and b/public/kssr/PNG/Lasers/laserBlue16.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen01.png b/public/kssr/PNG/Lasers/laserGreen01.png new file mode 100644 index 0000000..c9982b1 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen01.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen02.png b/public/kssr/PNG/Lasers/laserGreen02.png new file mode 100644 index 0000000..5cd7830 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen02.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen03.png b/public/kssr/PNG/Lasers/laserGreen03.png new file mode 100644 index 0000000..d658547 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen03.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen04.png b/public/kssr/PNG/Lasers/laserGreen04.png new file mode 100644 index 0000000..61b04fb Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen04.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen05.png b/public/kssr/PNG/Lasers/laserGreen05.png new file mode 100644 index 0000000..98ae6be Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen05.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen06.png b/public/kssr/PNG/Lasers/laserGreen06.png new file mode 100644 index 0000000..36dd94d Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen06.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen07.png b/public/kssr/PNG/Lasers/laserGreen07.png new file mode 100644 index 0000000..0ae7c2d Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen07.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen08.png b/public/kssr/PNG/Lasers/laserGreen08.png new file mode 100644 index 0000000..0ff1d80 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen08.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen09.png b/public/kssr/PNG/Lasers/laserGreen09.png new file mode 100644 index 0000000..932056b Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen09.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen10.png b/public/kssr/PNG/Lasers/laserGreen10.png new file mode 100644 index 0000000..9c7974c Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen10.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen11.png b/public/kssr/PNG/Lasers/laserGreen11.png new file mode 100644 index 0000000..100cddb Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen11.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen12.png b/public/kssr/PNG/Lasers/laserGreen12.png new file mode 100644 index 0000000..b05a72f Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen12.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen13.png b/public/kssr/PNG/Lasers/laserGreen13.png new file mode 100644 index 0000000..92cc353 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen13.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen14.png b/public/kssr/PNG/Lasers/laserGreen14.png new file mode 100644 index 0000000..7abd3b2 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen14.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen15.png b/public/kssr/PNG/Lasers/laserGreen15.png new file mode 100644 index 0000000..97a4405 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen15.png differ diff --git a/public/kssr/PNG/Lasers/laserGreen16.png b/public/kssr/PNG/Lasers/laserGreen16.png new file mode 100644 index 0000000..b73c12f Binary files /dev/null and b/public/kssr/PNG/Lasers/laserGreen16.png differ diff --git a/public/kssr/PNG/Lasers/laserRed01.png b/public/kssr/PNG/Lasers/laserRed01.png new file mode 100644 index 0000000..5e467b6 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed01.png differ diff --git a/public/kssr/PNG/Lasers/laserRed02.png b/public/kssr/PNG/Lasers/laserRed02.png new file mode 100644 index 0000000..1127fff Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed02.png differ diff --git a/public/kssr/PNG/Lasers/laserRed03.png b/public/kssr/PNG/Lasers/laserRed03.png new file mode 100644 index 0000000..bc1bb87 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed03.png differ diff --git a/public/kssr/PNG/Lasers/laserRed04.png b/public/kssr/PNG/Lasers/laserRed04.png new file mode 100644 index 0000000..fc3655b Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed04.png differ diff --git a/public/kssr/PNG/Lasers/laserRed05.png b/public/kssr/PNG/Lasers/laserRed05.png new file mode 100644 index 0000000..46db2d7 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed05.png differ diff --git a/public/kssr/PNG/Lasers/laserRed06.png b/public/kssr/PNG/Lasers/laserRed06.png new file mode 100644 index 0000000..33614ae Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed06.png differ diff --git a/public/kssr/PNG/Lasers/laserRed07.png b/public/kssr/PNG/Lasers/laserRed07.png new file mode 100644 index 0000000..23bab34 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed07.png differ diff --git a/public/kssr/PNG/Lasers/laserRed08.png b/public/kssr/PNG/Lasers/laserRed08.png new file mode 100644 index 0000000..5a2cce3 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed08.png differ diff --git a/public/kssr/PNG/Lasers/laserRed09.png b/public/kssr/PNG/Lasers/laserRed09.png new file mode 100644 index 0000000..7dc31dc Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed09.png differ diff --git a/public/kssr/PNG/Lasers/laserRed10.png b/public/kssr/PNG/Lasers/laserRed10.png new file mode 100644 index 0000000..0f85ba1 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed10.png differ diff --git a/public/kssr/PNG/Lasers/laserRed11.png b/public/kssr/PNG/Lasers/laserRed11.png new file mode 100644 index 0000000..95e9c0a Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed11.png differ diff --git a/public/kssr/PNG/Lasers/laserRed12.png b/public/kssr/PNG/Lasers/laserRed12.png new file mode 100644 index 0000000..9f56da0 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed12.png differ diff --git a/public/kssr/PNG/Lasers/laserRed13.png b/public/kssr/PNG/Lasers/laserRed13.png new file mode 100644 index 0000000..292bcc5 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed13.png differ diff --git a/public/kssr/PNG/Lasers/laserRed14.png b/public/kssr/PNG/Lasers/laserRed14.png new file mode 100644 index 0000000..eaf8346 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed14.png differ diff --git a/public/kssr/PNG/Lasers/laserRed15.png b/public/kssr/PNG/Lasers/laserRed15.png new file mode 100644 index 0000000..7d27c2a Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed15.png differ diff --git a/public/kssr/PNG/Lasers/laserRed16.png b/public/kssr/PNG/Lasers/laserRed16.png new file mode 100644 index 0000000..b12fcd5 Binary files /dev/null and b/public/kssr/PNG/Lasers/laserRed16.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_big1.png b/public/kssr/PNG/Meteors/meteorBrown_big1.png new file mode 100644 index 0000000..31e06a4 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_big1.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_big2.png b/public/kssr/PNG/Meteors/meteorBrown_big2.png new file mode 100644 index 0000000..90413d7 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_big2.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_big3.png b/public/kssr/PNG/Meteors/meteorBrown_big3.png new file mode 100644 index 0000000..3fdcce3 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_big3.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_big4.png b/public/kssr/PNG/Meteors/meteorBrown_big4.png new file mode 100644 index 0000000..e643572 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_big4.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_med1.png b/public/kssr/PNG/Meteors/meteorBrown_med1.png new file mode 100644 index 0000000..14fa6f5 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_med1.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_med3.png b/public/kssr/PNG/Meteors/meteorBrown_med3.png new file mode 100644 index 0000000..5ec2d1e Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_med3.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_small1.png b/public/kssr/PNG/Meteors/meteorBrown_small1.png new file mode 100644 index 0000000..60cf04a Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_small1.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_small2.png b/public/kssr/PNG/Meteors/meteorBrown_small2.png new file mode 100644 index 0000000..48cbc23 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_small2.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_tiny1.png b/public/kssr/PNG/Meteors/meteorBrown_tiny1.png new file mode 100644 index 0000000..69ef3a3 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_tiny1.png differ diff --git a/public/kssr/PNG/Meteors/meteorBrown_tiny2.png b/public/kssr/PNG/Meteors/meteorBrown_tiny2.png new file mode 100644 index 0000000..8a561b5 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorBrown_tiny2.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_big1.png b/public/kssr/PNG/Meteors/meteorGrey_big1.png new file mode 100644 index 0000000..74371c3 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_big1.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_big2.png b/public/kssr/PNG/Meteors/meteorGrey_big2.png new file mode 100644 index 0000000..bcc8dc7 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_big2.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_big3.png b/public/kssr/PNG/Meteors/meteorGrey_big3.png new file mode 100644 index 0000000..0bb8674 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_big3.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_big4.png b/public/kssr/PNG/Meteors/meteorGrey_big4.png new file mode 100644 index 0000000..6b7e708 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_big4.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_med1.png b/public/kssr/PNG/Meteors/meteorGrey_med1.png new file mode 100644 index 0000000..9104746 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_med1.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_med2.png b/public/kssr/PNG/Meteors/meteorGrey_med2.png new file mode 100644 index 0000000..e63e2f6 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_med2.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_small1.png b/public/kssr/PNG/Meteors/meteorGrey_small1.png new file mode 100644 index 0000000..a559e9b Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_small1.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_small2.png b/public/kssr/PNG/Meteors/meteorGrey_small2.png new file mode 100644 index 0000000..9f815b5 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_small2.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_tiny1.png b/public/kssr/PNG/Meteors/meteorGrey_tiny1.png new file mode 100644 index 0000000..0b75fa8 Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_tiny1.png differ diff --git a/public/kssr/PNG/Meteors/meteorGrey_tiny2.png b/public/kssr/PNG/Meteors/meteorGrey_tiny2.png new file mode 100644 index 0000000..75f944d Binary files /dev/null and b/public/kssr/PNG/Meteors/meteorGrey_tiny2.png differ diff --git a/public/kssr/PNG/Parts/beam0.png b/public/kssr/PNG/Parts/beam0.png new file mode 100644 index 0000000..ea4dde3 Binary files /dev/null and b/public/kssr/PNG/Parts/beam0.png differ diff --git a/public/kssr/PNG/Parts/beam1.png b/public/kssr/PNG/Parts/beam1.png new file mode 100644 index 0000000..cff2d4f Binary files /dev/null and b/public/kssr/PNG/Parts/beam1.png differ diff --git a/public/kssr/PNG/Parts/beam2.png b/public/kssr/PNG/Parts/beam2.png new file mode 100644 index 0000000..f5dadc3 Binary files /dev/null and b/public/kssr/PNG/Parts/beam2.png differ diff --git a/public/kssr/PNG/Parts/beam3.png b/public/kssr/PNG/Parts/beam3.png new file mode 100644 index 0000000..a2ae9c0 Binary files /dev/null and b/public/kssr/PNG/Parts/beam3.png differ diff --git a/public/kssr/PNG/Parts/beam4.png b/public/kssr/PNG/Parts/beam4.png new file mode 100644 index 0000000..6508d17 Binary files /dev/null and b/public/kssr/PNG/Parts/beam4.png differ diff --git a/public/kssr/PNG/Parts/beam5.png b/public/kssr/PNG/Parts/beam5.png new file mode 100644 index 0000000..2d54ee5 Binary files /dev/null and b/public/kssr/PNG/Parts/beam5.png differ diff --git a/public/kssr/PNG/Parts/beam6.png b/public/kssr/PNG/Parts/beam6.png new file mode 100644 index 0000000..5bc3abd Binary files /dev/null and b/public/kssr/PNG/Parts/beam6.png differ diff --git a/public/kssr/PNG/Parts/beamLong1.png b/public/kssr/PNG/Parts/beamLong1.png new file mode 100644 index 0000000..0733cc7 Binary files /dev/null and b/public/kssr/PNG/Parts/beamLong1.png differ diff --git a/public/kssr/PNG/Parts/beamLong2.png b/public/kssr/PNG/Parts/beamLong2.png new file mode 100644 index 0000000..3049c97 Binary files /dev/null and b/public/kssr/PNG/Parts/beamLong2.png differ diff --git a/public/kssr/PNG/Parts/cockpitBlue_0.png b/public/kssr/PNG/Parts/cockpitBlue_0.png new file mode 100644 index 0000000..2b7e086 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitBlue_0.png differ diff --git a/public/kssr/PNG/Parts/cockpitBlue_1.png b/public/kssr/PNG/Parts/cockpitBlue_1.png new file mode 100644 index 0000000..144d0c4 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitBlue_1.png differ diff --git a/public/kssr/PNG/Parts/cockpitBlue_2.png b/public/kssr/PNG/Parts/cockpitBlue_2.png new file mode 100644 index 0000000..163e1f7 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitBlue_2.png differ diff --git a/public/kssr/PNG/Parts/cockpitBlue_3.png b/public/kssr/PNG/Parts/cockpitBlue_3.png new file mode 100644 index 0000000..a2fd110 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitBlue_3.png differ diff --git a/public/kssr/PNG/Parts/cockpitBlue_4.png b/public/kssr/PNG/Parts/cockpitBlue_4.png new file mode 100644 index 0000000..952cfe4 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitBlue_4.png differ diff --git a/public/kssr/PNG/Parts/cockpitBlue_5.png b/public/kssr/PNG/Parts/cockpitBlue_5.png new file mode 100644 index 0000000..18a69cd Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitBlue_5.png differ diff --git a/public/kssr/PNG/Parts/cockpitBlue_6.png b/public/kssr/PNG/Parts/cockpitBlue_6.png new file mode 100644 index 0000000..1b77d13 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitBlue_6.png differ diff --git a/public/kssr/PNG/Parts/cockpitBlue_7.png b/public/kssr/PNG/Parts/cockpitBlue_7.png new file mode 100644 index 0000000..ae6962a Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitBlue_7.png differ diff --git a/public/kssr/PNG/Parts/cockpitGreen_0.png b/public/kssr/PNG/Parts/cockpitGreen_0.png new file mode 100644 index 0000000..8532f95 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitGreen_0.png differ diff --git a/public/kssr/PNG/Parts/cockpitGreen_1.png b/public/kssr/PNG/Parts/cockpitGreen_1.png new file mode 100644 index 0000000..094af57 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitGreen_1.png differ diff --git a/public/kssr/PNG/Parts/cockpitGreen_2.png b/public/kssr/PNG/Parts/cockpitGreen_2.png new file mode 100644 index 0000000..0fec8d5 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitGreen_2.png differ diff --git a/public/kssr/PNG/Parts/cockpitGreen_3.png b/public/kssr/PNG/Parts/cockpitGreen_3.png new file mode 100644 index 0000000..4f36a2a Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitGreen_3.png differ diff --git a/public/kssr/PNG/Parts/cockpitGreen_4.png b/public/kssr/PNG/Parts/cockpitGreen_4.png new file mode 100644 index 0000000..a8dcd9d Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitGreen_4.png differ diff --git a/public/kssr/PNG/Parts/cockpitGreen_5.png b/public/kssr/PNG/Parts/cockpitGreen_5.png new file mode 100644 index 0000000..abb5dac Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitGreen_5.png differ diff --git a/public/kssr/PNG/Parts/cockpitGreen_6.png b/public/kssr/PNG/Parts/cockpitGreen_6.png new file mode 100644 index 0000000..902fa89 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitGreen_6.png differ diff --git a/public/kssr/PNG/Parts/cockpitGreen_7.png b/public/kssr/PNG/Parts/cockpitGreen_7.png new file mode 100644 index 0000000..ba20264 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitGreen_7.png differ diff --git a/public/kssr/PNG/Parts/cockpitRed_0.png b/public/kssr/PNG/Parts/cockpitRed_0.png new file mode 100644 index 0000000..b253d3b Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitRed_0.png differ diff --git a/public/kssr/PNG/Parts/cockpitRed_1.png b/public/kssr/PNG/Parts/cockpitRed_1.png new file mode 100644 index 0000000..7b479e1 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitRed_1.png differ diff --git a/public/kssr/PNG/Parts/cockpitRed_2.png b/public/kssr/PNG/Parts/cockpitRed_2.png new file mode 100644 index 0000000..3088927 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitRed_2.png differ diff --git a/public/kssr/PNG/Parts/cockpitRed_3.png b/public/kssr/PNG/Parts/cockpitRed_3.png new file mode 100644 index 0000000..b50afd3 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitRed_3.png differ diff --git a/public/kssr/PNG/Parts/cockpitRed_4.png b/public/kssr/PNG/Parts/cockpitRed_4.png new file mode 100644 index 0000000..55bcdc5 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitRed_4.png differ diff --git a/public/kssr/PNG/Parts/cockpitRed_5.png b/public/kssr/PNG/Parts/cockpitRed_5.png new file mode 100644 index 0000000..ad50910 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitRed_5.png differ diff --git a/public/kssr/PNG/Parts/cockpitRed_6.png b/public/kssr/PNG/Parts/cockpitRed_6.png new file mode 100644 index 0000000..2784e07 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitRed_6.png differ diff --git a/public/kssr/PNG/Parts/cockpitRed_7.png b/public/kssr/PNG/Parts/cockpitRed_7.png new file mode 100644 index 0000000..1f42a01 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitRed_7.png differ diff --git a/public/kssr/PNG/Parts/cockpitYellow_0.png b/public/kssr/PNG/Parts/cockpitYellow_0.png new file mode 100644 index 0000000..d767c3e Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitYellow_0.png differ diff --git a/public/kssr/PNG/Parts/cockpitYellow_1.png b/public/kssr/PNG/Parts/cockpitYellow_1.png new file mode 100644 index 0000000..070add7 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitYellow_1.png differ diff --git a/public/kssr/PNG/Parts/cockpitYellow_2.png b/public/kssr/PNG/Parts/cockpitYellow_2.png new file mode 100644 index 0000000..3778494 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitYellow_2.png differ diff --git a/public/kssr/PNG/Parts/cockpitYellow_3.png b/public/kssr/PNG/Parts/cockpitYellow_3.png new file mode 100644 index 0000000..00c7fa0 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitYellow_3.png differ diff --git a/public/kssr/PNG/Parts/cockpitYellow_4.png b/public/kssr/PNG/Parts/cockpitYellow_4.png new file mode 100644 index 0000000..e712354 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitYellow_4.png differ diff --git a/public/kssr/PNG/Parts/cockpitYellow_5.png b/public/kssr/PNG/Parts/cockpitYellow_5.png new file mode 100644 index 0000000..6419ddd Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitYellow_5.png differ diff --git a/public/kssr/PNG/Parts/cockpitYellow_6.png b/public/kssr/PNG/Parts/cockpitYellow_6.png new file mode 100644 index 0000000..05a8b22 Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitYellow_6.png differ diff --git a/public/kssr/PNG/Parts/cockpitYellow_7.png b/public/kssr/PNG/Parts/cockpitYellow_7.png new file mode 100644 index 0000000..39887ad Binary files /dev/null and b/public/kssr/PNG/Parts/cockpitYellow_7.png differ diff --git a/public/kssr/PNG/Parts/engine1.png b/public/kssr/PNG/Parts/engine1.png new file mode 100644 index 0000000..707b3ad Binary files /dev/null and b/public/kssr/PNG/Parts/engine1.png differ diff --git a/public/kssr/PNG/Parts/engine2.png b/public/kssr/PNG/Parts/engine2.png new file mode 100644 index 0000000..fb258da Binary files /dev/null and b/public/kssr/PNG/Parts/engine2.png differ diff --git a/public/kssr/PNG/Parts/engine3.png b/public/kssr/PNG/Parts/engine3.png new file mode 100644 index 0000000..cf7b358 Binary files /dev/null and b/public/kssr/PNG/Parts/engine3.png differ diff --git a/public/kssr/PNG/Parts/engine4.png b/public/kssr/PNG/Parts/engine4.png new file mode 100644 index 0000000..4d220dc Binary files /dev/null and b/public/kssr/PNG/Parts/engine4.png differ diff --git a/public/kssr/PNG/Parts/engine5.png b/public/kssr/PNG/Parts/engine5.png new file mode 100644 index 0000000..fee0ce9 Binary files /dev/null and b/public/kssr/PNG/Parts/engine5.png differ diff --git a/public/kssr/PNG/Parts/gun00.png b/public/kssr/PNG/Parts/gun00.png new file mode 100644 index 0000000..e2aeaaa Binary files /dev/null and b/public/kssr/PNG/Parts/gun00.png differ diff --git a/public/kssr/PNG/Parts/gun01.png b/public/kssr/PNG/Parts/gun01.png new file mode 100644 index 0000000..72ff58e Binary files /dev/null and b/public/kssr/PNG/Parts/gun01.png differ diff --git a/public/kssr/PNG/Parts/gun02.png b/public/kssr/PNG/Parts/gun02.png new file mode 100644 index 0000000..f8df304 Binary files /dev/null and b/public/kssr/PNG/Parts/gun02.png differ diff --git a/public/kssr/PNG/Parts/gun03.png b/public/kssr/PNG/Parts/gun03.png new file mode 100644 index 0000000..5260f62 Binary files /dev/null and b/public/kssr/PNG/Parts/gun03.png differ diff --git a/public/kssr/PNG/Parts/gun04.png b/public/kssr/PNG/Parts/gun04.png new file mode 100644 index 0000000..cac9d55 Binary files /dev/null and b/public/kssr/PNG/Parts/gun04.png differ diff --git a/public/kssr/PNG/Parts/gun05.png b/public/kssr/PNG/Parts/gun05.png new file mode 100644 index 0000000..560da97 Binary files /dev/null and b/public/kssr/PNG/Parts/gun05.png differ diff --git a/public/kssr/PNG/Parts/gun06.png b/public/kssr/PNG/Parts/gun06.png new file mode 100644 index 0000000..9c57d54 Binary files /dev/null and b/public/kssr/PNG/Parts/gun06.png differ diff --git a/public/kssr/PNG/Parts/gun07.png b/public/kssr/PNG/Parts/gun07.png new file mode 100644 index 0000000..209b40b Binary files /dev/null and b/public/kssr/PNG/Parts/gun07.png differ diff --git a/public/kssr/PNG/Parts/gun08.png b/public/kssr/PNG/Parts/gun08.png new file mode 100644 index 0000000..8850281 Binary files /dev/null and b/public/kssr/PNG/Parts/gun08.png differ diff --git a/public/kssr/PNG/Parts/gun09.png b/public/kssr/PNG/Parts/gun09.png new file mode 100644 index 0000000..e971cc1 Binary files /dev/null and b/public/kssr/PNG/Parts/gun09.png differ diff --git a/public/kssr/PNG/Parts/gun10.png b/public/kssr/PNG/Parts/gun10.png new file mode 100644 index 0000000..ee94786 Binary files /dev/null and b/public/kssr/PNG/Parts/gun10.png differ diff --git a/public/kssr/PNG/Parts/scratch1.png b/public/kssr/PNG/Parts/scratch1.png new file mode 100644 index 0000000..063c89d Binary files /dev/null and b/public/kssr/PNG/Parts/scratch1.png differ diff --git a/public/kssr/PNG/Parts/scratch2.png b/public/kssr/PNG/Parts/scratch2.png new file mode 100644 index 0000000..db4b449 Binary files /dev/null and b/public/kssr/PNG/Parts/scratch2.png differ diff --git a/public/kssr/PNG/Parts/scratch3.png b/public/kssr/PNG/Parts/scratch3.png new file mode 100644 index 0000000..d27b157 Binary files /dev/null and b/public/kssr/PNG/Parts/scratch3.png differ diff --git a/public/kssr/PNG/Parts/turretBase_big.png b/public/kssr/PNG/Parts/turretBase_big.png new file mode 100644 index 0000000..e9747f7 Binary files /dev/null and b/public/kssr/PNG/Parts/turretBase_big.png differ diff --git a/public/kssr/PNG/Parts/turretBase_small.png b/public/kssr/PNG/Parts/turretBase_small.png new file mode 100644 index 0000000..516c0a5 Binary files /dev/null and b/public/kssr/PNG/Parts/turretBase_small.png differ diff --git a/public/kssr/PNG/Parts/wingBlue_0.png b/public/kssr/PNG/Parts/wingBlue_0.png new file mode 100644 index 0000000..ebfc4ae Binary files /dev/null and b/public/kssr/PNG/Parts/wingBlue_0.png differ diff --git a/public/kssr/PNG/Parts/wingBlue_1.png b/public/kssr/PNG/Parts/wingBlue_1.png new file mode 100644 index 0000000..1408a7c Binary files /dev/null and b/public/kssr/PNG/Parts/wingBlue_1.png differ diff --git a/public/kssr/PNG/Parts/wingBlue_2.png b/public/kssr/PNG/Parts/wingBlue_2.png new file mode 100644 index 0000000..358852e Binary files /dev/null and b/public/kssr/PNG/Parts/wingBlue_2.png differ diff --git a/public/kssr/PNG/Parts/wingBlue_3.png b/public/kssr/PNG/Parts/wingBlue_3.png new file mode 100644 index 0000000..7f6f438 Binary files /dev/null and b/public/kssr/PNG/Parts/wingBlue_3.png differ diff --git a/public/kssr/PNG/Parts/wingBlue_4.png b/public/kssr/PNG/Parts/wingBlue_4.png new file mode 100644 index 0000000..0282dc8 Binary files /dev/null and b/public/kssr/PNG/Parts/wingBlue_4.png differ diff --git a/public/kssr/PNG/Parts/wingBlue_5.png b/public/kssr/PNG/Parts/wingBlue_5.png new file mode 100644 index 0000000..335ce63 Binary files /dev/null and b/public/kssr/PNG/Parts/wingBlue_5.png differ diff --git a/public/kssr/PNG/Parts/wingBlue_6.png b/public/kssr/PNG/Parts/wingBlue_6.png new file mode 100644 index 0000000..0837429 Binary files /dev/null and b/public/kssr/PNG/Parts/wingBlue_6.png differ diff --git a/public/kssr/PNG/Parts/wingBlue_7.png b/public/kssr/PNG/Parts/wingBlue_7.png new file mode 100644 index 0000000..bf77ba6 Binary files /dev/null and b/public/kssr/PNG/Parts/wingBlue_7.png differ diff --git a/public/kssr/PNG/Parts/wingGreen_0.png b/public/kssr/PNG/Parts/wingGreen_0.png new file mode 100644 index 0000000..f63d7d6 Binary files /dev/null and b/public/kssr/PNG/Parts/wingGreen_0.png differ diff --git a/public/kssr/PNG/Parts/wingGreen_1.png b/public/kssr/PNG/Parts/wingGreen_1.png new file mode 100644 index 0000000..464a09a Binary files /dev/null and b/public/kssr/PNG/Parts/wingGreen_1.png differ diff --git a/public/kssr/PNG/Parts/wingGreen_2.png b/public/kssr/PNG/Parts/wingGreen_2.png new file mode 100644 index 0000000..a6af1a8 Binary files /dev/null and b/public/kssr/PNG/Parts/wingGreen_2.png differ diff --git a/public/kssr/PNG/Parts/wingGreen_3.png b/public/kssr/PNG/Parts/wingGreen_3.png new file mode 100644 index 0000000..658b453 Binary files /dev/null and b/public/kssr/PNG/Parts/wingGreen_3.png differ diff --git a/public/kssr/PNG/Parts/wingGreen_4.png b/public/kssr/PNG/Parts/wingGreen_4.png new file mode 100644 index 0000000..9290c11 Binary files /dev/null and b/public/kssr/PNG/Parts/wingGreen_4.png differ diff --git a/public/kssr/PNG/Parts/wingGreen_5.png b/public/kssr/PNG/Parts/wingGreen_5.png new file mode 100644 index 0000000..acaabdc Binary files /dev/null and b/public/kssr/PNG/Parts/wingGreen_5.png differ diff --git a/public/kssr/PNG/Parts/wingGreen_6.png b/public/kssr/PNG/Parts/wingGreen_6.png new file mode 100644 index 0000000..1451b8b Binary files /dev/null and b/public/kssr/PNG/Parts/wingGreen_6.png differ diff --git a/public/kssr/PNG/Parts/wingGreen_7.png b/public/kssr/PNG/Parts/wingGreen_7.png new file mode 100644 index 0000000..55f0196 Binary files /dev/null and b/public/kssr/PNG/Parts/wingGreen_7.png differ diff --git a/public/kssr/PNG/Parts/wingRed_0.png b/public/kssr/PNG/Parts/wingRed_0.png new file mode 100644 index 0000000..fcb322a Binary files /dev/null and b/public/kssr/PNG/Parts/wingRed_0.png differ diff --git a/public/kssr/PNG/Parts/wingRed_1.png b/public/kssr/PNG/Parts/wingRed_1.png new file mode 100644 index 0000000..9b87e88 Binary files /dev/null and b/public/kssr/PNG/Parts/wingRed_1.png differ diff --git a/public/kssr/PNG/Parts/wingRed_2.png b/public/kssr/PNG/Parts/wingRed_2.png new file mode 100644 index 0000000..dd21354 Binary files /dev/null and b/public/kssr/PNG/Parts/wingRed_2.png differ diff --git a/public/kssr/PNG/Parts/wingRed_3.png b/public/kssr/PNG/Parts/wingRed_3.png new file mode 100644 index 0000000..e37b920 Binary files /dev/null and b/public/kssr/PNG/Parts/wingRed_3.png differ diff --git a/public/kssr/PNG/Parts/wingRed_4.png b/public/kssr/PNG/Parts/wingRed_4.png new file mode 100644 index 0000000..ff78f76 Binary files /dev/null and b/public/kssr/PNG/Parts/wingRed_4.png differ diff --git a/public/kssr/PNG/Parts/wingRed_5.png b/public/kssr/PNG/Parts/wingRed_5.png new file mode 100644 index 0000000..0a9fe2e Binary files /dev/null and b/public/kssr/PNG/Parts/wingRed_5.png differ diff --git a/public/kssr/PNG/Parts/wingRed_6.png b/public/kssr/PNG/Parts/wingRed_6.png new file mode 100644 index 0000000..e11d7bf Binary files /dev/null and b/public/kssr/PNG/Parts/wingRed_6.png differ diff --git a/public/kssr/PNG/Parts/wingRed_7.png b/public/kssr/PNG/Parts/wingRed_7.png new file mode 100644 index 0000000..1dcecb6 Binary files /dev/null and b/public/kssr/PNG/Parts/wingRed_7.png differ diff --git a/public/kssr/PNG/Parts/wingYellow_0.png b/public/kssr/PNG/Parts/wingYellow_0.png new file mode 100644 index 0000000..fc855bd Binary files /dev/null and b/public/kssr/PNG/Parts/wingYellow_0.png differ diff --git a/public/kssr/PNG/Parts/wingYellow_1.png b/public/kssr/PNG/Parts/wingYellow_1.png new file mode 100644 index 0000000..d155d5c Binary files /dev/null and b/public/kssr/PNG/Parts/wingYellow_1.png differ diff --git a/public/kssr/PNG/Parts/wingYellow_2.png b/public/kssr/PNG/Parts/wingYellow_2.png new file mode 100644 index 0000000..f669a35 Binary files /dev/null and b/public/kssr/PNG/Parts/wingYellow_2.png differ diff --git a/public/kssr/PNG/Parts/wingYellow_3.png b/public/kssr/PNG/Parts/wingYellow_3.png new file mode 100644 index 0000000..fe01aeb Binary files /dev/null and b/public/kssr/PNG/Parts/wingYellow_3.png differ diff --git a/public/kssr/PNG/Parts/wingYellow_4.png b/public/kssr/PNG/Parts/wingYellow_4.png new file mode 100644 index 0000000..beaec56 Binary files /dev/null and b/public/kssr/PNG/Parts/wingYellow_4.png differ diff --git a/public/kssr/PNG/Parts/wingYellow_5.png b/public/kssr/PNG/Parts/wingYellow_5.png new file mode 100644 index 0000000..a99d6a5 Binary files /dev/null and b/public/kssr/PNG/Parts/wingYellow_5.png differ diff --git a/public/kssr/PNG/Parts/wingYellow_6.png b/public/kssr/PNG/Parts/wingYellow_6.png new file mode 100644 index 0000000..100a4cb Binary files /dev/null and b/public/kssr/PNG/Parts/wingYellow_6.png differ diff --git a/public/kssr/PNG/Parts/wingYellow_7.png b/public/kssr/PNG/Parts/wingYellow_7.png new file mode 100644 index 0000000..a4ad861 Binary files /dev/null and b/public/kssr/PNG/Parts/wingYellow_7.png differ diff --git a/public/kssr/PNG/Power-ups/bold_silver.png b/public/kssr/PNG/Power-ups/bold_silver.png new file mode 100644 index 0000000..36f256e Binary files /dev/null and b/public/kssr/PNG/Power-ups/bold_silver.png differ diff --git a/public/kssr/PNG/Power-ups/bolt_bronze.png b/public/kssr/PNG/Power-ups/bolt_bronze.png new file mode 100644 index 0000000..acd002b Binary files /dev/null and b/public/kssr/PNG/Power-ups/bolt_bronze.png differ diff --git a/public/kssr/PNG/Power-ups/bolt_gold.png b/public/kssr/PNG/Power-ups/bolt_gold.png new file mode 100644 index 0000000..c22e0a2 Binary files /dev/null and b/public/kssr/PNG/Power-ups/bolt_gold.png differ diff --git a/public/kssr/PNG/Power-ups/pill_blue.png b/public/kssr/PNG/Power-ups/pill_blue.png new file mode 100644 index 0000000..b07abfb Binary files /dev/null and b/public/kssr/PNG/Power-ups/pill_blue.png differ diff --git a/public/kssr/PNG/Power-ups/pill_green.png b/public/kssr/PNG/Power-ups/pill_green.png new file mode 100644 index 0000000..af6b73a Binary files /dev/null and b/public/kssr/PNG/Power-ups/pill_green.png differ diff --git a/public/kssr/PNG/Power-ups/pill_red.png b/public/kssr/PNG/Power-ups/pill_red.png new file mode 100644 index 0000000..8d89b16 Binary files /dev/null and b/public/kssr/PNG/Power-ups/pill_red.png differ diff --git a/public/kssr/PNG/Power-ups/pill_yellow.png b/public/kssr/PNG/Power-ups/pill_yellow.png new file mode 100644 index 0000000..9d7b2bb Binary files /dev/null and b/public/kssr/PNG/Power-ups/pill_yellow.png differ diff --git a/public/kssr/PNG/Power-ups/powerupBlue.png b/public/kssr/PNG/Power-ups/powerupBlue.png new file mode 100644 index 0000000..1118e1b Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupBlue.png differ diff --git a/public/kssr/PNG/Power-ups/powerupBlue_bolt.png b/public/kssr/PNG/Power-ups/powerupBlue_bolt.png new file mode 100644 index 0000000..28f7aeb Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupBlue_bolt.png differ diff --git a/public/kssr/PNG/Power-ups/powerupBlue_shield.png b/public/kssr/PNG/Power-ups/powerupBlue_shield.png new file mode 100644 index 0000000..b6f2d4c Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupBlue_shield.png differ diff --git a/public/kssr/PNG/Power-ups/powerupBlue_star.png b/public/kssr/PNG/Power-ups/powerupBlue_star.png new file mode 100644 index 0000000..eeda7bc Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupBlue_star.png differ diff --git a/public/kssr/PNG/Power-ups/powerupGreen.png b/public/kssr/PNG/Power-ups/powerupGreen.png new file mode 100644 index 0000000..252611e Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupGreen.png differ diff --git a/public/kssr/PNG/Power-ups/powerupGreen_bolt.png b/public/kssr/PNG/Power-ups/powerupGreen_bolt.png new file mode 100644 index 0000000..555ce79 Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupGreen_bolt.png differ diff --git a/public/kssr/PNG/Power-ups/powerupGreen_shield.png b/public/kssr/PNG/Power-ups/powerupGreen_shield.png new file mode 100644 index 0000000..8d68623 Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupGreen_shield.png differ diff --git a/public/kssr/PNG/Power-ups/powerupGreen_star.png b/public/kssr/PNG/Power-ups/powerupGreen_star.png new file mode 100644 index 0000000..9a3897e Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupGreen_star.png differ diff --git a/public/kssr/PNG/Power-ups/powerupRed.png b/public/kssr/PNG/Power-ups/powerupRed.png new file mode 100644 index 0000000..645f1e3 Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupRed.png differ diff --git a/public/kssr/PNG/Power-ups/powerupRed_bolt.png b/public/kssr/PNG/Power-ups/powerupRed_bolt.png new file mode 100644 index 0000000..ddd1417 Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupRed_bolt.png differ diff --git a/public/kssr/PNG/Power-ups/powerupRed_shield.png b/public/kssr/PNG/Power-ups/powerupRed_shield.png new file mode 100644 index 0000000..7e0efd5 Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupRed_shield.png differ diff --git a/public/kssr/PNG/Power-ups/powerupRed_star.png b/public/kssr/PNG/Power-ups/powerupRed_star.png new file mode 100644 index 0000000..ea98f39 Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupRed_star.png differ diff --git a/public/kssr/PNG/Power-ups/powerupYellow.png b/public/kssr/PNG/Power-ups/powerupYellow.png new file mode 100644 index 0000000..7ba781e Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupYellow.png differ diff --git a/public/kssr/PNG/Power-ups/powerupYellow_bolt.png b/public/kssr/PNG/Power-ups/powerupYellow_bolt.png new file mode 100644 index 0000000..beb6db1 Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupYellow_bolt.png differ diff --git a/public/kssr/PNG/Power-ups/powerupYellow_shield.png b/public/kssr/PNG/Power-ups/powerupYellow_shield.png new file mode 100644 index 0000000..ac01e3d Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupYellow_shield.png differ diff --git a/public/kssr/PNG/Power-ups/powerupYellow_star.png b/public/kssr/PNG/Power-ups/powerupYellow_star.png new file mode 100644 index 0000000..fc7b6c8 Binary files /dev/null and b/public/kssr/PNG/Power-ups/powerupYellow_star.png differ diff --git a/public/kssr/PNG/Power-ups/shield_bronze.png b/public/kssr/PNG/Power-ups/shield_bronze.png new file mode 100644 index 0000000..f62dd74 Binary files /dev/null and b/public/kssr/PNG/Power-ups/shield_bronze.png differ diff --git a/public/kssr/PNG/Power-ups/shield_gold.png b/public/kssr/PNG/Power-ups/shield_gold.png new file mode 100644 index 0000000..08598e8 Binary files /dev/null and b/public/kssr/PNG/Power-ups/shield_gold.png differ diff --git a/public/kssr/PNG/Power-ups/shield_silver.png b/public/kssr/PNG/Power-ups/shield_silver.png new file mode 100644 index 0000000..9f691ed Binary files /dev/null and b/public/kssr/PNG/Power-ups/shield_silver.png differ diff --git a/public/kssr/PNG/Power-ups/star_bronze.png b/public/kssr/PNG/Power-ups/star_bronze.png new file mode 100644 index 0000000..2450ea1 Binary files /dev/null and b/public/kssr/PNG/Power-ups/star_bronze.png differ diff --git a/public/kssr/PNG/Power-ups/star_gold.png b/public/kssr/PNG/Power-ups/star_gold.png new file mode 100644 index 0000000..4f048ef Binary files /dev/null and b/public/kssr/PNG/Power-ups/star_gold.png differ diff --git a/public/kssr/PNG/Power-ups/star_silver.png b/public/kssr/PNG/Power-ups/star_silver.png new file mode 100644 index 0000000..0d874f5 Binary files /dev/null and b/public/kssr/PNG/Power-ups/star_silver.png differ diff --git a/public/kssr/PNG/Power-ups/things_bronze.png b/public/kssr/PNG/Power-ups/things_bronze.png new file mode 100644 index 0000000..a4fb9be Binary files /dev/null and b/public/kssr/PNG/Power-ups/things_bronze.png differ diff --git a/public/kssr/PNG/Power-ups/things_gold.png b/public/kssr/PNG/Power-ups/things_gold.png new file mode 100644 index 0000000..d999d25 Binary files /dev/null and b/public/kssr/PNG/Power-ups/things_gold.png differ diff --git a/public/kssr/PNG/Power-ups/things_silver.png b/public/kssr/PNG/Power-ups/things_silver.png new file mode 100644 index 0000000..ba7cdf1 Binary files /dev/null and b/public/kssr/PNG/Power-ups/things_silver.png differ diff --git a/public/kssr/PNG/UI/buttonBlue.png b/public/kssr/PNG/UI/buttonBlue.png new file mode 100644 index 0000000..0b8eed2 Binary files /dev/null and b/public/kssr/PNG/UI/buttonBlue.png differ diff --git a/public/kssr/PNG/UI/buttonGreen.png b/public/kssr/PNG/UI/buttonGreen.png new file mode 100644 index 0000000..1fc2213 Binary files /dev/null and b/public/kssr/PNG/UI/buttonGreen.png differ diff --git a/public/kssr/PNG/UI/buttonRed.png b/public/kssr/PNG/UI/buttonRed.png new file mode 100644 index 0000000..9046ebb Binary files /dev/null and b/public/kssr/PNG/UI/buttonRed.png differ diff --git a/public/kssr/PNG/UI/buttonYellow.png b/public/kssr/PNG/UI/buttonYellow.png new file mode 100644 index 0000000..9770341 Binary files /dev/null and b/public/kssr/PNG/UI/buttonYellow.png differ diff --git a/public/kssr/PNG/UI/cursor.png b/public/kssr/PNG/UI/cursor.png new file mode 100644 index 0000000..9a5c5c2 Binary files /dev/null and b/public/kssr/PNG/UI/cursor.png differ diff --git a/public/kssr/PNG/UI/numeral0.png b/public/kssr/PNG/UI/numeral0.png new file mode 100644 index 0000000..4ac136f Binary files /dev/null and b/public/kssr/PNG/UI/numeral0.png differ diff --git a/public/kssr/PNG/UI/numeral1.png b/public/kssr/PNG/UI/numeral1.png new file mode 100644 index 0000000..6ffeaaa Binary files /dev/null and b/public/kssr/PNG/UI/numeral1.png differ diff --git a/public/kssr/PNG/UI/numeral2.png b/public/kssr/PNG/UI/numeral2.png new file mode 100644 index 0000000..e1628bd Binary files /dev/null and b/public/kssr/PNG/UI/numeral2.png differ diff --git a/public/kssr/PNG/UI/numeral3.png b/public/kssr/PNG/UI/numeral3.png new file mode 100644 index 0000000..386ac44 Binary files /dev/null and b/public/kssr/PNG/UI/numeral3.png differ diff --git a/public/kssr/PNG/UI/numeral4.png b/public/kssr/PNG/UI/numeral4.png new file mode 100644 index 0000000..3a40e32 Binary files /dev/null and b/public/kssr/PNG/UI/numeral4.png differ diff --git a/public/kssr/PNG/UI/numeral5.png b/public/kssr/PNG/UI/numeral5.png new file mode 100644 index 0000000..fbcc76f Binary files /dev/null and b/public/kssr/PNG/UI/numeral5.png differ diff --git a/public/kssr/PNG/UI/numeral6.png b/public/kssr/PNG/UI/numeral6.png new file mode 100644 index 0000000..2383268 Binary files /dev/null and b/public/kssr/PNG/UI/numeral6.png differ diff --git a/public/kssr/PNG/UI/numeral7.png b/public/kssr/PNG/UI/numeral7.png new file mode 100644 index 0000000..e2e9d7a Binary files /dev/null and b/public/kssr/PNG/UI/numeral7.png differ diff --git a/public/kssr/PNG/UI/numeral8.png b/public/kssr/PNG/UI/numeral8.png new file mode 100644 index 0000000..0f354ff Binary files /dev/null and b/public/kssr/PNG/UI/numeral8.png differ diff --git a/public/kssr/PNG/UI/numeral9.png b/public/kssr/PNG/UI/numeral9.png new file mode 100644 index 0000000..b1e4cb4 Binary files /dev/null and b/public/kssr/PNG/UI/numeral9.png differ diff --git a/public/kssr/PNG/UI/numeralX.png b/public/kssr/PNG/UI/numeralX.png new file mode 100644 index 0000000..7bad6ac Binary files /dev/null and b/public/kssr/PNG/UI/numeralX.png differ diff --git a/public/kssr/PNG/UI/playerLife1_blue.png b/public/kssr/PNG/UI/playerLife1_blue.png new file mode 100644 index 0000000..4a6c8b9 Binary files /dev/null and b/public/kssr/PNG/UI/playerLife1_blue.png differ diff --git a/public/kssr/PNG/UI/playerLife1_green.png b/public/kssr/PNG/UI/playerLife1_green.png new file mode 100644 index 0000000..ca4c39e Binary files /dev/null and b/public/kssr/PNG/UI/playerLife1_green.png differ diff --git a/public/kssr/PNG/UI/playerLife1_orange.png b/public/kssr/PNG/UI/playerLife1_orange.png new file mode 100644 index 0000000..8c02aa2 Binary files /dev/null and b/public/kssr/PNG/UI/playerLife1_orange.png differ diff --git a/public/kssr/PNG/UI/playerLife1_red.png b/public/kssr/PNG/UI/playerLife1_red.png new file mode 100644 index 0000000..6375095 Binary files /dev/null and b/public/kssr/PNG/UI/playerLife1_red.png differ diff --git a/public/kssr/PNG/UI/playerLife2_blue.png b/public/kssr/PNG/UI/playerLife2_blue.png new file mode 100644 index 0000000..17478e6 Binary files /dev/null and b/public/kssr/PNG/UI/playerLife2_blue.png differ diff --git a/public/kssr/PNG/UI/playerLife2_green.png b/public/kssr/PNG/UI/playerLife2_green.png new file mode 100644 index 0000000..325cad6 Binary files /dev/null and b/public/kssr/PNG/UI/playerLife2_green.png differ diff --git a/public/kssr/PNG/UI/playerLife2_orange.png b/public/kssr/PNG/UI/playerLife2_orange.png new file mode 100644 index 0000000..ae1bf6c Binary files /dev/null and b/public/kssr/PNG/UI/playerLife2_orange.png differ diff --git a/public/kssr/PNG/UI/playerLife2_red.png b/public/kssr/PNG/UI/playerLife2_red.png new file mode 100644 index 0000000..abada85 Binary files /dev/null and b/public/kssr/PNG/UI/playerLife2_red.png differ diff --git a/public/kssr/PNG/UI/playerLife3_blue.png b/public/kssr/PNG/UI/playerLife3_blue.png new file mode 100644 index 0000000..a1411ec Binary files /dev/null and b/public/kssr/PNG/UI/playerLife3_blue.png differ diff --git a/public/kssr/PNG/UI/playerLife3_green.png b/public/kssr/PNG/UI/playerLife3_green.png new file mode 100644 index 0000000..a1c9db1 Binary files /dev/null and b/public/kssr/PNG/UI/playerLife3_green.png differ diff --git a/public/kssr/PNG/UI/playerLife3_orange.png b/public/kssr/PNG/UI/playerLife3_orange.png new file mode 100644 index 0000000..b359359 Binary files /dev/null and b/public/kssr/PNG/UI/playerLife3_orange.png differ diff --git a/public/kssr/PNG/UI/playerLife3_red.png b/public/kssr/PNG/UI/playerLife3_red.png new file mode 100644 index 0000000..5417fd9 Binary files /dev/null and b/public/kssr/PNG/UI/playerLife3_red.png differ diff --git a/public/kssr/PNG/playerShip1_blue.png b/public/kssr/PNG/playerShip1_blue.png new file mode 100644 index 0000000..cecbbed Binary files /dev/null and b/public/kssr/PNG/playerShip1_blue.png differ diff --git a/public/kssr/PNG/playerShip1_green.png b/public/kssr/PNG/playerShip1_green.png new file mode 100644 index 0000000..2eb6f9c Binary files /dev/null and b/public/kssr/PNG/playerShip1_green.png differ diff --git a/public/kssr/PNG/playerShip1_orange.png b/public/kssr/PNG/playerShip1_orange.png new file mode 100644 index 0000000..3902283 Binary files /dev/null and b/public/kssr/PNG/playerShip1_orange.png differ diff --git a/public/kssr/PNG/playerShip1_red.png b/public/kssr/PNG/playerShip1_red.png new file mode 100644 index 0000000..3695e09 Binary files /dev/null and b/public/kssr/PNG/playerShip1_red.png differ diff --git a/public/kssr/PNG/playerShip2_blue.png b/public/kssr/PNG/playerShip2_blue.png new file mode 100644 index 0000000..e277114 Binary files /dev/null and b/public/kssr/PNG/playerShip2_blue.png differ diff --git a/public/kssr/PNG/playerShip2_green.png b/public/kssr/PNG/playerShip2_green.png new file mode 100644 index 0000000..72e18c7 Binary files /dev/null and b/public/kssr/PNG/playerShip2_green.png differ diff --git a/public/kssr/PNG/playerShip2_orange.png b/public/kssr/PNG/playerShip2_orange.png new file mode 100644 index 0000000..82ddc80 Binary files /dev/null and b/public/kssr/PNG/playerShip2_orange.png differ diff --git a/public/kssr/PNG/playerShip2_red.png b/public/kssr/PNG/playerShip2_red.png new file mode 100644 index 0000000..8213e97 Binary files /dev/null and b/public/kssr/PNG/playerShip2_red.png differ diff --git a/public/kssr/PNG/playerShip3_blue.png b/public/kssr/PNG/playerShip3_blue.png new file mode 100644 index 0000000..f34faf0 Binary files /dev/null and b/public/kssr/PNG/playerShip3_blue.png differ diff --git a/public/kssr/PNG/playerShip3_green.png b/public/kssr/PNG/playerShip3_green.png new file mode 100644 index 0000000..b853be4 Binary files /dev/null and b/public/kssr/PNG/playerShip3_green.png differ diff --git a/public/kssr/PNG/playerShip3_orange.png b/public/kssr/PNG/playerShip3_orange.png new file mode 100644 index 0000000..0b6b7ec Binary files /dev/null and b/public/kssr/PNG/playerShip3_orange.png differ diff --git a/public/kssr/PNG/playerShip3_red.png b/public/kssr/PNG/playerShip3_red.png new file mode 100644 index 0000000..796e81d Binary files /dev/null and b/public/kssr/PNG/playerShip3_red.png differ diff --git a/public/kssr/PNG/ufoBlue.png b/public/kssr/PNG/ufoBlue.png new file mode 100644 index 0000000..6397792 Binary files /dev/null and b/public/kssr/PNG/ufoBlue.png differ diff --git a/public/kssr/PNG/ufoGreen.png b/public/kssr/PNG/ufoGreen.png new file mode 100644 index 0000000..7d441b2 Binary files /dev/null and b/public/kssr/PNG/ufoGreen.png differ diff --git a/public/kssr/PNG/ufoRed.png b/public/kssr/PNG/ufoRed.png new file mode 100644 index 0000000..62dd549 Binary files /dev/null and b/public/kssr/PNG/ufoRed.png differ diff --git a/public/kssr/PNG/ufoYellow.png b/public/kssr/PNG/ufoYellow.png new file mode 100644 index 0000000..838c4e8 Binary files /dev/null and b/public/kssr/PNG/ufoYellow.png differ diff --git a/public/kssr/Spritesheet/sheet.png b/public/kssr/Spritesheet/sheet.png new file mode 100644 index 0000000..8c58b86 Binary files /dev/null and b/public/kssr/Spritesheet/sheet.png differ diff --git a/public/kssr/Spritesheet/sheet.xml b/public/kssr/Spritesheet/sheet.xml new file mode 100644 index 0000000..71e1ccf --- /dev/null +++ b/public/kssr/Spritesheet/sheet.xml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/kssr/Vector/sheet.svg b/public/kssr/Vector/sheet.svg new file mode 100644 index 0000000..780d70b --- /dev/null +++ b/public/kssr/Vector/sheet.svg @@ -0,0 +1,1455 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/kssr/license.txt b/public/kssr/license.txt new file mode 100644 index 0000000..8b48cc3 --- /dev/null +++ b/public/kssr/license.txt @@ -0,0 +1,14 @@ + +############################################################################### + + Space Shooter (Redux, plus fonts and sounds) by Kenney Vleugels (www.kenney.nl) + + ------------------------------ + + License (CC0) + http://creativecommons.org/publicdomain/zero/1.0/ + + You may use these graphics in personal and commercial projects. + Credit (Kenney or www.kenney.nl) would be nice but is not mandatory. + +############################################################################### \ No newline at end of file diff --git a/public/kssr/preview.png b/public/kssr/preview.png new file mode 100644 index 0000000..633aa2a Binary files /dev/null and b/public/kssr/preview.png differ diff --git a/public/kssr/sample.png b/public/kssr/sample.png new file mode 100644 index 0000000..0627784 Binary files /dev/null and b/public/kssr/sample.png differ diff --git a/public/logo_space.png b/public/logo_space.png new file mode 100644 index 0000000..4f1608f Binary files /dev/null and b/public/logo_space.png differ diff --git a/public/medaille.png b/public/medaille.png new file mode 100644 index 0000000..688eb06 Binary files /dev/null and b/public/medaille.png differ diff --git a/public/ranking.png b/public/ranking.png new file mode 100644 index 0000000..2cc4d48 Binary files /dev/null and b/public/ranking.png differ diff --git a/public/tir.png b/public/tir.png new file mode 100644 index 0000000..6ec4ab7 Binary files /dev/null and b/public/tir.png differ diff --git a/public/vie.png b/public/vie.png new file mode 100644 index 0000000..d2b034a Binary files /dev/null and b/public/vie.png differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..873260d --- /dev/null +++ b/src/App.vue @@ -0,0 +1,7 @@ + + + diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..b1a1d1b --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,55 @@ +* { + box-sizing: border-box; +} + +body { + margin: 0; + padding: 0; +} + +@font-face { + font-family: 'Kenvector Future'; + src: url('/kssr/Bonus/kenvector_future.ttf'); +} + +@font-face { + font-family: 'Balgin Black'; + src: url('/kssr/Bonus/balgin-black.ttf'); +} + +@font-face { + font-family: 'Anek Tamil'; + src: url('/kssr/Bonus/AnekTamil-VariableFont_wdth,wght.ttf'); +} + +button { + padding: 16px 32px; + background: linear-gradient(#ED72B5 0, #D90277 100%); + color: white; + font-family: 'Kenvector Future'; + border: none; + outline: none; + border-radius: 32px; + cursor: pointer; +} + +input[type="text"] { + border: none; + outline: none; + + color: white; + background-color: transparent; + box-shadow: white 0 1px 0; + + padding: 16px 24px; + + font-family: 'Anek Tamil'; + font-size: 32px; + text-align: center; + + width: 100%; +} + +input[type="text"]::placeholder { + color: white; +} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..5dcad83 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,14 @@ +import './assets/main.css' + +import { createApp } from 'vue' +import { createPinia } from 'pinia' + +import App from './App.vue' +import router from './router' + +const app = createApp(App) + +app.use(createPinia()) +app.use(router) + +app.mount('#app') diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..20bb459 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,38 @@ +import { createRouter, createWebHistory } from 'vue-router' +import Home from '@/views/Home.vue' +import Rules from '@/views/Rules.vue' +import SaveScore from '@/views/SaveScore.vue' +import Score from '@/views/Score.vue' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: Home + }, + { + path: '/game', + name: 'game', + component: () => import('@/views/Game.vue') + }, + { + path: '/rules', + name: 'rules', + component: Rules + }, + { + path: '/score/save', + name: 'saveScore', + component: SaveScore + }, + { + path: '/score', + name: 'score', + component: Score + } + ] +}) + +export default router diff --git a/src/stores/bullets.ts b/src/stores/bullets.ts new file mode 100644 index 0000000..fecf605 --- /dev/null +++ b/src/stores/bullets.ts @@ -0,0 +1,60 @@ +import { ref, type Ref } from 'vue' +import { defineStore } from 'pinia' +import * as PIXI from 'pixi.js' + +export interface DomainBullet { + sprite: PIXI.Sprite + speed: number + sender: PIXI.Sprite + collisionHandler: (bullet: PIXI.Sprite) => boolean +} + +export interface BulletEntity extends DomainBullet { + id: number +} + +export const useBulletsStore = defineStore('bullets', () => { + const _bullets: Ref> = ref([]) + const _stage: Ref | undefined> = ref() + const _bulletIdCounter = ref(0) + + function init(stage: PIXI.Container) { + _stage.value = stage + } + + function addBullet(bullet: DomainBullet) { + _bullets.value.push({ + ...bullet, + id: _bulletIdCounter.value + }) + _bulletIdCounter.value += 1 + _stage.value?.addChild(bullet.sprite) + } + + function _destroyBullet(bulletId: number) { + const bulletIndex = _bullets.value.findIndex((b) => b.id === bulletId) + if (bulletIndex === -1) return + + const bullet = _bullets.value[bulletIndex] + + _stage.value?.removeChild(bullet.sprite) + _bullets.value.splice(bulletIndex, 1) + bullet.sprite.destroy() + } + + function updateBullets(delta: number) { + const bulletsCopy = Array.from(_bullets.value) + + for (const bullet of bulletsCopy) { + if (!bullet.sprite || bullet.sprite.destroyed) continue + bullet.sprite.y += bullet.speed * delta + const isBulletOutOfBound = bullet.sprite.y >= 600 || bullet.sprite.y <= 0 + const isCollided = bullet.collisionHandler(bullet.sprite) + if (isBulletOutOfBound || isCollided) { + _destroyBullet(bullet.id) + } + } + } + + return { init, addBullet, updateBullets } +}) diff --git a/src/stores/enemies.ts b/src/stores/enemies.ts new file mode 100644 index 0000000..17cc0fb --- /dev/null +++ b/src/stores/enemies.ts @@ -0,0 +1,206 @@ +import { ref, type Ref } from 'vue' +import { defineStore } from 'pinia' +import * as PIXI from 'pixi.js' +import { usePlayerStore } from './player' +import { useBulletsStore } from './bullets' + +export interface Enemy { + id: number + sprite: PIXI.Sprite + health: number + speed: number + randomMultiplier: number + enemyType: 'red' | 'green' | 'blue' + score: number + onHit: (id: number, damages: number) => boolean +} + +export interface EnemyBullet { + sprite: PIXI.Sprite + isGuided: boolean + speed: number + dx?: number + dy?: number +} + +const ENEMIES_TYPES = { + enemies: { + red: [ + { texture: '/kssr/PNG/Enemies/enemyRed1.png', speed: 4, health: 1, score: 10 }, + { texture: '/kssr/PNG/Enemies/enemyRed2.png', speed: 4, health: 1, score: 10 }, + { texture: '/kssr/PNG/Enemies/enemyRed3.png', speed: 4, health: 1, score: 10 }, + { texture: '/kssr/PNG/Enemies/enemyRed4.png', speed: 4, health: 1, score: 10 }, + { texture: '/kssr/PNG/Enemies/enemyRed5.png', speed: 4, health: 1, score: 10 } + ], + blue: [ + { texture: '/kssr/PNG/Enemies/enemyBlue1.png', speed: 2, health: 2, score: 5 }, + { texture: '/kssr/PNG/Enemies/enemyBlue2.png', speed: 2, health: 2, score: 5 }, + { texture: '/kssr/PNG/Enemies/enemyBlue3.png', speed: 2, health: 2, score: 5 }, + { texture: '/kssr/PNG/Enemies/enemyBlue4.png', speed: 2, health: 2, score: 5 }, + { texture: '/kssr/PNG/Enemies/enemyBlue5.png', speed: 2, health: 2, score: 5 } + ], + green: [ + { texture: '/kssr/PNG/Enemies/enemyGreen1.png', speed: 1, health: 3, score: 15 }, + { texture: '/kssr/PNG/Enemies/enemyGreen2.png', speed: 1, health: 3, score: 15 }, + { texture: '/kssr/PNG/Enemies/enemyGreen3.png', speed: 1, health: 3, score: 15 }, + { texture: '/kssr/PNG/Enemies/enemyGreen4.png', speed: 1, health: 3, score: 15 }, + { texture: '/kssr/PNG/Enemies/enemyGreen5.png', speed: 1, health: 3, score: 15 } + ] + }, + bullets: { + red: { texture: '/kssr/PNG/Lasers/laserRed05.png', speed: 7 }, + blue: { texture: '/kssr/PNG/Lasers/laserBlue03.png', speed: 5 }, + green: { texture: '/kssr/PNG/Lasers/laserGreen04.png', speed: 3 } + } +} + +export const useEnemiesStore = defineStore('enemies', () => { + const enemies: Ref> = ref([]) + + const _elapsed = ref(0) + const _lastTimeBulletFired = ref(0) + const _playerStore = usePlayerStore() + const _bulletsStore = useBulletsStore() + const _enemiesIdCounter = ref(0) + + function onHit( + id: number, + damages: number, + stage: PIXI.Container + ): boolean { + const enemyIndex = enemies.value.findIndex((e) => e.id === id) + if (enemyIndex === -1) return false + const localEnemy = enemies.value[enemyIndex] + localEnemy.health -= damages + if (localEnemy.health < 1) { + stage.removeChild(localEnemy.sprite) + localEnemy.sprite.destroy() + enemies.value.splice(enemyIndex, 1) + return true + } + return false + } + + function spawnOne( + stage: PIXI.Container, + x: number, + y: number, + enemyType: 'red' | 'green' | 'blue' + ) { + const randomBetween0and100 = Math.floor(Math.random() * 100) + const textureIndex = Math.floor(Math.random() * 4) + const enemyData = ENEMIES_TYPES.enemies[enemyType][textureIndex] + const enemy = new PIXI.Sprite(PIXI.Texture.from(enemyData.texture)) + const scale = enemyType === 'green' ? 0.8 : 0.4 + enemy.setTransform(x, y, scale, scale) + enemy.anchor.set(0.5, 0.5) + enemies.value.push({ + id: _enemiesIdCounter.value, + sprite: enemy, + health: enemyData.health, + speed: enemyData.speed, + randomMultiplier: randomBetween0and100, + score: enemyData.score, + enemyType, + onHit: (id, damages) => onHit(id, damages, stage) + }) + stage.addChild(enemy) + _enemiesIdCounter.value += 1 + } + + function spawnAll( + stage: PIXI.Container, + quantity: number, + enemyType: 'red' | 'green' | 'blue' + ) { + for (let j = 0; j < quantity; j++) { + const x = Math.floor(Math.random() * (600 - 200) + 200) + const y = Math.floor(Math.random() * -quantity * 150) + spawnOne(stage, x, y, enemyType) + } + } + + function _fireRandomBullet(stage: PIXI.Container): void { + let i = 0 + let randomIndex = 0 + let randomEnemy = {} as Enemy + while (i < 100) { + randomIndex = Math.floor(Math.random() * enemies.value.length) + randomEnemy = enemies.value[randomIndex] + i++ + + if (!randomEnemy) continue + if (randomEnemy.sprite && !randomEnemy.sprite.destroyed) { + if (randomEnemy.sprite.y > 500 || randomEnemy.sprite.y < 0) continue + break + } + } + if (!randomEnemy || !randomEnemy.sprite || randomEnemy.sprite?.destroyed) return + if (!_playerStore.sprite) return + const enemyData = ENEMIES_TYPES.bullets[randomEnemy.enemyType] + const bullet = new PIXI.Sprite(PIXI.Texture.from(enemyData.texture)) + bullet.anchor.set(0.5, 0.5) + bullet.x = randomEnemy.sprite.x + bullet.y = randomEnemy.sprite.y + + // const dx = _playerStore.sprite.x - bullet.x + // const dy = _playerStore.sprite.y - bullet.y + // bullet.angle = randomEnemy.isFollowingPlayer + // ? (Math.atan2(dy, dx) * 180) / Math.PI - 90 + // : 180 + bullet.angle = 180 + + _bulletsStore.addBullet({ + sprite: bullet, + speed: enemyData.speed, + sender: randomEnemy.sprite, + collisionHandler(bullet) { + const player = _playerStore.sprite as PIXI.Sprite + if (!player || player.destroyed) return false + const playerHalfWidth = player.width / 2 + const playerHalfHeight = player.height / 2 + const isHit = + bullet.y >= player.y - playerHalfHeight && + bullet.y <= player.y + playerHalfHeight && + bullet.x >= player.x - playerHalfWidth && + bullet.x <= player.x + playerHalfWidth + if (!isHit) return false + _playerStore.onHit(stage) + return true + } + }) + } + + function _updateMovements(delta: number, stage: PIXI.Container) { + const localEnemies = Array.from(enemies.value) + for (const enemy of localEnemies) { + if (enemy.sprite.destroyed || !_playerStore.sprite) continue + enemy.sprite.x += Math.cos(_elapsed.value / (enemy.randomMultiplier + 100)) + enemy.sprite.y += enemy.speed * delta + + if (enemy.sprite.y > 600) { + stage.removeChild(enemy.sprite) + enemy.sprite.destroy() + const i = enemies.value.findIndex((e) => e.id === enemy.id) + enemies.value.splice(i, 1) + return + } + // if (enemy.isFollowingPlayer) { + // const dx = _playerStore.sprite.x - enemy.sprite.x + // const dy = _playerStore.sprite.y - enemy.sprite.y + // enemy.sprite.angle = (Math.atan2(dy, dx) * 180) / Math.PI - 90 + // } + } + } + + function updatePhysics(delta: number, stage: PIXI.Container) { + _elapsed.value += delta + _updateMovements(delta, stage) + if (_elapsed.value > _lastTimeBulletFired.value + 15) { + _fireRandomBullet(stage) + _lastTimeBulletFired.value = _elapsed.value + } + } + + return { enemies, updatePhysics, spawnAll } +}) diff --git a/src/stores/game.ts b/src/stores/game.ts new file mode 100644 index 0000000..6624390 --- /dev/null +++ b/src/stores/game.ts @@ -0,0 +1,69 @@ +import { ref, type Ref } from 'vue' +import { defineStore } from 'pinia' +import * as PIXI from 'pixi.js' +import { usePlayerStore } from './player' +import { useEnemiesStore } from './enemies' +import { useBulletsStore } from './bullets' + +export interface Rank { + nickname: string + position: number + score: number +} + +export const useGameStore = defineStore('game', () => { + const app = new PIXI.Application({ + width: 800, + height: 600, + backgroundAlpha: 0 + }) + + const rank = ref({ + score: 0 + } as Rank) + const state = ref(0) + const started = ref(false) + + const _elapsed = ref(0) + + const _playerStore = usePlayerStore() + const _enemiesStore = useEnemiesStore() + const _bulletsStore = useBulletsStore() + + function reset() { + rank.value.score = 0 + state.value = 0 + _elapsed.value = 0 + _enemiesStore.enemies = [] + } + + function startRenderLoop() { + _bulletsStore.init(app.stage) + app.ticker.add((delta) => { + _elapsed.value += delta + _playerStore.updatePhysics(delta) + _enemiesStore.updatePhysics(delta, app.stage) + _bulletsStore.updateBullets(delta) + }) + _playerStore.init('/kssr/PNG/playerShip1_blue.png', 3, 5) + app.stage.addChild(_playerStore?.sprite as unknown as PIXI.DisplayObject) + window.addEventListener('keydown', _playerStore.updateEvents) + window.addEventListener('keyup', _playerStore.updateEvents) + + _enemiesStore.spawnAll(app.stage, 10, 'blue') + + setInterval(() => _enemiesStore.spawnAll(app.stage, 5, 'blue'), 5000) + + setTimeout(() => { + setInterval(() => _enemiesStore.spawnAll(app.stage, 2, 'red'), 2000) + state.value += 1 + + setTimeout(() => { + setInterval(() => _enemiesStore.spawnAll(app.stage, 3, 'green'), 4000) + state.value += 1 + }, 20000) + }, 20000) + } + + return { app, rank, state, started, reset, startRenderLoop } +}) diff --git a/src/stores/player.ts b/src/stores/player.ts new file mode 100644 index 0000000..8960c6d --- /dev/null +++ b/src/stores/player.ts @@ -0,0 +1,136 @@ +import { ref, type Ref } from 'vue' +import { defineStore } from 'pinia' +import * as PIXI from 'pixi.js' +import { useEnemiesStore, type Enemy, type EnemyBullet } from './enemies' +import { useGameStore } from './game' +import { useBulletsStore, type BulletEntity } from './bullets' +import { useRouter } from 'vue-router' +import router from '@/router' + +export const usePlayerStore = defineStore('player', () => { + const sprite: Ref = ref() + const movement: Ref<'left' | 'idle' | 'right'> = ref('idle') + const damagesDiv: Ref = ref() + const gameOver: Ref = ref() + + const _enemiesStore = useEnemiesStore() + const _gameStore = useGameStore() + const _router = useRouter() + + const _health: Ref = ref(3) + const _speed: Ref = ref(5) + const _keybinding = ref([ + { key: 'ArrowLeft', isPressed: false }, + { key: 'ArrowRight', isPressed: false }, + { key: ' ', isPressed: false }, + { key: 'ArrowUp', isPressed: false } + ]) + const _isKeyPressed = (key: string): boolean | undefined => + _keybinding.value.find((k) => k.key === key)?.isPressed + + const _bulletsStore = useBulletsStore() + const _bulletTexture = PIXI.Texture.from('/kssr/PNG/Lasers/laserBlue01.png') + + const _elapsed = ref(0) + + function init(spriteFile: string, health: number, speed: number): void { + sprite.value = PIXI.Sprite.from(spriteFile) + sprite.value.x = 400 + sprite.value.width / 2 + sprite.value.y = 525 + sprite.value.scale.set(0.5, 0.5) + sprite.value.anchor.set(0.5, 0.5) + _health.value = health + _speed.value = speed + } + + function _fireBullet(): void { + if (!sprite.value || sprite.value.destroyed) return + const bullet = new PIXI.Sprite(_bulletTexture) + bullet.x = sprite.value.x - bullet.width / 2 + Math.floor(Math.random() * 12 - 6) + bullet.y = sprite.value.y - bullet.height / 2 + _bulletsStore.addBullet({ + sprite: bullet, + speed: -5, + sender: sprite?.value, + collisionHandler: (bullet) => { + if (!sprite.value) return false + for (const enemy of _enemiesStore.enemies) { + const enemyHalfWidth = enemy.sprite.width / 2 + const enemyHalfHeight = enemy.sprite.height / 2 + const isHit = + bullet.y >= enemy.sprite.y - enemyHalfHeight && + bullet.y <= enemy.sprite.y + enemyHalfHeight && + bullet.x >= enemy.sprite.x - enemyHalfWidth && + bullet.x <= enemy.sprite.x + enemyHalfWidth + if (isHit) { + const isDead = enemy.onHit(enemy.id, 1) + if (isDead) _gameStore.rank.score += enemy.score + return true + } + } + return false + } + }) + } + + function _checkMovement(delta: number): void { + if (!sprite.value || sprite.value.destroyed) return + if (_isKeyPressed('ArrowLeft') && sprite.value.x > 0 + sprite.value.width / 2) { + sprite.value.x -= _speed.value * delta + sprite.value.skew.set(0, -0.2) + } else if (_isKeyPressed('ArrowRight') && sprite.value.x < 800 - sprite.value.width / 2) { + sprite.value.skew.set(0, 0.2) + sprite.value.x += _speed.value * delta + } else { + sprite.value.skew.set(0, 0) + } + } + + function _checkFire(fireRate: number = 15): void { + if ((_isKeyPressed(' ') || _isKeyPressed('ArrowUp')) && _elapsed.value > fireRate) { + _fireBullet() + _elapsed.value = 0 + } + } + + function onHit(stage: PIXI.Container): boolean { + _health.value -= 1 + if (damagesDiv?.value) damagesDiv.value.style.backgroundColor = 'white' + const isDead = _health.value < 1 + if (isDead && sprite.value) { + stage.removeChild(sprite.value) + sprite.value?.destroy() + if (!gameOver.value) return false + gameOver.value.style.visibility = 'visible' + setTimeout(() => { + router.push('/score/save') + }, 2000) + } + return isDead + } + + function updateEvents(e: KeyboardEvent): void { + if (!movement?.value) return + const key = _keybinding.value.find((k) => k.key === e.key) + if (!key) return + key.isPressed = e.type === 'keydown' + } + + function updatePhysics(delta: number): void { + _elapsed.value += delta + _checkMovement(delta) + _checkFire() + } + + return { + init, + sprite, + movement, + _health, + damagesDiv, + gameOver, + onHit, + updateEvents, + updatePhysics + } +}) diff --git a/src/views/Game.vue b/src/views/Game.vue new file mode 100644 index 0000000..88cf032 --- /dev/null +++ b/src/views/Game.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/views/Home.vue b/src/views/Home.vue new file mode 100644 index 0000000..691ee53 --- /dev/null +++ b/src/views/Home.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/Rules.vue b/src/views/Rules.vue new file mode 100644 index 0000000..26da1d3 --- /dev/null +++ b/src/views/Rules.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/views/SaveScore.vue b/src/views/SaveScore.vue new file mode 100644 index 0000000..f02332c --- /dev/null +++ b/src/views/SaveScore.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/views/Score.vue b/src/views/Score.vue new file mode 100644 index 0000000..dfe85d4 --- /dev/null +++ b/src/views/Score.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..e14c754 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..66b5e57 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..f094063 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node20/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..5c45e1d --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,16 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + } +})