From bdbda6456c421e6ff5e69fd7d49d41fbe42c2132 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Tue, 28 Jan 2025 16:32:16 +0100 Subject: [PATCH 01/35] CharHair work --- src/components/game/character/Character.vue | 61 +++++++++++-------- .../game/character/partials/CharacterHair.vue | 33 ++++++---- src/storage/storages.ts | 5 ++ 3 files changed, 61 insertions(+), 38 deletions(-) diff --git a/src/components/game/character/Character.vue b/src/components/game/character/Character.vue index 2c0807f..a1ecb00 100644 --- a/src/components/game/character/Character.vue +++ b/src/components/game/character/Character.vue @@ -1,12 +1,14 @@ diff --git a/src/storage/storages.ts b/src/storage/storages.ts index 96bf41b..396f6ac 100644 --- a/src/storage/storages.ts +++ b/src/storage/storages.ts @@ -40,4 +40,9 @@ export class CharacterHairStorage extends BaseStorage { constructor() { super('characterHairs', 'id, name, createdAt, updatedAt') } + + async getSpriteId(characterTypeId: string) { + const characterType = await this.get(characterTypeId) + return characterType?.sprite + } } From 014c08b17a38dda9f53afe0ba72102fdecf23958 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Tue, 28 Jan 2025 17:54:12 +0100 Subject: [PATCH 02/35] Set depth to 9999 to always show above character sprite --- src/components/game/character/partials/CharacterHair.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/game/character/partials/CharacterHair.vue b/src/components/game/character/partials/CharacterHair.vue index 8e563fb..e99fcb4 100644 --- a/src/components/game/character/partials/CharacterHair.vue +++ b/src/components/game/character/partials/CharacterHair.vue @@ -35,7 +35,7 @@ const imageProps = computed(() => { const spriteAction = sprite.value?.spriteActions?.find((spriteAction) => spriteAction.action === direction) return { - depth: 1, + depth: 9999, originX: Number(spriteAction?.originX) ?? 0, originY: Number(spriteAction?.originY) ?? 0, flipX: isFlippedX.value, From 8befce7ffb28dc55a9d4d4be68eaf4fa01454c3d Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Wed, 29 Jan 2025 23:28:04 +0100 Subject: [PATCH 03/35] Update packages --- package-lock.json | 182 +++++++++++++++++++++++----------------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/package-lock.json b/package-lock.json index d14625d..44af693 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1161,9 +1161,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.0.tgz", - "integrity": "sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz", + "integrity": "sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==", "cpu": [ "arm" ], @@ -1175,9 +1175,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.0.tgz", - "integrity": "sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz", + "integrity": "sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==", "cpu": [ "arm64" ], @@ -1189,9 +1189,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.0.tgz", - "integrity": "sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz", + "integrity": "sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==", "cpu": [ "arm64" ], @@ -1203,9 +1203,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.0.tgz", - "integrity": "sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz", + "integrity": "sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==", "cpu": [ "x64" ], @@ -1217,9 +1217,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.0.tgz", - "integrity": "sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz", + "integrity": "sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==", "cpu": [ "arm64" ], @@ -1231,9 +1231,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.0.tgz", - "integrity": "sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz", + "integrity": "sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==", "cpu": [ "x64" ], @@ -1245,9 +1245,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.0.tgz", - "integrity": "sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz", + "integrity": "sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==", "cpu": [ "arm" ], @@ -1259,9 +1259,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.0.tgz", - "integrity": "sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz", + "integrity": "sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==", "cpu": [ "arm" ], @@ -1273,9 +1273,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.0.tgz", - "integrity": "sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz", + "integrity": "sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==", "cpu": [ "arm64" ], @@ -1287,9 +1287,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.0.tgz", - "integrity": "sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz", + "integrity": "sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==", "cpu": [ "arm64" ], @@ -1301,9 +1301,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.0.tgz", - "integrity": "sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz", + "integrity": "sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==", "cpu": [ "loong64" ], @@ -1315,9 +1315,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.0.tgz", - "integrity": "sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz", + "integrity": "sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==", "cpu": [ "ppc64" ], @@ -1329,9 +1329,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.0.tgz", - "integrity": "sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz", + "integrity": "sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==", "cpu": [ "riscv64" ], @@ -1343,9 +1343,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.0.tgz", - "integrity": "sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz", + "integrity": "sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==", "cpu": [ "s390x" ], @@ -1357,9 +1357,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.0.tgz", - "integrity": "sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz", + "integrity": "sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==", "cpu": [ "x64" ], @@ -1371,9 +1371,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.0.tgz", - "integrity": "sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz", + "integrity": "sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==", "cpu": [ "x64" ], @@ -1385,9 +1385,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.0.tgz", - "integrity": "sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz", + "integrity": "sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==", "cpu": [ "arm64" ], @@ -1399,9 +1399,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.0.tgz", - "integrity": "sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz", + "integrity": "sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==", "cpu": [ "ia32" ], @@ -1413,9 +1413,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.0.tgz", - "integrity": "sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz", + "integrity": "sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==", "cpu": [ "x64" ], @@ -2168,9 +2168,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001695", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", - "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "version": "1.0.30001696", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", + "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", "dev": true, "funding": [ { @@ -3393,9 +3393,9 @@ "license": "MIT" }, "node_modules/loupe": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", - "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", "dev": true, "license": "MIT" }, @@ -3740,9 +3740,9 @@ "license": "BlueOak-1.0.0" }, "node_modules/papaparse": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.1.tgz", - "integrity": "sha512-EuEKUhyxrHVozD7g3/ztsJn6qaKse8RPfR6buNB2dMJvdtXNhcw8jccVi/LxNEY3HVrV6GO6Z4OoeCG9Iy9wpA==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.2.tgz", + "integrity": "sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA==", "dev": true, "license": "MIT" }, @@ -4250,9 +4250,9 @@ } }, "node_modules/rollup": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.0.tgz", - "integrity": "sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.1.tgz", + "integrity": "sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==", "dev": true, "license": "MIT", "dependencies": { @@ -4266,25 +4266,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.32.0", - "@rollup/rollup-android-arm64": "4.32.0", - "@rollup/rollup-darwin-arm64": "4.32.0", - "@rollup/rollup-darwin-x64": "4.32.0", - "@rollup/rollup-freebsd-arm64": "4.32.0", - "@rollup/rollup-freebsd-x64": "4.32.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.32.0", - "@rollup/rollup-linux-arm-musleabihf": "4.32.0", - "@rollup/rollup-linux-arm64-gnu": "4.32.0", - "@rollup/rollup-linux-arm64-musl": "4.32.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.32.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.32.0", - "@rollup/rollup-linux-riscv64-gnu": "4.32.0", - "@rollup/rollup-linux-s390x-gnu": "4.32.0", - "@rollup/rollup-linux-x64-gnu": "4.32.0", - "@rollup/rollup-linux-x64-musl": "4.32.0", - "@rollup/rollup-win32-arm64-msvc": "4.32.0", - "@rollup/rollup-win32-ia32-msvc": "4.32.0", - "@rollup/rollup-win32-x64-msvc": "4.32.0", + "@rollup/rollup-android-arm-eabi": "4.32.1", + "@rollup/rollup-android-arm64": "4.32.1", + "@rollup/rollup-darwin-arm64": "4.32.1", + "@rollup/rollup-darwin-x64": "4.32.1", + "@rollup/rollup-freebsd-arm64": "4.32.1", + "@rollup/rollup-freebsd-x64": "4.32.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.32.1", + "@rollup/rollup-linux-arm-musleabihf": "4.32.1", + "@rollup/rollup-linux-arm64-gnu": "4.32.1", + "@rollup/rollup-linux-arm64-musl": "4.32.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.32.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.32.1", + "@rollup/rollup-linux-riscv64-gnu": "4.32.1", + "@rollup/rollup-linux-s390x-gnu": "4.32.1", + "@rollup/rollup-linux-x64-gnu": "4.32.1", + "@rollup/rollup-linux-x64-musl": "4.32.1", + "@rollup/rollup-win32-arm64-msvc": "4.32.1", + "@rollup/rollup-win32-ia32-msvc": "4.32.1", + "@rollup/rollup-win32-x64-msvc": "4.32.1", "fsevents": "~2.3.2" } }, @@ -4361,9 +4361,9 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", "dev": true, "license": "ISC", "bin": { From f268ac9e5b803705a320b2d510891bf28a49a348 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Thu, 30 Jan 2025 18:29:55 +0100 Subject: [PATCH 04/35] Removed comment, updated types for sprite actions, minor modal component improvement, added components for better sprite management --- src/application/types.ts | 10 +- .../partials/sprite/SpriteDetails.vue | 49 +++++++++- .../sprite/partials/SpriteImagesInput.vue | 91 ++++++++++++++++--- .../sprite/partials/SpritePreview.vue | 85 +++++++++++++++++ .../mapEditor/partials/CreateMap.vue | 4 +- src/components/utilities/Modal.vue | 8 +- src/composables/gameComposable.ts | 1 - 7 files changed, 225 insertions(+), 23 deletions(-) create mode 100644 src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue diff --git a/src/application/types.ts b/src/application/types.ts index efd7c26..218ee95 100644 --- a/src/application/types.ts +++ b/src/application/types.ts @@ -216,11 +216,19 @@ export type Sprite = { characterTypes: CharacterType[] } +export interface SpriteImage { + url: string + offset: { + x: number + y: number + } +} + export type SpriteAction = { id: UUID sprite: Sprite action: string - sprites: string[] + sprites: SpriteImage[] originX: number originY: number frameWidth: number diff --git a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue index 9d76450..c4c6c3f 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue @@ -21,9 +21,12 @@ + + + + @@ -58,7 +77,9 @@ import type { Sprite, SpriteAction } from '@/application/types' import { uuidv4 } from '@/application/utilities' import SpriteActionsInput from '@/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue' +import SpritePreview from '@/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue' import Accordion from '@/components/utilities/Accordion.vue' +import Modal from '@/components/utilities/Modal.vue' import { useAssetManagerStore } from '@/stores/assetManagerStore' import { useGameStore } from '@/stores/gameStore' import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue' @@ -176,6 +197,30 @@ watch(selectedSprite, (sprite: Sprite | null) => { spriteActions.value = sortSpriteActions(sprite.spriteActions) }) +// View sprite modal logic +const isModalOpen = ref(false) +const selectedAction = ref(null) +const previewFps = ref(0) + +function openPreviewModal(action: SpriteAction) { + selectedAction.value = action + previewFps.value = action.frameRate || 0 + isModalOpen.value = true +} + +watch(isModalOpen, (newValue) => { + if (!newValue) { + selectedAction.value = null + previewFps.value = 0 + } +}) + +function updatePreviewFps() { + if (selectedAction.value) { + selectedAction.value.frameRate = previewFps.value + } +} + onMounted(() => { if (!selectedSprite.value) return }) diff --git a/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue b/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue index 000ed1c..3d06e75 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue @@ -1,19 +1,43 @@ diff --git a/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue b/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue new file mode 100644 index 0000000..a4c1731 --- /dev/null +++ b/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/components/gameMaster/mapEditor/partials/CreateMap.vue b/src/components/gameMaster/mapEditor/partials/CreateMap.vue index 50926e4..8314248 100644 --- a/src/components/gameMaster/mapEditor/partials/CreateMap.vue +++ b/src/components/gameMaster/mapEditor/partials/CreateMap.vue @@ -13,11 +13,11 @@
- +
- +
diff --git a/src/components/utilities/Modal.vue b/src/components/utilities/Modal.vue index fc9bc7e..ec4ff29 100644 --- a/src/components/utilities/Modal.vue +++ b/src/components/utilities/Modal.vue @@ -17,7 +17,7 @@ -
@@ -81,7 +81,6 @@ const props = withDefaults(defineProps(), { const emit = defineEmits<{ 'modal:open': [] 'modal:close': [] - 'character:create': [] }>() defineExpose({ @@ -157,6 +156,11 @@ function drag(event: MouseEvent) { y.value = dragState.initialY + (event.clientY - dragState.startY) } +function closeModal() { + isModalOpenRef.value = false + emit('modal:close') +} + function toggleFullScreen() { if (isFullScreen.value) { Object.assign({ x, y, width, height }, preFullScreenState) diff --git a/src/composables/gameComposable.ts b/src/composables/gameComposable.ts index 9a18791..4ab7d16 100644 --- a/src/composables/gameComposable.ts +++ b/src/composables/gameComposable.ts @@ -59,7 +59,6 @@ export async function loadTexture(scene: Phaser.Scene, textureData: TextureData) export async function loadSpriteTextures(scene: Phaser.Scene, sprite_id: string) { if (!sprite_id) return false - // @TODO: Fix this const spriteStorage = new SpriteStorage() const sprite = await spriteStorage.get(sprite_id) From 57ad9d48899dffed615a827b48eacd2a2d4e75b2 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Thu, 30 Jan 2025 18:32:33 +0100 Subject: [PATCH 05/35] Don't update after closing sprite action img offset modal --- .../assetManager/partials/sprite/partials/SpriteImagesInput.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue b/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue index 3d06e75..14348ca 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue @@ -159,7 +159,6 @@ const saveOffset = (index: number) => { ...newImages[index], offset: { ...tempOffset.value } } - updateImages(newImages) closeOffsetModal() } From c010373e5bd1ee7f124bfe9190c66cc3ed047a42 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Thu, 30 Jan 2025 18:35:51 +0100 Subject: [PATCH 06/35] Updated loading indicator to match the other one we have --- src/components/screens/Characters.vue | 2 +- src/components/screens/Loading.vue | 12 +----------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/components/screens/Characters.vue b/src/components/screens/Characters.vue index f82ba79..67d0e7a 100644 --- a/src/components/screens/Characters.vue +++ b/src/components/screens/Characters.vue @@ -87,7 +87,7 @@
- + Loading
diff --git a/src/components/screens/Loading.vue b/src/components/screens/Loading.vue index 08e1b93..4a14ca0 100644 --- a/src/components/screens/Loading.vue +++ b/src/components/screens/Loading.vue @@ -1,16 +1,6 @@ From 574716682298abd0e435d4b4e87277b036dd3f8c Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 31 Jan 2025 01:17:44 +0100 Subject: [PATCH 07/35] Don't toggle accordion on button press --- .../gameMaster/assetManager/partials/sprite/SpriteDetails.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue index c4c6c3f..6b6aece 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue @@ -24,8 +24,8 @@
{{ action.action }}
- - + +
From c7d4b5f2c3796c2f5b76708395eda86ddf938dd2 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 31 Jan 2025 01:18:49 +0100 Subject: [PATCH 08/35] Updates TS hints --- src/components/screens/Characters.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/screens/Characters.vue b/src/components/screens/Characters.vue index 67d0e7a..e817760 100644 --- a/src/components/screens/Characters.vue +++ b/src/components/screens/Characters.vue @@ -131,11 +131,11 @@ import { onBeforeUnmount, onMounted, ref, watch } from 'vue' const gameStore = useGameStore() const isLoading = ref(true) const characters = ref([]) -const selectedCharacterId = ref(null) +const selectedCharacterId = ref(null) const isCreateNewCharacterModalOpen = ref(false) const newCharacterName = ref('') const characterHairs = ref([]) -const selectedHairId = ref(null) +const selectedHairId = ref(null) // Fetch characters setTimeout(() => { From 7fd334d414760563c9a1890928915106bebbf1b8 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 31 Jan 2025 01:19:49 +0100 Subject: [PATCH 09/35] Applied styling fix --- src/components/screens/Characters.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/screens/Characters.vue b/src/components/screens/Characters.vue index e817760..8f921da 100644 --- a/src/components/screens/Characters.vue +++ b/src/components/screens/Characters.vue @@ -34,7 +34,7 @@ - Player avatar + Player avatar From 15f9e9861e8a53cf81d03a62253a666ca1e83a00 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 31 Jan 2025 01:55:52 +0100 Subject: [PATCH 10/35] Zoom --- src/application/types.ts | 6 +- .../partials/sprite/SpriteDetails.vue | 54 +++------ .../sprite/partials/SpriteImagesInput.vue | 3 +- .../sprite/partials/SpritePreview.vue | 110 +++++++++++++----- 4 files changed, 105 insertions(+), 68 deletions(-) diff --git a/src/application/types.ts b/src/application/types.ts index 218ee95..d61527a 100644 --- a/src/application/types.ts +++ b/src/application/types.ts @@ -225,8 +225,8 @@ export interface SpriteImage { } export type SpriteAction = { - id: UUID - sprite: Sprite + id: string + sprite: string action: string sprites: SpriteImage[] originX: number @@ -237,7 +237,7 @@ export type SpriteAction = { } export type Chat = { - id: UUID + id: string character: Character map: Map message: string diff --git a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue index 6b6aece..1b25bf4 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue @@ -53,33 +53,17 @@ - - - - +
diff --git a/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue b/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue index a4c1731..caac77c 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue @@ -1,43 +1,85 @@ diff --git a/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue b/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue index caac77c..c44e6ea 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/partials/SpritePreview.vue @@ -16,7 +16,7 @@ }" > Sprite import type { SpriteImage } from '@/application/types' import Modal from '@/components/utilities/Modal.vue' -import { onMounted, onUnmounted, ref, watch } from 'vue' +import { computed, onMounted, onUnmounted, ref, watch } from 'vue' const props = defineProps<{ sprites: SpriteImage[] frameRate: number isModalOpen?: boolean + tempOffsetIndex?: number + tempOffset?: { x: number, y: number } }>() const emit = defineEmits<{ @@ -82,6 +84,15 @@ const localFrameRate = ref(props.frameRate) const zoomLevel = ref(100) let animationInterval: number | null = null +const spritesWithTempOffset = computed(() => { + return props.sprites.map((sprite, index) => { + if (index === props.tempOffsetIndex && props.tempOffset) { + return { ...sprite, offset: props.tempOffset } + } + return sprite + }) +}) + function updateContainerSize(event: Event) { const img = event.target as HTMLImageElement maxWidth.value = Math.max(maxWidth.value, img.naturalWidth) From 507d4226ac1d7e8d85227d168fbfb94c0218b89c Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 31 Jan 2025 03:23:23 +0100 Subject: [PATCH 12/35] Bug fix for character profile, greatly improved javascript --- src/components/game/gui/CharacterProfile.vue | 118 ++++--------------- 1 file changed, 23 insertions(+), 95 deletions(-) diff --git a/src/components/game/gui/CharacterProfile.vue b/src/components/game/gui/CharacterProfile.vue index f41f746..cec5760 100644 --- a/src/components/game/gui/CharacterProfile.vue +++ b/src/components/game/gui/CharacterProfile.vue @@ -119,111 +119,44 @@ From a181fc7fe3bab4de048d5fac921400cad0b9d57c Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 31 Jan 2025 17:06:16 +0100 Subject: [PATCH 13/35] npm update --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 44af693..dc5f59f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2535,9 +2535,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.88", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.88.tgz", - "integrity": "sha512-K3C2qf1o+bGzbilTDCTBhTQcMS9KW60yTAaTeeXsfvQuTDDwlokLam/AdqlqcSy9u4UainDgsHV23ksXAOgamw==", + "version": "1.5.90", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz", + "integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==", "dev": true, "license": "ISC" }, @@ -2743,9 +2743,9 @@ } }, "node_modules/fastq": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", - "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", "dev": true, "license": "ISC", "dependencies": { From eb61f455358bab0de025d1cef139f5d90e53c679 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 31 Jan 2025 18:49:03 +0100 Subject: [PATCH 14/35] npm update --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index dc5f59f..fbbf708 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3827,9 +3827,9 @@ } }, "node_modules/phaser3-rex-plugins": { - "version": "1.80.12", - "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.80.12.tgz", - "integrity": "sha512-6vzYVhiSeiQSBBDXl2xQyF1omVhElF9yQTW7DKl0JHXchQ0bmvj4B+YVT5EFcle7y+3reedwOUDlchLvoccxsQ==", + "version": "1.80.13", + "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.80.13.tgz", + "integrity": "sha512-d2P3c+0r7h/GXtOZIjB6DLjBQ2rSEeZ+AOG1D6jgGGn/Txb+PiDmFMhBF3qJ6YoPlVarSE8lw6V8Jy7K7xPnLg==", "dev": true, "license": "MIT", "dependencies": { From 6ca82733eb2a06d8d058347a259d9a2c61b2538b Mon Sep 17 00:00:00 2001 From: Colin Kallemein Date: Fri, 31 Jan 2025 19:04:42 +0100 Subject: [PATCH 15/35] #324 - Fix Character profile image --- .../ui-elements/profile-ui-box-outer.svg | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/public/assets/ui-elements/profile-ui-box-outer.svg b/public/assets/ui-elements/profile-ui-box-outer.svg index c5ea8f6..a66f4d5 100644 --- a/public/assets/ui-elements/profile-ui-box-outer.svg +++ b/public/assets/ui-elements/profile-ui-box-outer.svg @@ -1,23 +1,23 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + From 0f46e3b6d249986f807a15b7d0514a69cb51d34a Mon Sep 17 00:00:00 2001 From: Colin Kallemein Date: Fri, 31 Jan 2025 19:35:29 +0100 Subject: [PATCH 16/35] #323 - Added alt to all images, also removed unused templates Templates for old user panel hadnt been removed yet --- src/components/game/gui/CharacterProfile.vue | 18 ++-- src/components/game/gui/Chat.vue | 2 +- src/components/game/gui/Menu.vue | 10 +-- src/components/game/gui/Minimap.vue | 8 +- src/components/game/gui/UserPanel.vue | 42 --------- .../game/gui/partials/CharacterScreen.vue | 68 -------------- .../game/gui/partials/Equipment.vue | 89 ------------------- .../game/gui/partials/Inventory.vue | 17 ---- src/components/game/gui/partials/Settings.vue | 40 --------- .../partials/settings/CharacterSettings.vue | 34 ------- .../gameMaster/mapEditor/partials/Toolbar.vue | 2 +- src/components/screens/Login.vue | 4 +- 12 files changed, 22 insertions(+), 312 deletions(-) delete mode 100644 src/components/game/gui/UserPanel.vue delete mode 100644 src/components/game/gui/partials/CharacterScreen.vue delete mode 100644 src/components/game/gui/partials/Equipment.vue delete mode 100644 src/components/game/gui/partials/Inventory.vue delete mode 100644 src/components/game/gui/partials/Settings.vue delete mode 100644 src/components/game/gui/partials/settings/CharacterSettings.vue diff --git a/src/components/game/gui/CharacterProfile.vue b/src/components/game/gui/CharacterProfile.vue index cec5760..118082a 100644 --- a/src/components/game/gui/CharacterProfile.vue +++ b/src/components/game/gui/CharacterProfile.vue @@ -1,12 +1,12 @@ diff --git a/src/composables/controls/useBaseControlsComposable.ts b/src/composables/controls/useBaseControlsComposable.ts new file mode 100644 index 0000000..5651152 --- /dev/null +++ b/src/composables/controls/useBaseControlsComposable.ts @@ -0,0 +1,69 @@ +import config from '@/application/config' +import { getTile, tileToWorldXY } from '@/composables/mapComposable' +import { useGameStore } from '@/stores/gameStore' +import { ref, type Ref } from 'vue' + +export function useBaseControlsComposable(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Phaser.Cameras.Scene2D.Camera) { + const gameStore = useGameStore() + const pointerStartPosition = ref({ x: 0, y: 0 }) + const dragThreshold = 5 // pixels + + function updateWaypoint(worldX: number, worldY: number) { + const pointerTile = getTile(layer, worldX, worldY) + if (!pointerTile) { + waypoint.value.visible = false + return + } + const worldPoint = tileToWorldXY(layer, pointerTile.x, pointerTile.y) + if (!worldPoint.worldPositionX || !worldPoint.worldPositionX) return + + waypoint.value = { + visible: true, + x: worldPoint.worldPositionX, + y: worldPoint.worldPositionY + config.tile_size.height + 15 + } + } + + function handleDragMap(pointer: Phaser.Input.Pointer) { + if (!gameStore.game.isPlayerDraggingCamera) return + + const deltaX = pointer.x - pointerStartPosition.value.x + const deltaY = pointer.y - pointerStartPosition.value.y + + if (Math.abs(deltaX) <= dragThreshold && Math.abs(deltaY) <= dragThreshold) return + + const scrollX = camera.scrollX - (deltaX / camera.zoom) + const scrollY = camera.scrollY - (deltaY / camera.zoom) + + camera.setScroll(scrollX, scrollY) + pointerStartPosition.value = { x: pointer.x, y: pointer.y } + } + + function startDragging(pointer: Phaser.Input.Pointer) { + pointerStartPosition.value = { x: pointer.x, y: pointer.y } + gameStore.setPlayerDraggingCamera(true) + } + + function stopDragging() { + gameStore.setPlayerDraggingCamera(false) + } + + function handleZoom(pointer: Phaser.Input.Pointer) { + if (pointer.event instanceof WheelEvent && pointer.event.shiftKey) { + const deltaY = pointer.event.deltaY + const zoomLevel = camera.zoom - deltaY * 0.005 + if (zoomLevel > 0 && zoomLevel < 3) { + camera.setZoom(zoomLevel) + } + } + } + + return { + updateWaypoint, + handleDragMap, + startDragging, + stopDragging, + handleZoom, + pointerStartPosition + } +} \ No newline at end of file diff --git a/src/composables/controls/useGameControlsComposable.ts b/src/composables/controls/useGameControlsComposable.ts new file mode 100644 index 0000000..79e26d3 --- /dev/null +++ b/src/composables/controls/useGameControlsComposable.ts @@ -0,0 +1,46 @@ +import { getTile } from '@/composables/mapComposable' +import { useGameStore } from '@/stores/gameStore' +import { useBaseControlsComposable } from './useBaseControlsComposable' +import type { Ref } from 'vue' + +export function useGameControlsComposable(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Phaser.Cameras.Scene2D.Camera) { + const gameStore = useGameStore() + const baseHandlers = useBaseControlsComposable(scene, layer, waypoint, camera) + + function handlePointerDown(pointer: Phaser.Input.Pointer) { + baseHandlers.startDragging(pointer) + } + + function handlePointerMove(pointer: Phaser.Input.Pointer) { + baseHandlers.updateWaypoint(pointer.worldX, pointer.worldY) + baseHandlers.handleDragMap(pointer) + } + + function handlePointerUp(pointer: Phaser.Input.Pointer) { + baseHandlers.stopDragging() + + const pointerTile = getTile(layer, pointer.worldX, pointer.worldY) + if (!pointerTile) return + + gameStore.connection?.emit('map:character:move', { + positionX: pointerTile.x, + positionY: pointerTile.y + }) + } + + const setupControls = () => { + scene.input.on(Phaser.Input.Events.POINTER_DOWN, handlePointerDown) + scene.input.on(Phaser.Input.Events.POINTER_MOVE, handlePointerMove) + scene.input.on(Phaser.Input.Events.POINTER_UP, handlePointerUp) + scene.input.on(Phaser.Input.Events.POINTER_WHEEL, baseHandlers.handleZoom) + } + + const cleanupControls = () => { + scene.input.off(Phaser.Input.Events.POINTER_DOWN, handlePointerDown) + scene.input.off(Phaser.Input.Events.POINTER_MOVE, handlePointerMove) + scene.input.off(Phaser.Input.Events.POINTER_UP, handlePointerUp) + scene.input.off(Phaser.Input.Events.POINTER_WHEEL, baseHandlers.handleZoom) + } + + return { setupControls, cleanupControls } +} diff --git a/src/composables/controls/useMapEditorControlsComposable.ts b/src/composables/controls/useMapEditorControlsComposable.ts new file mode 100644 index 0000000..8c3afa4 --- /dev/null +++ b/src/composables/controls/useMapEditorControlsComposable.ts @@ -0,0 +1,42 @@ +import { useMapEditorComposable } from '@/composables/useMapEditorComposable' +import { useBaseControlsComposable } from './useBaseControlsComposable' +import { computed, type Ref } from 'vue' + +export function useMapEditorControlsComposable(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Phaser.Cameras.Scene2D.Camera) { + const mapEditor = useMapEditorComposable() + const baseHandlers = useBaseControlsComposable(scene, layer, waypoint, camera) + const isMoveTool = computed(() => mapEditor.tool.value === 'move') + + function handlePointerDown(pointer: Phaser.Input.Pointer) { + if (isMoveTool.value || pointer.event.shiftKey) { + baseHandlers.startDragging(pointer) + } + } + + function handlePointerMove(pointer: Phaser.Input.Pointer) { + if (isMoveTool.value || pointer.event.shiftKey) { + baseHandlers.handleDragMap(pointer) + } + baseHandlers.updateWaypoint(pointer.worldX, pointer.worldY) + } + + function handlePointerUp(pointer: Phaser.Input.Pointer) { + baseHandlers.stopDragging() + } + + const setupControls = () => { + scene.input.on(Phaser.Input.Events.POINTER_DOWN, handlePointerDown) + scene.input.on(Phaser.Input.Events.POINTER_MOVE, handlePointerMove) + scene.input.on(Phaser.Input.Events.POINTER_UP, handlePointerUp) + scene.input.on(Phaser.Input.Events.POINTER_WHEEL, baseHandlers.handleZoom) + } + + const cleanupControls = () => { + scene.input.off(Phaser.Input.Events.POINTER_DOWN, handlePointerDown) + scene.input.off(Phaser.Input.Events.POINTER_MOVE, handlePointerMove) + scene.input.off(Phaser.Input.Events.POINTER_UP, handlePointerUp) + scene.input.off(Phaser.Input.Events.POINTER_WHEEL, baseHandlers.handleZoom) + } + + return { setupControls, cleanupControls } +} diff --git a/src/composables/pointerHandlers/useGamePointerHandlers.ts b/src/composables/pointerHandlers/useGamePointerHandlers.ts deleted file mode 100644 index 117e4d6..0000000 --- a/src/composables/pointerHandlers/useGamePointerHandlers.ts +++ /dev/null @@ -1,70 +0,0 @@ -import config from '@/application/config' -import { getTile, tileToWorldXY } from '@/composables/mapComposable' -import { useGameStore } from '@/stores/gameStore' -import { ref, type Ref } from 'vue' - -export function useGamePointerHandlers(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Phaser.Cameras.Scene2D.Camera) { - const gameStore = useGameStore() - const pointerStartPosition = ref({ x: 0, y: 0 }) - const dragThreshold = 5 // pixels - - function updateWaypoint(worldX: number, worldY: number) { - const pointerTile = getTile(layer, worldX, worldY) - if (!pointerTile) { - waypoint.value.visible = false - return - } - const worldPoint = tileToWorldXY(layer, pointerTile.x, pointerTile.y) - if (!worldPoint.worldPositionX || !worldPoint.worldPositionX) return - - waypoint.value = { - visible: true, - x: worldPoint.worldPositionX, - y: worldPoint.worldPositionY + config.tile_size.height + 15 - } - } - - function handlePointerDown(pointer: Phaser.Input.Pointer) { - pointerStartPosition.value = pointer.position - gameStore.setPlayerDraggingCamera(true) - } - - function handlePointerMove(pointer: Phaser.Input.Pointer) { - updateWaypoint(pointer.worldX, pointer.worldY) - - if (!gameStore.game.isPlayerDraggingCamera) return - - // If the distance is less than the drag threshold, return - // We do this to prevent the camera from scrolling too quickly - const distance = Phaser.Math.Distance.Between(pointerStartPosition.value.x, pointerStartPosition.value.y, pointer.x, pointer.y) - if (distance <= dragThreshold) return - - camera.setScroll(camera.scrollX - (pointer.x - pointer.prevPosition.x) / camera.zoom, camera.scrollY - (pointer.y - pointer.prevPosition.y) / camera.zoom) - } - - function handlePointerUp(pointer: Phaser.Input.Pointer) { - gameStore.setPlayerDraggingCamera(false) - - const pointerTile = getTile(layer, pointer.worldX, pointer.worldY) - if (!pointerTile) return - - gameStore.connection?.emit('map:character:move', { - positionX: pointerTile.x, - positionY: pointerTile.y - }) - } - - const setupPointerHandlers = () => { - scene.input.on(Phaser.Input.Events.POINTER_DOWN, handlePointerDown) - scene.input.on(Phaser.Input.Events.POINTER_MOVE, handlePointerMove) - scene.input.on(Phaser.Input.Events.POINTER_UP, handlePointerUp) - } - - const cleanupPointerHandlers = () => { - scene.input.off(Phaser.Input.Events.POINTER_DOWN, handlePointerDown) - scene.input.off(Phaser.Input.Events.POINTER_MOVE, handlePointerMove) - scene.input.off(Phaser.Input.Events.POINTER_UP, handlePointerUp) - } - - return { setupPointerHandlers, cleanupPointerHandlers } -} diff --git a/src/composables/pointerHandlers/useMapEditorPointerHandlers.ts b/src/composables/pointerHandlers/useMapEditorPointerHandlers.ts deleted file mode 100644 index e2f3a02..0000000 --- a/src/composables/pointerHandlers/useMapEditorPointerHandlers.ts +++ /dev/null @@ -1,86 +0,0 @@ -import config from '@/application/config' -import { getTile, tileToWorldXY } from '@/composables/mapComposable' -import { useMapEditorComposable } from '@/composables/useMapEditorComposable' -import { useGameStore } from '@/stores/gameStore' -import { computed, ref, type Ref } from 'vue' - -export function useMapEditorPointerHandlers(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Phaser.Cameras.Scene2D.Camera) { - const gameStore = useGameStore() - const mapEditor = useMapEditorComposable() - const isMoveTool = computed(() => mapEditor.tool.value === 'move') - const pointerStartPosition = ref({ x: 0, y: 0 }) - const dragThreshold = 5 // pixels - - function updateWaypoint(worldX: number, worldY: number) { - const pointerTile = getTile(layer, worldX, worldY) - if (!pointerTile) { - waypoint.value.visible = false - return - } - const worldPoint = tileToWorldXY(layer, pointerTile.x, pointerTile.y) - if (!worldPoint.worldPositionX || !worldPoint.worldPositionX) return - - waypoint.value = { - visible: true, - x: worldPoint.worldPositionX, - y: worldPoint.worldPositionY + config.tile_size.height + 15 - } - } - - function handlePointerDown(pointer: Phaser.Input.Pointer) { - pointerStartPosition.value = { x: pointer.x, y: pointer.y } - if (isMoveTool.value || pointer.event.shiftKey) { - gameStore.setPlayerDraggingCamera(true) - } - } - - function dragMap(pointer: Phaser.Input.Pointer) { - if (!gameStore.game.isPlayerDraggingCamera) return - - const distance = Phaser.Math.Distance.Between(pointerStartPosition.value.x, pointerStartPosition.value.y, pointer.x, pointer.y) - - // If the distance is less than the drag threshold, return - // We do this to prevent the camera from scrolling too quickly - - if (distance <= dragThreshold) return - - camera.setScroll(camera.scrollX - (pointer.x - pointer.prevPosition.x) / camera.zoom, camera.scrollY - (pointer.y - pointer.prevPosition.y) / camera.zoom) - } - - function handlePointerMove(pointer: Phaser.Input.Pointer) { - if (isMoveTool.value || pointer.event.shiftKey) { - dragMap(pointer) - } - updateWaypoint(pointer.worldX, pointer.worldY) - } - - function handlePointerUp(pointer: Phaser.Input.Pointer) { - gameStore.setPlayerDraggingCamera(false) - } - - function handleZoom(pointer: Phaser.Input.Pointer) { - if (pointer.event instanceof WheelEvent && pointer.event.shiftKey) { - const deltaY = pointer.event.deltaY - const zoomLevel = camera.zoom - deltaY * 0.005 - if (zoomLevel > 0 && zoomLevel < 3) { - camera.setZoom(zoomLevel) - } - } - } - - const setupPointerHandlers = () => { - scene.input.on(Phaser.Input.Events.POINTER_DOWN, handlePointerDown) - scene.input.on(Phaser.Input.Events.POINTER_MOVE, handlePointerMove) - scene.input.on(Phaser.Input.Events.POINTER_UP, handlePointerUp) - scene.input.on(Phaser.Input.Events.POINTER_WHEEL, handleZoom) - } - - const cleanupPointerHandlers = () => { - scene.input.off(Phaser.Input.Events.POINTER_DOWN, handlePointerDown) - scene.input.off(Phaser.Input.Events.POINTER_MOVE, handlePointerMove) - scene.input.off(Phaser.Input.Events.POINTER_UP, handlePointerUp) - scene.input.off(Phaser.Input.Events.POINTER_WHEEL, handleZoom) - } - - return { setupPointerHandlers, cleanupPointerHandlers } -} diff --git a/src/composables/useCameraControls.ts b/src/composables/useCameraControls.ts deleted file mode 100644 index a85bd78..0000000 --- a/src/composables/useCameraControls.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { useGameStore } from '@/stores/gameStore' -import { useMapStore } from '@/stores/mapStore' - -export function useCameraControls(scene: Phaser.Scene) { - const gameStore = useGameStore() - const camera = scene.cameras.main - - const onPointerDown = () => gameStore.setPlayerDraggingCamera(true) - const onPointerUp = () => gameStore.setPlayerDraggingCamera(false) - - scene.input.on(Phaser.Input.Events.POINTER_DOWN, onPointerDown) - scene.input.on(Phaser.Input.Events.POINTER_UP, onPointerUp) - - return { camera } -} diff --git a/src/composables/useControlsComposable.ts b/src/composables/useControlsComposable.ts new file mode 100644 index 0000000..92cab72 --- /dev/null +++ b/src/composables/useControlsComposable.ts @@ -0,0 +1,19 @@ +import { useMapEditorComposable } from '@/composables/useMapEditorComposable' +import { computed, watch, type Ref } from 'vue' +import { useGameControlsComposable } from '@/composables/controls/useGameControlsComposable' +import { useMapEditorControlsComposable } from '@/composables/controls/useMapEditorControlsComposable' +import { useGameStore } from '@/stores/gameStore' + +export function useControlsComposable(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>) { + const camera = scene.cameras.main + const mapEditor = useMapEditorComposable() + const gameHandlers = useGameControlsComposable(scene, layer, waypoint, camera) + const mapEditorHandlers = useMapEditorControlsComposable(scene, layer, waypoint, camera) + + const currentHandlers = computed(() => (mapEditor.active.value ? mapEditorHandlers : gameHandlers)) + + const setupControls = () => currentHandlers.value.setupControls() + const cleanupControls = () => currentHandlers.value.cleanupControls() + + return { setupControls, cleanupControls, camera } +} diff --git a/src/composables/usePointerHandlers.ts b/src/composables/usePointerHandlers.ts deleted file mode 100644 index 09ce8c1..0000000 --- a/src/composables/usePointerHandlers.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { useMapEditorComposable } from '@/composables/useMapEditorComposable' -import { computed, watch, type Ref } from 'vue' -import { useGamePointerHandlers } from './pointerHandlers/useGamePointerHandlers' -import { useMapEditorPointerHandlers } from './pointerHandlers/useMapEditorPointerHandlers' - -export function usePointerHandlers(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Phaser.Cameras.Scene2D.Camera) { - const mapEditor = useMapEditorComposable() - const gameHandlers = useGamePointerHandlers(scene, layer, waypoint, camera) - const mapEditorHandlers = useMapEditorPointerHandlers(scene, layer, waypoint, camera) - - const currentHandlers = computed(() => (mapEditor.active.value ? mapEditorHandlers : gameHandlers)) - - const setupPointerHandlers = () => currentHandlers.value.setupPointerHandlers() - const cleanupPointerHandlers = () => currentHandlers.value.cleanupPointerHandlers() - - watch( - () => mapEditor.active.value, - () => { - cleanupPointerHandlers() - setupPointerHandlers() - } - ) - - return { setupPointerHandlers, cleanupPointerHandlers } -} From e389534e30c923708c28752c3e1b7636a06f8c9f Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 31 Jan 2025 22:33:45 +0100 Subject: [PATCH 18/35] npm run format --- src/components/game/gui/Minimap.vue | 8 ++--- .../partials/sprite/SpriteDetails.vue | 29 +++++++++---------- .../sprite/partials/SpriteImagesInput.vue | 6 ++-- .../sprite/partials/SpritePreview.vue | 12 ++------ .../controls/useBaseControlsComposable.ts | 6 ++-- .../controls/useGameControlsComposable.ts | 2 +- .../useMapEditorControlsComposable.ts | 2 +- src/composables/useControlsComposable.ts | 7 ++--- 8 files changed, 29 insertions(+), 43 deletions(-) diff --git a/src/components/game/gui/Minimap.vue b/src/components/game/gui/Minimap.vue index d3cefb4..35c8ecd 100644 --- a/src/components/game/gui/Minimap.vue +++ b/src/components/game/gui/Minimap.vue @@ -5,12 +5,12 @@
diff --git a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue index 705af93..bffd251 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue @@ -48,23 +48,20 @@
- +
- @@ -199,9 +196,9 @@ function updateFrameRate(value: number) { } } -const tempOffsetData = ref<{ index: number | undefined; offset: { x: number; y: number } | undefined }>({ - index: undefined, - offset: undefined +const tempOffsetData = ref<{ index: number | undefined; offset: { x: number; y: number } | undefined }>({ + index: undefined, + offset: undefined }) function handleTempOffsetChange(action: SpriteAction, index: number, offset: { x: number; y: number }) { diff --git a/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue b/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue index 96b6061..00d047c 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue @@ -2,9 +2,7 @@
Uploaded image -
- {{ image.dimensions.width }}x{{ image.dimensions.height }} -
+
{{ image.dimensions.width }}x{{ image.dimensions.height }}
- +
@@ -69,7 +61,7 @@ const props = defineProps<{ frameRate: number isModalOpen?: boolean tempOffsetIndex?: number - tempOffset?: { x: number, y: number } + tempOffset?: { x: number; y: number } }>() const emit = defineEmits<{ diff --git a/src/composables/controls/useBaseControlsComposable.ts b/src/composables/controls/useBaseControlsComposable.ts index 5651152..dce4312 100644 --- a/src/composables/controls/useBaseControlsComposable.ts +++ b/src/composables/controls/useBaseControlsComposable.ts @@ -32,8 +32,8 @@ export function useBaseControlsComposable(scene: Phaser.Scene, layer: Phaser.Til if (Math.abs(deltaX) <= dragThreshold && Math.abs(deltaY) <= dragThreshold) return - const scrollX = camera.scrollX - (deltaX / camera.zoom) - const scrollY = camera.scrollY - (deltaY / camera.zoom) + const scrollX = camera.scrollX - deltaX / camera.zoom + const scrollY = camera.scrollY - deltaY / camera.zoom camera.setScroll(scrollX, scrollY) pointerStartPosition.value = { x: pointer.x, y: pointer.y } @@ -66,4 +66,4 @@ export function useBaseControlsComposable(scene: Phaser.Scene, layer: Phaser.Til handleZoom, pointerStartPosition } -} \ No newline at end of file +} diff --git a/src/composables/controls/useGameControlsComposable.ts b/src/composables/controls/useGameControlsComposable.ts index 79e26d3..a79297d 100644 --- a/src/composables/controls/useGameControlsComposable.ts +++ b/src/composables/controls/useGameControlsComposable.ts @@ -1,7 +1,7 @@ import { getTile } from '@/composables/mapComposable' import { useGameStore } from '@/stores/gameStore' -import { useBaseControlsComposable } from './useBaseControlsComposable' import type { Ref } from 'vue' +import { useBaseControlsComposable } from './useBaseControlsComposable' export function useGameControlsComposable(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Phaser.Cameras.Scene2D.Camera) { const gameStore = useGameStore() diff --git a/src/composables/controls/useMapEditorControlsComposable.ts b/src/composables/controls/useMapEditorControlsComposable.ts index 8c3afa4..c0db832 100644 --- a/src/composables/controls/useMapEditorControlsComposable.ts +++ b/src/composables/controls/useMapEditorControlsComposable.ts @@ -1,6 +1,6 @@ import { useMapEditorComposable } from '@/composables/useMapEditorComposable' -import { useBaseControlsComposable } from './useBaseControlsComposable' import { computed, type Ref } from 'vue' +import { useBaseControlsComposable } from './useBaseControlsComposable' export function useMapEditorControlsComposable(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Phaser.Cameras.Scene2D.Camera) { const mapEditor = useMapEditorComposable() diff --git a/src/composables/useControlsComposable.ts b/src/composables/useControlsComposable.ts index 92cab72..2ce48fb 100644 --- a/src/composables/useControlsComposable.ts +++ b/src/composables/useControlsComposable.ts @@ -1,15 +1,14 @@ -import { useMapEditorComposable } from '@/composables/useMapEditorComposable' -import { computed, watch, type Ref } from 'vue' import { useGameControlsComposable } from '@/composables/controls/useGameControlsComposable' import { useMapEditorControlsComposable } from '@/composables/controls/useMapEditorControlsComposable' -import { useGameStore } from '@/stores/gameStore' +import { useMapEditorComposable } from '@/composables/useMapEditorComposable' +import { computed, type Ref } from 'vue' export function useControlsComposable(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>) { const camera = scene.cameras.main - const mapEditor = useMapEditorComposable() const gameHandlers = useGameControlsComposable(scene, layer, waypoint, camera) const mapEditorHandlers = useMapEditorControlsComposable(scene, layer, waypoint, camera) + const mapEditor = useMapEditorComposable() const currentHandlers = computed(() => (mapEditor.active.value ? mapEditorHandlers : gameHandlers)) const setupControls = () => currentHandlers.value.setupControls() From d665ac989c719ea6d7494c0d717f872181af2a0d Mon Sep 17 00:00:00 2001 From: Colin Kallemein Date: Fri, 31 Jan 2025 22:35:13 +0100 Subject: [PATCH 19/35] #321 - Made mapObjectList & tileList side panels --- .../mapEditor/partials/MapObjectList.vue | 90 +++++------ .../mapEditor/partials/TileList.vue | 148 +++++++++--------- .../gameMaster/mapEditor/partials/Toolbar.vue | 2 +- src/components/screens/MapEditor.vue | 16 +- 4 files changed, 131 insertions(+), 125 deletions(-) diff --git a/src/components/gameMaster/mapEditor/partials/MapObjectList.vue b/src/components/gameMaster/mapEditor/partials/MapObjectList.vue index d799305..0316709 100644 --- a/src/components/gameMaster/mapEditor/partials/MapObjectList.vue +++ b/src/components/gameMaster/mapEditor/partials/MapObjectList.vue @@ -1,66 +1,69 @@ diff --git a/src/composables/useTileProcessingComposable.ts b/src/composables/useTileProcessingComposable.ts new file mode 100644 index 0000000..d1f9462 --- /dev/null +++ b/src/composables/useTileProcessingComposable.ts @@ -0,0 +1,107 @@ +import { ref } from 'vue' +import config from '@/application/config' +import type { Tile } from '@/application/types' +import type { TileAnalysisResult, TileWorkerMessage } from '@/types/tileTypes' + +// Constants for image processing +const DOWNSCALE_WIDTH = 32 +const DOWNSCALE_HEIGHT = 16 +const COLOR_SIMILARITY_THRESHOLD = 30 +const EDGE_SIMILARITY_THRESHOLD = 20 +const BATCH_SIZE = 4 + +export function useTileProcessingComposable() { + const tileAnalysisCache = ref>(new Map()) + const processingQueue = ref([]) + let isProcessing = false + const worker = new Worker(new URL('@/workers/tileAnalyzerWorker.ts', import.meta.url), { type: 'module' }) + + worker.onmessage = (e: MessageEvent) => { + const { tileId, color, edge, namePrefix } = e.data + tileAnalysisCache.value.set(tileId, { color, edge, namePrefix }) + isProcessing = false + processBatch() + } + + async function processTileAsync(tile: Tile): Promise { + if (tileAnalysisCache.value.has(tile.id)) return + + return new Promise((resolve) => { + const img = new Image() + img.crossOrigin = 'Anonymous' + img.onload = () => { + const canvas = document.createElement('canvas') + const ctx = canvas.getContext('2d') + if (!ctx) { + resolve() + return + } + + canvas.width = DOWNSCALE_WIDTH + canvas.height = DOWNSCALE_HEIGHT + ctx.drawImage(img, 0, 0, DOWNSCALE_WIDTH, DOWNSCALE_HEIGHT) + + const imageData = ctx.getImageData(0, 0, DOWNSCALE_WIDTH, DOWNSCALE_HEIGHT) + const message: TileWorkerMessage = { + imageData, + tileId: tile.id, + tileName: tile.name + } + worker.postMessage(message) + resolve() + } + img.onerror = () => resolve() + img.src = `${config.server_endpoint}/textures/tiles/${tile.id}.png` + }) + } + + function processBatch() { + if (isProcessing || processingQueue.value.length === 0) return + isProcessing = true + + const batch = processingQueue.value.splice(0, BATCH_SIZE) + Promise.all(batch.map(tile => processTileAsync(tile))) + .then(() => { + isProcessing = false + if (processingQueue.value.length > 0) { + setTimeout(processBatch, 0) + } + }) + } + + function processTile(tile: Tile) { + if (!processingQueue.value.includes(tile)) { + processingQueue.value.push(tile) + processBatch() + } + } + + function areTilesRelated(tile1: Tile, tile2: Tile): boolean { + const data1 = tileAnalysisCache.value.get(tile1.id) + const data2 = tileAnalysisCache.value.get(tile2.id) + + if (!data1 || !data2) return false + + const colorDifference = Math.sqrt( + Math.pow(data1.color.r - data2.color.r, 2) + + Math.pow(data1.color.g - data2.color.g, 2) + + Math.pow(data1.color.b - data2.color.b, 2) + ) + + return ( + colorDifference <= COLOR_SIMILARITY_THRESHOLD && + Math.abs(data1.edge - data2.edge) <= EDGE_SIMILARITY_THRESHOLD && + data1.namePrefix === data2.namePrefix + ) + } + + function cleanup() { + worker.terminate() + } + + return { + processTile, + areTilesRelated, + cleanup + } +} \ No newline at end of file diff --git a/src/types/tileTypes.ts b/src/types/tileTypes.ts new file mode 100644 index 0000000..c17a5eb --- /dev/null +++ b/src/types/tileTypes.ts @@ -0,0 +1,20 @@ +export interface TileAnalysisResult { + tileId: string + color: { + r: number + g: number + b: number + } + edge: number + namePrefix: string +} + +export interface TileWorkerMessage { + imageData: ImageData + tileId: string + tileName: string +} + +export interface TileCache { + [key: string]: TileAnalysisResult +} \ No newline at end of file diff --git a/src/workers/tileAnalyzerWorker.ts b/src/workers/tileAnalyzerWorker.ts new file mode 100644 index 0000000..701a1a8 --- /dev/null +++ b/src/workers/tileAnalyzerWorker.ts @@ -0,0 +1,64 @@ +import type { TileAnalysisResult } from '@/types/tileTypes' + +const PIXEL_SAMPLE_RATE = 4 + +self.onmessage = async (e: MessageEvent) => { + const { imageData, tileId, tileName } = e.data + const result = analyzeTile(imageData, tileId, tileName) + self.postMessage(result) +} + +function analyzeTile(imageData: ImageData, tileId: string, tileName: string): TileAnalysisResult { + const { r, g, b } = getDominantColorFast(imageData) + const edge = getEdgeComplexityFast(imageData) + const namePrefix = tileName.split('_')[0] + + return { + tileId, + color: { r, g, b }, + edge, + namePrefix + } +} + +function getDominantColorFast(imageData: ImageData) { + const data = new Uint8ClampedArray(imageData.data.buffer) + let r = 0, g = 0, b = 0, total = 0 + const length = data.length + + for (let i = 0; i < length; i += 4 * PIXEL_SAMPLE_RATE) { + if (data[i + 3] > 0) { + r += data[i] + g += data[i + 1] + b += data[i + 2] + total++ + } + } + + return total > 0 ? { + r: Math.round(r / total), + g: Math.round(g / total), + b: Math.round(b / total) + } : { r: 0, g: 0, b: 0 } +} + +function getEdgeComplexityFast(imageData: ImageData) { + const data = new Uint8ClampedArray(imageData.data.buffer) + const width = imageData.width + const height = imageData.height + let edgePixels = 0 + + for (let y = 0; y < height; y += PIXEL_SAMPLE_RATE) { + for (let x = 0; x < width; x += PIXEL_SAMPLE_RATE) { + const i = (y * width + x) * 4 + if (data[i + 3] > 0 && ( + x === 0 || y === 0 || x >= width - PIXEL_SAMPLE_RATE || y >= height - PIXEL_SAMPLE_RATE || + data[i - 4 * PIXEL_SAMPLE_RATE + 3] === 0 || data[i + 4 * PIXEL_SAMPLE_RATE + 3] === 0 || + data[i - width * 4 * PIXEL_SAMPLE_RATE + 3] === 0 || data[i + width * 4 * PIXEL_SAMPLE_RATE + 3] === 0 + )) { + edgePixels++ + } + } + } + return edgePixels * PIXEL_SAMPLE_RATE +} \ No newline at end of file From 99bb1555a07e1493be351edba3ad6d15576f9bef Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sat, 1 Feb 2025 04:30:07 +0100 Subject: [PATCH 27/35] Listen for attack events. TODO: finish anim. handling --- src/application/types.ts | 1 + src/components/game/character/Character.vue | 8 ++++++-- src/components/game/map/Map.vue | 4 ++++ src/composables/controls/useGameControlsComposable.ts | 7 +++++++ src/stores/mapStore.ts | 11 +++++++++++ 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/application/types.ts b/src/application/types.ts index d61527a..09154b9 100644 --- a/src/application/types.ts +++ b/src/application/types.ts @@ -183,6 +183,7 @@ export type Character = { export type MapCharacter = { character: Character isMoving: boolean + isAttacking?: boolean } export type CharacterItem = { diff --git a/src/components/game/character/Character.vue b/src/components/game/character/Character.vue index a1ecb00..a6e46a5 100644 --- a/src/components/game/character/Character.vue +++ b/src/components/game/character/Character.vue @@ -110,6 +110,7 @@ const currentDirection = computed(() => { }) const currentAction = computed(() => { + if (props.mapCharacter.isAttacking) return 'attack' return props.mapCharacter.isMoving ? 'walk' : 'idle' }) @@ -138,7 +139,9 @@ const handlePositionUpdate = (newValues: any, oldValues: any) => { updatePosition(newValues.positionX, newValues.positionY, direction) } - if (newValues.isMoving !== oldValues?.isMoving || newValues.rotation !== oldValues?.rotation) { + if (newValues.isMoving !== oldValues?.isMoving || + newValues.rotation !== oldValues?.rotation || + newValues.attack !== oldValues?.attack) { updateSprite() } } @@ -148,7 +151,8 @@ watch( positionX: props.mapCharacter.character.positionX, positionY: props.mapCharacter.character.positionY, isMoving: props.mapCharacter.isMoving, - rotation: props.mapCharacter.character.rotation + rotation: props.mapCharacter.character.rotation, + isAttacking: props.mapCharacter.isAttacking }), handlePositionUpdate ) diff --git a/src/components/game/map/Map.vue b/src/components/game/map/Map.vue index fb95343..da80c68 100644 --- a/src/components/game/map/Map.vue +++ b/src/components/game/map/Map.vue @@ -32,6 +32,10 @@ gameStore.connection?.on('map:character:leave', (characterId: UUID) => { mapStore.removeCharacter(characterId) }) +gameStore.connection?.on('map:character:attack', (characterId: UUID) => { + mapStore.updateCharacterProperty(characterId, 'isAttacking', true) +}) + gameStore.connection?.on('map:character:move', (data: { characterId: UUID; positionX: number; positionY: number; rotation: number; isMoving: boolean }) => { mapStore.updateCharacterPosition(data) // @TODO: Replace with universal class, composable or store diff --git a/src/composables/controls/useGameControlsComposable.ts b/src/composables/controls/useGameControlsComposable.ts index 6fff96f..d2df587 100644 --- a/src/composables/controls/useGameControlsComposable.ts +++ b/src/composables/controls/useGameControlsComposable.ts @@ -34,6 +34,8 @@ export function useGameControlsComposable(scene: Phaser.Scene, layer: Phaser.Til function handleKeyDown(event: KeyboardEvent) { if (!gameStore.character) return + // console.log(event.key) + if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(event.key)) { pressedKeys.add(event.key) @@ -43,6 +45,11 @@ export function useGameControlsComposable(scene: Phaser.Scene, layer: Phaser.Til moveCharacter() // Move immediately on first press } } + + // Attack on CTRL + if (event.key === 'Control') { + gameStore.connection?.emit('map:character:attack') + } } function handleKeyUp(event: KeyboardEvent) { diff --git a/src/stores/mapStore.ts b/src/stores/mapStore.ts index 313924e..522d9ed 100644 --- a/src/stores/mapStore.ts +++ b/src/stores/mapStore.ts @@ -31,6 +31,17 @@ export const useMapStore = defineStore('map', { const index = this.characters.findIndex((char) => char.character.id === updatedCharacter.character.id) if (index !== -1) this.characters[index] = updatedCharacter }, + // Property is mapCharacter key + updateCharacterProperty( + characterId: UUID, + property: K, + value: MapCharacter[K] + ) { + const character = this.characters.find((char) => char.character.id === characterId) + if (character) { + character[property] = value + } + }, removeCharacter(characterId: UUID) { this.characters = this.characters.filter((char) => char.character.id !== characterId) }, From 63889a537a3fa6f55bb8965b51eaa00fd22177ce Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sat, 1 Feb 2025 14:22:37 +0100 Subject: [PATCH 28/35] npm update --- package-lock.json | 158 +++++++++++++++++++++++----------------------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/package-lock.json b/package-lock.json index fbbf708..1bccc1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1161,9 +1161,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz", - "integrity": "sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.0.tgz", + "integrity": "sha512-Eeao7ewDq79jVEsrtWIj5RNqB8p2knlm9fhR6uJ2gqP7UfbLrTrxevudVrEPDM7Wkpn/HpRC2QfazH7MXLz3vQ==", "cpu": [ "arm" ], @@ -1175,9 +1175,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz", - "integrity": "sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.0.tgz", + "integrity": "sha512-yVh0Kf1f0Fq4tWNf6mWcbQBCLDpDrDEl88lzPgKhrgTcDrTtlmun92ywEF9dCjmYO3EFiSuJeeo9cYRxl2FswA==", "cpu": [ "arm64" ], @@ -1189,9 +1189,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz", - "integrity": "sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.0.tgz", + "integrity": "sha512-gCs0ErAZ9s0Osejpc3qahTsqIPUDjSKIyxK/0BGKvL+Tn0n3Kwvj8BrCv7Y5sR1Ypz1K2qz9Ny0VvkVyoXBVUQ==", "cpu": [ "arm64" ], @@ -1203,9 +1203,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz", - "integrity": "sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.0.tgz", + "integrity": "sha512-aIB5Anc8hngk15t3GUkiO4pv42ykXHfmpXGS+CzM9CTyiWyT8HIS5ygRAy7KcFb/wiw4Br+vh1byqcHRTfq2tQ==", "cpu": [ "x64" ], @@ -1217,9 +1217,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz", - "integrity": "sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.0.tgz", + "integrity": "sha512-kpdsUdMlVJMRMaOf/tIvxk8TQdzHhY47imwmASOuMajg/GXpw8GKNd8LNwIHE5Yd1onehNpcUB9jHY6wgw9nHQ==", "cpu": [ "arm64" ], @@ -1231,9 +1231,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz", - "integrity": "sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.0.tgz", + "integrity": "sha512-D0RDyHygOBCQiqookcPevrvgEarN0CttBecG4chOeIYCNtlKHmf5oi5kAVpXV7qs0Xh/WO2RnxeicZPtT50V0g==", "cpu": [ "x64" ], @@ -1245,9 +1245,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz", - "integrity": "sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.0.tgz", + "integrity": "sha512-mCIw8j5LPDXmCOW8mfMZwT6F/Kza03EnSr4wGYEswrEfjTfVsFOxvgYfuRMxTuUF/XmRb9WSMD5GhCWDe2iNrg==", "cpu": [ "arm" ], @@ -1259,9 +1259,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz", - "integrity": "sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.0.tgz", + "integrity": "sha512-AwwldAu4aCJPob7zmjuDUMvvuatgs8B/QiVB0KwkUarAcPB3W+ToOT+18TQwY4z09Al7G0BvCcmLRop5zBLTag==", "cpu": [ "arm" ], @@ -1273,9 +1273,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz", - "integrity": "sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.0.tgz", + "integrity": "sha512-e7kDUGVP+xw05pV65ZKb0zulRploU3gTu6qH1qL58PrULDGxULIS0OSDQJLH7WiFnpd3ZKUU4VM3u/Z7Zw+e7Q==", "cpu": [ "arm64" ], @@ -1287,9 +1287,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz", - "integrity": "sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.0.tgz", + "integrity": "sha512-SXYJw3zpwHgaBqTXeAZ31qfW/v50wq4HhNVvKFhRr5MnptRX2Af4KebLWR1wpxGJtLgfS2hEPuALRIY3LPAAcA==", "cpu": [ "arm64" ], @@ -1301,9 +1301,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz", - "integrity": "sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.0.tgz", + "integrity": "sha512-e5XiCinINCI4RdyU3sFyBH4zzz7LiQRvHqDtRe9Dt8o/8hTBaYpdPimayF00eY2qy5j4PaaWK0azRgUench6WQ==", "cpu": [ "loong64" ], @@ -1315,9 +1315,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz", - "integrity": "sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.0.tgz", + "integrity": "sha512-3SWN3e0bAsm9ToprLFBSro8nJe6YN+5xmB11N4FfNf92wvLye/+Rh5JGQtKOpwLKt6e61R1RBc9g+luLJsc23A==", "cpu": [ "ppc64" ], @@ -1329,9 +1329,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz", - "integrity": "sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.0.tgz", + "integrity": "sha512-B1Oqt3GLh7qmhvfnc2WQla4NuHlcxAD5LyueUi5WtMc76ZWY+6qDtQYqnxARx9r+7mDGfamD+8kTJO0pKUJeJA==", "cpu": [ "riscv64" ], @@ -1343,9 +1343,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz", - "integrity": "sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.0.tgz", + "integrity": "sha512-UfUCo0h/uj48Jq2lnhX0AOhZPSTAq3Eostas+XZ+GGk22pI+Op1Y6cxQ1JkUuKYu2iU+mXj1QjPrZm9nNWV9rg==", "cpu": [ "s390x" ], @@ -1357,9 +1357,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz", - "integrity": "sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.0.tgz", + "integrity": "sha512-chZLTUIPbgcpm+Z7ALmomXW8Zh+wE2icrG+K6nt/HenPLmtwCajhQC5flNSk1Xy5EDMt/QAOz2MhzfOfJOLSiA==", "cpu": [ "x64" ], @@ -1371,9 +1371,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz", - "integrity": "sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.0.tgz", + "integrity": "sha512-jo0UolK70O28BifvEsFD/8r25shFezl0aUk2t0VJzREWHkq19e+pcLu4kX5HiVXNz5qqkD+aAq04Ct8rkxgbyQ==", "cpu": [ "x64" ], @@ -1385,9 +1385,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz", - "integrity": "sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.0.tgz", + "integrity": "sha512-Vmg0NhAap2S54JojJchiu5An54qa6t/oKT7LmDaWggpIcaiL8WcWHEN6OQrfTdL6mQ2GFyH7j2T5/3YPEDOOGA==", "cpu": [ "arm64" ], @@ -1399,9 +1399,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz", - "integrity": "sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.0.tgz", + "integrity": "sha512-CV2aqhDDOsABKHKhNcs1SZFryffQf8vK2XrxP6lxC99ELZAdvsDgPklIBfd65R8R+qvOm1SmLaZ/Fdq961+m7A==", "cpu": [ "ia32" ], @@ -1413,9 +1413,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz", - "integrity": "sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.0.tgz", + "integrity": "sha512-g2ASy1QwHP88y5KWvblUolJz9rN+i4ZOsYzkEwcNfaNooxNUXG+ON6F5xFo0NIItpHqxcdAyls05VXpBnludGw==", "cpu": [ "x64" ], @@ -4250,9 +4250,9 @@ } }, "node_modules/rollup": { - "version": "4.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.1.tgz", - "integrity": "sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.0.tgz", + "integrity": "sha512-+4C/cgJ9w6sudisA0nZz0+O7lTP9a3CzNLsoDwaRumM8QHwghUsu6tqHXiTmNUp/rqNiM14++7dkzHDyCRs0Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -4266,25 +4266,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.32.1", - "@rollup/rollup-android-arm64": "4.32.1", - "@rollup/rollup-darwin-arm64": "4.32.1", - "@rollup/rollup-darwin-x64": "4.32.1", - "@rollup/rollup-freebsd-arm64": "4.32.1", - "@rollup/rollup-freebsd-x64": "4.32.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.32.1", - "@rollup/rollup-linux-arm-musleabihf": "4.32.1", - "@rollup/rollup-linux-arm64-gnu": "4.32.1", - "@rollup/rollup-linux-arm64-musl": "4.32.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.32.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.32.1", - "@rollup/rollup-linux-riscv64-gnu": "4.32.1", - "@rollup/rollup-linux-s390x-gnu": "4.32.1", - "@rollup/rollup-linux-x64-gnu": "4.32.1", - "@rollup/rollup-linux-x64-musl": "4.32.1", - "@rollup/rollup-win32-arm64-msvc": "4.32.1", - "@rollup/rollup-win32-ia32-msvc": "4.32.1", - "@rollup/rollup-win32-x64-msvc": "4.32.1", + "@rollup/rollup-android-arm-eabi": "4.34.0", + "@rollup/rollup-android-arm64": "4.34.0", + "@rollup/rollup-darwin-arm64": "4.34.0", + "@rollup/rollup-darwin-x64": "4.34.0", + "@rollup/rollup-freebsd-arm64": "4.34.0", + "@rollup/rollup-freebsd-x64": "4.34.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.0", + "@rollup/rollup-linux-arm-musleabihf": "4.34.0", + "@rollup/rollup-linux-arm64-gnu": "4.34.0", + "@rollup/rollup-linux-arm64-musl": "4.34.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.0", + "@rollup/rollup-linux-riscv64-gnu": "4.34.0", + "@rollup/rollup-linux-s390x-gnu": "4.34.0", + "@rollup/rollup-linux-x64-gnu": "4.34.0", + "@rollup/rollup-linux-x64-musl": "4.34.0", + "@rollup/rollup-win32-arm64-msvc": "4.34.0", + "@rollup/rollup-win32-ia32-msvc": "4.34.0", + "@rollup/rollup-win32-x64-msvc": "4.34.0", "fsevents": "~2.3.2" } }, From cfdfa98379c9e42227b50af569c3954f0a75d321 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sat, 1 Feb 2025 14:22:42 +0100 Subject: [PATCH 29/35] Revert --- src/components/game/character/Character.vue | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/components/game/character/Character.vue b/src/components/game/character/Character.vue index a6e46a5..29596bf 100644 --- a/src/components/game/character/Character.vue +++ b/src/components/game/character/Character.vue @@ -110,7 +110,6 @@ const currentDirection = computed(() => { }) const currentAction = computed(() => { - if (props.mapCharacter.isAttacking) return 'attack' return props.mapCharacter.isMoving ? 'walk' : 'idle' }) @@ -139,9 +138,7 @@ const handlePositionUpdate = (newValues: any, oldValues: any) => { updatePosition(newValues.positionX, newValues.positionY, direction) } - if (newValues.isMoving !== oldValues?.isMoving || - newValues.rotation !== oldValues?.rotation || - newValues.attack !== oldValues?.attack) { + if (newValues.isMoving !== oldValues?.isMoving || newValues.rotation !== oldValues?.rotation) { updateSprite() } } From d7f60d7bfca307809dd877ad5b0f658d06f0fc2c Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sat, 1 Feb 2025 14:49:33 +0100 Subject: [PATCH 30/35] Don't include sprite dimensions in payload sent to server --- .../sprite/partials/SpriteImagesInput.vue | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue b/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue index 00d047c..3f49d4e 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue @@ -2,7 +2,7 @@
Uploaded image -
{{ image.dimensions.width }}x{{ image.dimensions.height }}
+
{{ image.dimensions.width }}x{{ image.dimensions.height }}