From 8e6294c96fdb0916371efe4042c61b30e7803b6e Mon Sep 17 00:00:00 2001 From: Emma Date: Sat, 15 Feb 2025 09:24:56 -0700 Subject: [PATCH] migrate to vite working --- .gitignore | 28 +- .temp/.gitignore | 3 + .temp/deno.json | 18 ++ .temp/deno.lock | 238 +++++++++++++++++ dev.ts => .temp/dev.ts | 0 game.ts => .temp/game.ts | 0 .temp/index.html | 46 ++++ prototype.ts => .temp/prototype.ts | 0 track.ts => .temp/track.ts | 0 train.old.ts => .temp/train.old.ts | 0 .vscode/extensions.json | 3 + deno.json | 22 +- deno.lock | 243 +++++++++--------- index.html | 93 +++---- {sprites => public/sprites}/BlueEngine.png | Bin {sprites => public/sprites}/Engine.png | Bin {sprites => public/sprites}/EngineSprites.png | Bin {sprites => public/sprites}/GreenEngine.png | Bin {sprites => public/sprites}/PurpleEngine.png | Bin {sprites => public/sprites}/RedEngine.png | Bin public/train icon.png | Bin 0 -> 2813 bytes GameLoop.ts => src/GameLoop.ts | 0 inputs.ts => src/inputs.ts | 0 {lib => src/lib}/context.ts | 0 {lib => src/lib}/input.ts | 0 {lib => src/lib}/resources.ts | 0 main.ts => src/main.ts | 0 {math => src/math}/clamp.ts | 0 {math => src/math}/constants.ts | 0 {math => src/math}/lerp.ts | 0 {math => src/math}/path.ts | 0 {physics => src/physics}/follower.ts | 50 ++-- {physics => src/physics}/mover.ts | 41 ++- {state => src/state}/machine.ts | 2 +- {state => src/state}/states/EditTrackState.ts | 0 {state => src/state}/states/EditTrainState.ts | 0 {state => src/state}/states/LoadState.ts | 2 +- {state => src/state}/states/PausedState.ts | 0 {state => src/state}/states/RunningState.ts | 2 +- {state => src/state}/states/index.ts | 1 - {test => src/test}/bench.ts | 0 {test => src/test}/contextBench.test.ts | 0 {test => src/test}/trackSystemBench.test.ts | 0 {track => src/track}/shapes.ts | 0 {track => src/track}/system.ts | 2 +- {train => src/train}/cars.ts | 2 +- {train => src/train}/engines.ts | 0 {train => src/train}/newTrain.ts | 0 {train => src/train}/train.ts | 23 +- types.ts => src/types.ts | 0 {ui => src/ui}/button.ts | 0 src/vite-env.d.ts | 1 + vite.config.ts | 7 + 53 files changed, 608 insertions(+), 219 deletions(-) create mode 100644 .temp/.gitignore create mode 100644 .temp/deno.json create mode 100644 .temp/deno.lock rename dev.ts => .temp/dev.ts (100%) rename game.ts => .temp/game.ts (100%) create mode 100644 .temp/index.html rename prototype.ts => .temp/prototype.ts (100%) rename track.ts => .temp/track.ts (100%) rename train.old.ts => .temp/train.old.ts (100%) create mode 100644 .vscode/extensions.json rename {sprites => public/sprites}/BlueEngine.png (100%) rename {sprites => public/sprites}/Engine.png (100%) rename {sprites => public/sprites}/EngineSprites.png (100%) rename {sprites => public/sprites}/GreenEngine.png (100%) rename {sprites => public/sprites}/PurpleEngine.png (100%) rename {sprites => public/sprites}/RedEngine.png (100%) create mode 100644 public/train icon.png rename GameLoop.ts => src/GameLoop.ts (100%) rename inputs.ts => src/inputs.ts (100%) rename {lib => src/lib}/context.ts (100%) rename {lib => src/lib}/input.ts (100%) rename {lib => src/lib}/resources.ts (100%) rename main.ts => src/main.ts (100%) rename {math => src/math}/clamp.ts (100%) rename {math => src/math}/constants.ts (100%) rename {math => src/math}/lerp.ts (100%) rename {math => src/math}/path.ts (100%) rename {physics => src/physics}/follower.ts (91%) rename {physics => src/physics}/mover.ts (77%) rename {state => src/state}/machine.ts (98%) rename {state => src/state}/states/EditTrackState.ts (100%) rename {state => src/state}/states/EditTrainState.ts (100%) rename {state => src/state}/states/LoadState.ts (97%) rename {state => src/state}/states/PausedState.ts (100%) rename {state => src/state}/states/RunningState.ts (97%) rename {state => src/state}/states/index.ts (95%) rename {test => src/test}/bench.ts (100%) rename {test => src/test}/contextBench.test.ts (100%) rename {test => src/test}/trackSystemBench.test.ts (100%) rename {track => src/track}/shapes.ts (100%) rename {track => src/track}/system.ts (99%) rename {train => src/train}/cars.ts (94%) rename {train => src/train}/engines.ts (100%) rename {train => src/train}/newTrain.ts (100%) rename {train => src/train}/train.ts (87%) rename types.ts => src/types.ts (100%) rename {ui => src/ui}/button.ts (100%) create mode 100644 src/vite-env.d.ts create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore index 6449360..289e710 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,25 @@ -bundle.js -dist/ -temp.ts \ No newline at end of file +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +.vite +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.temp/.gitignore b/.temp/.gitignore new file mode 100644 index 0000000..6449360 --- /dev/null +++ b/.temp/.gitignore @@ -0,0 +1,3 @@ +bundle.js +dist/ +temp.ts \ No newline at end of file diff --git a/.temp/deno.json b/.temp/deno.json new file mode 100644 index 0000000..d73e098 --- /dev/null +++ b/.temp/deno.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "lib": [ + "deno.ns", + "deno.window", + "dom", + "dom.iterable", + "ES2021", + "ESNext" + ] + }, + "tasks": { + "dev": "deno run -RWEN --allow-run dev.ts dev" + }, + "imports": { + "@bearmetal/doodler": "jsr:@bearmetal/doodler@0.0.5" + } +} \ No newline at end of file diff --git a/.temp/deno.lock b/.temp/deno.lock new file mode 100644 index 0000000..a0975ed --- /dev/null +++ b/.temp/deno.lock @@ -0,0 +1,238 @@ +{ + "version": "4", + "specifiers": { + "jsr:@bearmetal/doodler@0.0.5-b": "0.0.5-b", + "jsr:@luca/esbuild-deno-loader@*": "0.11.0", + "jsr:@luca/esbuild-deno-loader@0.11.1": "0.11.1", + "jsr:@std/assert@*": "1.0.10", + "jsr:@std/assert@^1.0.10": "1.0.10", + "jsr:@std/bytes@^1.0.2": "1.0.2", + "jsr:@std/cli@^1.0.8": "1.0.9", + "jsr:@std/encoding@^1.0.5": "1.0.6", + "jsr:@std/fmt@^1.0.3": "1.0.3", + "jsr:@std/html@^1.0.3": "1.0.3", + "jsr:@std/http@*": "1.0.12", + "jsr:@std/internal@^1.0.5": "1.0.5", + "jsr:@std/media-types@^1.1.0": "1.1.0", + "jsr:@std/net@^1.0.4": "1.0.4", + "jsr:@std/path@^1.0.6": "1.0.8", + "jsr:@std/path@^1.0.8": "1.0.8", + "jsr:@std/streams@^1.0.8": "1.0.8", + "jsr:@std/testing@*": "1.0.8", + "npm:esbuild@*": "0.24.2" + }, + "jsr": { + "@bearmetal/doodler@0.0.4": { + "integrity": "b631083cff84994c513f70d1f09e6a9256edabcb224112c93a9ca6a87c88a389" + }, + "@bearmetal/doodler@0.0.5-b": { + "integrity": "94f265ea21162f943291526800de7f3f6560634a4fe762a38cd73892685b6742" + }, + "@luca/esbuild-deno-loader@0.11.0": { + "integrity": "c05a989aa7c4ee6992a27be5f15cfc5be12834cab7ff84cabb47313737c51a2c", + "dependencies": [ + "jsr:@std/bytes", + "jsr:@std/encoding", + "jsr:@std/path@^1.0.6" + ] + }, + "@luca/esbuild-deno-loader@0.11.1": { + "integrity": "dc020d16d75b591f679f6b9288b10f38bdb4f24345edb2f5732affa1d9885267", + "dependencies": [ + "jsr:@std/bytes", + "jsr:@std/encoding", + "jsr:@std/path@^1.0.6" + ] + }, + "@std/assert@1.0.10": { + "integrity": "59b5cbac5bd55459a19045d95cc7c2ff787b4f8527c0dd195078ff6f9481fbb3", + "dependencies": [ + "jsr:@std/internal" + ] + }, + "@std/bytes@1.0.2": { + "integrity": "fbdee322bbd8c599a6af186a1603b3355e59a5fb1baa139f8f4c3c9a1b3e3d57" + }, + "@std/cli@1.0.9": { + "integrity": "557e5865af000efbf3f737dcfea5b8ab86453594f4a9cd8d08c9fa83d8e3f3bc" + }, + "@std/encoding@1.0.6": { + "integrity": "ca87122c196e8831737d9547acf001766618e78cd8c33920776c7f5885546069" + }, + "@std/fmt@1.0.3": { + "integrity": "97765c16aa32245ff4e2204ecf7d8562496a3cb8592340a80e7e554e0bb9149f" + }, + "@std/html@1.0.3": { + "integrity": "7a0ac35e050431fb49d44e61c8b8aac1ebd55937e0dc9ec6409aa4bab39a7988" + }, + "@std/http@1.0.12": { + "integrity": "85246d8bfe9c8e2538518725b158bdc31f616e0869255f4a8d9e3de919cab2aa", + "dependencies": [ + "jsr:@std/cli", + "jsr:@std/encoding", + "jsr:@std/fmt", + "jsr:@std/html", + "jsr:@std/media-types", + "jsr:@std/net", + "jsr:@std/path@^1.0.8", + "jsr:@std/streams" + ] + }, + "@std/internal@1.0.5": { + "integrity": "54a546004f769c1ac9e025abd15a76b6671ddc9687e2313b67376125650dc7ba" + }, + "@std/media-types@1.1.0": { + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" + }, + "@std/net@1.0.4": { + "integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852" + }, + "@std/path@1.0.8": { + "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" + }, + "@std/streams@1.0.8": { + "integrity": "b41332d93d2cf6a82fe4ac2153b930adf1a859392931e2a19d9fabfb6f154fb3" + }, + "@std/testing@1.0.8": { + "integrity": "ceef535808fb7568e91b0f8263599bd29b1c5603ffb0377227f00a8ca9fe42a2", + "dependencies": [ + "jsr:@std/assert@^1.0.10", + "jsr:@std/internal" + ] + } + }, + "npm": { + "@esbuild/aix-ppc64@0.24.2": { + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==" + }, + "@esbuild/android-arm64@0.24.2": { + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==" + }, + "@esbuild/android-arm@0.24.2": { + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==" + }, + "@esbuild/android-x64@0.24.2": { + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==" + }, + "@esbuild/darwin-arm64@0.24.2": { + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==" + }, + "@esbuild/darwin-x64@0.24.2": { + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==" + }, + "@esbuild/freebsd-arm64@0.24.2": { + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==" + }, + "@esbuild/freebsd-x64@0.24.2": { + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==" + }, + "@esbuild/linux-arm64@0.24.2": { + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==" + }, + "@esbuild/linux-arm@0.24.2": { + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==" + }, + "@esbuild/linux-ia32@0.24.2": { + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==" + }, + "@esbuild/linux-loong64@0.24.2": { + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==" + }, + "@esbuild/linux-mips64el@0.24.2": { + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==" + }, + "@esbuild/linux-ppc64@0.24.2": { + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==" + }, + "@esbuild/linux-riscv64@0.24.2": { + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==" + }, + "@esbuild/linux-s390x@0.24.2": { + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==" + }, + "@esbuild/linux-x64@0.24.2": { + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==" + }, + "@esbuild/netbsd-arm64@0.24.2": { + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==" + }, + "@esbuild/netbsd-x64@0.24.2": { + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==" + }, + "@esbuild/openbsd-arm64@0.24.2": { + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==" + }, + "@esbuild/openbsd-x64@0.24.2": { + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==" + }, + "@esbuild/sunos-x64@0.24.2": { + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==" + }, + "@esbuild/win32-arm64@0.24.2": { + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==" + }, + "@esbuild/win32-ia32@0.24.2": { + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==" + }, + "@esbuild/win32-x64@0.24.2": { + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==" + }, + "esbuild@0.24.2": { + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dependencies": [ + "@esbuild/aix-ppc64", + "@esbuild/android-arm", + "@esbuild/android-arm64", + "@esbuild/android-x64", + "@esbuild/darwin-arm64", + "@esbuild/darwin-x64", + "@esbuild/freebsd-arm64", + "@esbuild/freebsd-x64", + "@esbuild/linux-arm", + "@esbuild/linux-arm64", + "@esbuild/linux-ia32", + "@esbuild/linux-loong64", + "@esbuild/linux-mips64el", + "@esbuild/linux-ppc64", + "@esbuild/linux-riscv64", + "@esbuild/linux-s390x", + "@esbuild/linux-x64", + "@esbuild/netbsd-arm64", + "@esbuild/netbsd-x64", + "@esbuild/openbsd-arm64", + "@esbuild/openbsd-x64", + "@esbuild/sunos-x64", + "@esbuild/win32-arm64", + "@esbuild/win32-ia32", + "@esbuild/win32-x64" + ] + } + }, + "remote": { + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.0.7a/canvas.ts": "aadfb4b2e9acce34d4a5da3f9027be642c93229bbfc2641cb55301542cbb87bf", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.0.7a/geometry/constants.ts": "4f4cf7bf49ac871d984e9b43896783b0cc8ab0ea60d0fc4c8c582f7e00c3df5a", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.0.7a/geometry/vector.ts": "a08ecff64c5436a28c6451a31c68fc912d25f941aabafb79418fa0a1aeffa9d2", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.0.7a/mod.ts": "766bdedc7e28b89d3cb3e83ee55c612bfaeabe252a14ff47e5e676535e033d88", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/animation/gif.ts": "6f8b77cb55b252bd7c18b04fa7ff4e88b4459cf1158d8daef538b2e471433420", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/animation/sprite.ts": "64adc3843b48a0d74ad96cbf4a4d26426c1e909a03ca935f73d5ec5545080f20", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/canvas.ts": "5af9d684e1144a374f0fbee46c710f9d493d5491e90b17356d910c6ade32bb50", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/collision/aa.ts": "c27a1deee0b2ed02e3a88e4e0b370ca2dfa0f57bf783724fa5c099e9eeabc5c9", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/collision/circular.ts": "962703eacb19cc849f3fb355815edfd71e12d06f8e72f517a7c038ff2d1c1729", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/collision/sat.ts": "f221540a984c908c96b4cc86a8eddacf3d3a5dfa5367ba538c02bcf7f7038247", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/geometry/constants.ts": "4f4cf7bf49ac871d984e9b43896783b0cc8ab0ea60d0fc4c8c582f7e00c3df5a", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/geometry/polygon.ts": "6c7edf576bebd7f24b1358ecba70d561d5905e0185701e12437ba7ccdacc66a9", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/geometry/spline.ts": "3521ea5b57902001fb9a248580bd66f12f563a581eff137f5c67e2edc0305ba0", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/geometry/vector.ts": "0143daf300032d6faf5a073fffa5c298fdcd74ba2d6bcd10a2d96ab54e55bc69", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/init.ts": "0e08fdf4c896f88308e6a6a2fb8842fe3a67a3a47a5ad722ecbce37737f8694d", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/mod.ts": "ffcbd74b612db108d50f5e2e1ba7425c7e6fac87f3fe7fb43c10a5283501513e", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/processing/gif.ts": "e97456fd55806086aa90d9bc46193d355c2f6093f376f4141ca959942193e4dc", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/timing/EaseInOut.ts": "9eba3d8f5bf5e03220c93916cff6f0bbc24ecdf7550f21fd99e3aaf310f625b0", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/timing/Map.ts": "3948648f8bdf8f1ecea83120c41211f5543c7933dbe3e49b367285a98ed50a9a", + "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/zoomableCanvas.ts": "395f80ddaef83e2b37a2884d7fffefae80c2bcecb72269405f53899d5dfc9956" + }, + "workspace": { + "dependencies": [ + "jsr:@bearmetal/doodler@0.0.5-b" + ] + } +} diff --git a/dev.ts b/.temp/dev.ts similarity index 100% rename from dev.ts rename to .temp/dev.ts diff --git a/game.ts b/.temp/game.ts similarity index 100% rename from game.ts rename to .temp/game.ts diff --git a/.temp/index.html b/.temp/index.html new file mode 100644 index 0000000..86872f7 --- /dev/null +++ b/.temp/index.html @@ -0,0 +1,46 @@ + + + + + + + TRAINS! + + + + + + \ No newline at end of file diff --git a/prototype.ts b/.temp/prototype.ts similarity index 100% rename from prototype.ts rename to .temp/prototype.ts diff --git a/track.ts b/.temp/track.ts similarity index 100% rename from track.ts rename to .temp/track.ts diff --git a/train.old.ts b/.temp/train.old.ts similarity index 100% rename from train.old.ts rename to .temp/train.old.ts diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..74baffc --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["denoland.vscode-deno"] +} diff --git a/deno.json b/deno.json index cabc7e9..d8b4ec9 100644 --- a/deno.json +++ b/deno.json @@ -1,18 +1,20 @@ { + "tasks": { + "dev": "deno run -A --node-modules-dir npm:vite", + "build": "deno run -A --node-modules-dir npm:vite build", + "preview": "deno run -A --node-modules-dir npm:vite preview", + "serve": "deno run --allow-net --allow-read jsr:@std/http@1/file-server dist/" + }, "compilerOptions": { "lib": [ - "deno.ns", - "deno.window", - "dom", - "dom.iterable", - "ES2021", - "ESNext" + "ESNext", + "DOM", + "DOM.Iterable" ] }, - "tasks": { - "dev": "deno run -RWEN --allow-run dev.ts dev" - }, "imports": { - "@bearmetal/doodler": "jsr:@bearmetal/doodler@0.0.5-b" + "@bearmetal/doodler": "jsr:@bearmetal/doodler@0.0.5-b", + "@deno/vite-plugin": "npm:@deno/vite-plugin@^1.0.4", + "vite": "npm:vite@^6.0.1" } } \ No newline at end of file diff --git a/deno.lock b/deno.lock index a0975ed..d107c6e 100644 --- a/deno.lock +++ b/deno.lock @@ -2,106 +2,22 @@ "version": "4", "specifiers": { "jsr:@bearmetal/doodler@0.0.5-b": "0.0.5-b", - "jsr:@luca/esbuild-deno-loader@*": "0.11.0", - "jsr:@luca/esbuild-deno-loader@0.11.1": "0.11.1", - "jsr:@std/assert@*": "1.0.10", - "jsr:@std/assert@^1.0.10": "1.0.10", - "jsr:@std/bytes@^1.0.2": "1.0.2", - "jsr:@std/cli@^1.0.8": "1.0.9", - "jsr:@std/encoding@^1.0.5": "1.0.6", - "jsr:@std/fmt@^1.0.3": "1.0.3", - "jsr:@std/html@^1.0.3": "1.0.3", - "jsr:@std/http@*": "1.0.12", - "jsr:@std/internal@^1.0.5": "1.0.5", - "jsr:@std/media-types@^1.1.0": "1.1.0", - "jsr:@std/net@^1.0.4": "1.0.4", - "jsr:@std/path@^1.0.6": "1.0.8", - "jsr:@std/path@^1.0.8": "1.0.8", - "jsr:@std/streams@^1.0.8": "1.0.8", - "jsr:@std/testing@*": "1.0.8", - "npm:esbuild@*": "0.24.2" + "npm:@deno/vite-plugin@^1.0.4": "1.0.4_vite@6.1.0", + "npm:vite@*": "6.1.0", + "npm:vite@^6.0.1": "6.1.0" }, "jsr": { - "@bearmetal/doodler@0.0.4": { - "integrity": "b631083cff84994c513f70d1f09e6a9256edabcb224112c93a9ca6a87c88a389" - }, "@bearmetal/doodler@0.0.5-b": { "integrity": "94f265ea21162f943291526800de7f3f6560634a4fe762a38cd73892685b6742" - }, - "@luca/esbuild-deno-loader@0.11.0": { - "integrity": "c05a989aa7c4ee6992a27be5f15cfc5be12834cab7ff84cabb47313737c51a2c", - "dependencies": [ - "jsr:@std/bytes", - "jsr:@std/encoding", - "jsr:@std/path@^1.0.6" - ] - }, - "@luca/esbuild-deno-loader@0.11.1": { - "integrity": "dc020d16d75b591f679f6b9288b10f38bdb4f24345edb2f5732affa1d9885267", - "dependencies": [ - "jsr:@std/bytes", - "jsr:@std/encoding", - "jsr:@std/path@^1.0.6" - ] - }, - "@std/assert@1.0.10": { - "integrity": "59b5cbac5bd55459a19045d95cc7c2ff787b4f8527c0dd195078ff6f9481fbb3", - "dependencies": [ - "jsr:@std/internal" - ] - }, - "@std/bytes@1.0.2": { - "integrity": "fbdee322bbd8c599a6af186a1603b3355e59a5fb1baa139f8f4c3c9a1b3e3d57" - }, - "@std/cli@1.0.9": { - "integrity": "557e5865af000efbf3f737dcfea5b8ab86453594f4a9cd8d08c9fa83d8e3f3bc" - }, - "@std/encoding@1.0.6": { - "integrity": "ca87122c196e8831737d9547acf001766618e78cd8c33920776c7f5885546069" - }, - "@std/fmt@1.0.3": { - "integrity": "97765c16aa32245ff4e2204ecf7d8562496a3cb8592340a80e7e554e0bb9149f" - }, - "@std/html@1.0.3": { - "integrity": "7a0ac35e050431fb49d44e61c8b8aac1ebd55937e0dc9ec6409aa4bab39a7988" - }, - "@std/http@1.0.12": { - "integrity": "85246d8bfe9c8e2538518725b158bdc31f616e0869255f4a8d9e3de919cab2aa", - "dependencies": [ - "jsr:@std/cli", - "jsr:@std/encoding", - "jsr:@std/fmt", - "jsr:@std/html", - "jsr:@std/media-types", - "jsr:@std/net", - "jsr:@std/path@^1.0.8", - "jsr:@std/streams" - ] - }, - "@std/internal@1.0.5": { - "integrity": "54a546004f769c1ac9e025abd15a76b6671ddc9687e2313b67376125650dc7ba" - }, - "@std/media-types@1.1.0": { - "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" - }, - "@std/net@1.0.4": { - "integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852" - }, - "@std/path@1.0.8": { - "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" - }, - "@std/streams@1.0.8": { - "integrity": "b41332d93d2cf6a82fe4ac2153b930adf1a859392931e2a19d9fabfb6f154fb3" - }, - "@std/testing@1.0.8": { - "integrity": "ceef535808fb7568e91b0f8263599bd29b1c5603ffb0377227f00a8ca9fe42a2", - "dependencies": [ - "jsr:@std/assert@^1.0.10", - "jsr:@std/internal" - ] } }, "npm": { + "@deno/vite-plugin@1.0.4_vite@6.1.0": { + "integrity": "sha512-xg8YT8Wn2sGXSnJgiGTpBGX1Dov0c6fd1rAp8VsfrCUtyBRRWzwVMAnd3fQ4yq8h7LSVvJUxEFN4U421k/DQLA==", + "dependencies": [ + "vite" + ] + }, "@esbuild/aix-ppc64@0.24.2": { "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==" }, @@ -177,6 +93,66 @@ "@esbuild/win32-x64@0.24.2": { "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==" }, + "@rollup/rollup-android-arm-eabi@4.34.7": { + "integrity": "sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==" + }, + "@rollup/rollup-android-arm64@4.34.7": { + "integrity": "sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==" + }, + "@rollup/rollup-darwin-arm64@4.34.7": { + "integrity": "sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==" + }, + "@rollup/rollup-darwin-x64@4.34.7": { + "integrity": "sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==" + }, + "@rollup/rollup-freebsd-arm64@4.34.7": { + "integrity": "sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==" + }, + "@rollup/rollup-freebsd-x64@4.34.7": { + "integrity": "sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==" + }, + "@rollup/rollup-linux-arm-gnueabihf@4.34.7": { + "integrity": "sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==" + }, + "@rollup/rollup-linux-arm-musleabihf@4.34.7": { + "integrity": "sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==" + }, + "@rollup/rollup-linux-arm64-gnu@4.34.7": { + "integrity": "sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==" + }, + "@rollup/rollup-linux-arm64-musl@4.34.7": { + "integrity": "sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==" + }, + "@rollup/rollup-linux-loongarch64-gnu@4.34.7": { + "integrity": "sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==" + }, + "@rollup/rollup-linux-powerpc64le-gnu@4.34.7": { + "integrity": "sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==" + }, + "@rollup/rollup-linux-riscv64-gnu@4.34.7": { + "integrity": "sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==" + }, + "@rollup/rollup-linux-s390x-gnu@4.34.7": { + "integrity": "sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==" + }, + "@rollup/rollup-linux-x64-gnu@4.34.7": { + "integrity": "sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==" + }, + "@rollup/rollup-linux-x64-musl@4.34.7": { + "integrity": "sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==" + }, + "@rollup/rollup-win32-arm64-msvc@4.34.7": { + "integrity": "sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==" + }, + "@rollup/rollup-win32-ia32-msvc@4.34.7": { + "integrity": "sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==" + }, + "@rollup/rollup-win32-x64-msvc@4.34.7": { + "integrity": "sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==" + }, + "@types/estree@1.0.6": { + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + }, "esbuild@0.24.2": { "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", "dependencies": [ @@ -206,33 +182,68 @@ "@esbuild/win32-ia32", "@esbuild/win32-x64" ] + }, + "fsevents@2.3.3": { + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==" + }, + "nanoid@3.3.8": { + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==" + }, + "picocolors@1.1.1": { + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "postcss@8.5.2": { + "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, + "rollup@4.34.7": { + "integrity": "sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==", + "dependencies": [ + "@rollup/rollup-android-arm-eabi", + "@rollup/rollup-android-arm64", + "@rollup/rollup-darwin-arm64", + "@rollup/rollup-darwin-x64", + "@rollup/rollup-freebsd-arm64", + "@rollup/rollup-freebsd-x64", + "@rollup/rollup-linux-arm-gnueabihf", + "@rollup/rollup-linux-arm-musleabihf", + "@rollup/rollup-linux-arm64-gnu", + "@rollup/rollup-linux-arm64-musl", + "@rollup/rollup-linux-loongarch64-gnu", + "@rollup/rollup-linux-powerpc64le-gnu", + "@rollup/rollup-linux-riscv64-gnu", + "@rollup/rollup-linux-s390x-gnu", + "@rollup/rollup-linux-x64-gnu", + "@rollup/rollup-linux-x64-musl", + "@rollup/rollup-win32-arm64-msvc", + "@rollup/rollup-win32-ia32-msvc", + "@rollup/rollup-win32-x64-msvc", + "@types/estree", + "fsevents" + ] + }, + "source-map-js@1.2.1": { + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "vite@6.1.0": { + "integrity": "sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==", + "dependencies": [ + "esbuild", + "fsevents", + "postcss", + "rollup" + ] } }, - "remote": { - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.0.7a/canvas.ts": "aadfb4b2e9acce34d4a5da3f9027be642c93229bbfc2641cb55301542cbb87bf", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.0.7a/geometry/constants.ts": "4f4cf7bf49ac871d984e9b43896783b0cc8ab0ea60d0fc4c8c582f7e00c3df5a", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.0.7a/geometry/vector.ts": "a08ecff64c5436a28c6451a31c68fc912d25f941aabafb79418fa0a1aeffa9d2", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.0.7a/mod.ts": "766bdedc7e28b89d3cb3e83ee55c612bfaeabe252a14ff47e5e676535e033d88", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/animation/gif.ts": "6f8b77cb55b252bd7c18b04fa7ff4e88b4459cf1158d8daef538b2e471433420", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/animation/sprite.ts": "64adc3843b48a0d74ad96cbf4a4d26426c1e909a03ca935f73d5ec5545080f20", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/canvas.ts": "5af9d684e1144a374f0fbee46c710f9d493d5491e90b17356d910c6ade32bb50", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/collision/aa.ts": "c27a1deee0b2ed02e3a88e4e0b370ca2dfa0f57bf783724fa5c099e9eeabc5c9", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/collision/circular.ts": "962703eacb19cc849f3fb355815edfd71e12d06f8e72f517a7c038ff2d1c1729", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/collision/sat.ts": "f221540a984c908c96b4cc86a8eddacf3d3a5dfa5367ba538c02bcf7f7038247", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/geometry/constants.ts": "4f4cf7bf49ac871d984e9b43896783b0cc8ab0ea60d0fc4c8c582f7e00c3df5a", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/geometry/polygon.ts": "6c7edf576bebd7f24b1358ecba70d561d5905e0185701e12437ba7ccdacc66a9", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/geometry/spline.ts": "3521ea5b57902001fb9a248580bd66f12f563a581eff137f5c67e2edc0305ba0", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/geometry/vector.ts": "0143daf300032d6faf5a073fffa5c298fdcd74ba2d6bcd10a2d96ab54e55bc69", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/init.ts": "0e08fdf4c896f88308e6a6a2fb8842fe3a67a3a47a5ad722ecbce37737f8694d", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/mod.ts": "ffcbd74b612db108d50f5e2e1ba7425c7e6fac87f3fe7fb43c10a5283501513e", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/processing/gif.ts": "e97456fd55806086aa90d9bc46193d355c2f6093f376f4141ca959942193e4dc", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/timing/EaseInOut.ts": "9eba3d8f5bf5e03220c93916cff6f0bbc24ecdf7550f21fd99e3aaf310f625b0", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/timing/Map.ts": "3948648f8bdf8f1ecea83120c41211f5543c7933dbe3e49b367285a98ed50a9a", - "https://git.cyborggrizzly.com/emma/doodler/raw/tag/0.1.1/zoomableCanvas.ts": "395f80ddaef83e2b37a2884d7fffefae80c2bcecb72269405f53899d5dfc9956" - }, "workspace": { "dependencies": [ - "jsr:@bearmetal/doodler@0.0.5-b" + "jsr:@bearmetal/doodler@0.0.5-b", + "npm:@deno/vite-plugin@^1.0.4", + "npm:vite@^6.0.1" ] } } diff --git a/index.html b/index.html index 86872f7..b839708 100644 --- a/index.html +++ b/index.html @@ -1,46 +1,51 @@ - - - - - TRAINS! - - - - - - \ No newline at end of file + + + + + TRAINS! + + + + + + + + diff --git a/sprites/BlueEngine.png b/public/sprites/BlueEngine.png similarity index 100% rename from sprites/BlueEngine.png rename to public/sprites/BlueEngine.png diff --git a/sprites/Engine.png b/public/sprites/Engine.png similarity index 100% rename from sprites/Engine.png rename to public/sprites/Engine.png diff --git a/sprites/EngineSprites.png b/public/sprites/EngineSprites.png similarity index 100% rename from sprites/EngineSprites.png rename to public/sprites/EngineSprites.png diff --git a/sprites/GreenEngine.png b/public/sprites/GreenEngine.png similarity index 100% rename from sprites/GreenEngine.png rename to public/sprites/GreenEngine.png diff --git a/sprites/PurpleEngine.png b/public/sprites/PurpleEngine.png similarity index 100% rename from sprites/PurpleEngine.png rename to public/sprites/PurpleEngine.png diff --git a/sprites/RedEngine.png b/public/sprites/RedEngine.png similarity index 100% rename from sprites/RedEngine.png rename to public/sprites/RedEngine.png diff --git a/public/train icon.png b/public/train icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b4a3826ac3c7465474e3a186d1d529d212edcaea GIT binary patch literal 2813 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 toFollow.radius) { return this.seek(target!); } } - + if (this.debug && this.ctx) { // Draw predicted future position - this.ctx.strokeStyle = 'red'; - this.ctx.fillStyle = 'pink'; + this.ctx.strokeStyle = "red"; + this.ctx.fillStyle = "pink"; this.ctx.beginPath(); - this.ctx.moveTo(this.position.x, this.position.y) + this.ctx.moveTo(this.position.x, this.position.y); this.ctx.lineTo(predictpos.x, predictpos.y); this.ctx.stroke(); - + this.ctx.beginPath(); this.ctx.arc(predictpos.x, predictpos.y, 4, 0, Constants.TWO_PI); this.ctx.fill(); this.ctx.stroke(); - + // Draw normal position this.ctx.beginPath(); this.ctx.arc(normal!.x, normal!.y, 4, 0, Constants.TWO_PI); this.ctx.fill(); this.ctx.stroke(); - + // Draw actual target (red if steering towards it) this.ctx.beginPath(); - this.ctx.moveTo(predictpos.x, predictpos.y) + this.ctx.moveTo(predictpos.x, predictpos.y); this.ctx.lineTo(target!.x, target!.y); this.ctx.stroke(); - + // if (worldRecord > toFollow.radius) fill(255, 0, 0); // noStroke(); - + this.ctx.beginPath(); this.ctx.arc(target!.x, target!.y, 8, 0, Constants.TWO_PI); this.ctx.fill(); this.ctx.stroke(); } - } + } } seek(target: Vector, strength: number = 1) { diff --git a/physics/mover.ts b/src/physics/mover.ts similarity index 77% rename from physics/mover.ts rename to src/physics/mover.ts index 2aeeaf2..143c657 100644 --- a/physics/mover.ts +++ b/src/physics/mover.ts @@ -1,4 +1,5 @@ -import { Vector } from "doodler"; +import { Doodler, Vector } from "@bearmetal/doodler"; +import { getContextItem } from "../lib/context.ts"; export class Mover { position: Vector; @@ -29,25 +30,25 @@ export class Mover { boundingBox: { pos: Vector; size: Vector; - } + }; constructor(); constructor(random: boolean); constructor(pos?: Vector, vel?: Vector, acc?: Vector); constructor(posOrRandom?: Vector | boolean, vel?: Vector, acc?: Vector) { - if (typeof posOrRandom === 'boolean' && posOrRandom) { + if (typeof posOrRandom === "boolean" && posOrRandom) { this.position = Vector.random2D(new Vector()); this.velocity = Vector.random2D(new Vector()); - this.acceleration = new Vector() + this.acceleration = new Vector(); } else { this.position = posOrRandom || new Vector(); this.velocity = vel || new Vector(); - this.acceleration = acc || new Vector() + this.acceleration = acc || new Vector(); } this.boundingBox = { size: new Vector(20, 10), - pos: new Vector(this.position.x - 10, this.position.y - 5) - } + pos: new Vector(this.position.x - 10, this.position.y - 5), + }; this.maxSpeed = 3; this.maxForce = .3; @@ -59,7 +60,7 @@ export class Mover { } init() { - // + // } move() { @@ -81,20 +82,34 @@ export class Mover { } draw() { + const doodler = getContextItem("doodler"); doodler.drawRotated(this.position, this.velocity.heading() || 0, () => { - doodler.fillCenteredRect(this.position, this.boundingBox.size.x, this.boundingBox.size.y, {fillColor: 'white'}) + doodler.fillCenteredRect( + this.position, + this.boundingBox.size.x, + this.boundingBox.size.y, + { fillColor: "white" }, + ); }); if (!this.ctx) return; - this.ctx.fillStyle = 'white' + this.ctx.fillStyle = "white"; this.ctx.save(); this.ctx.translate(this.position.x, this.position.y); this.ctx.rotate(this.velocity.heading() || 0); this.ctx.translate(-this.position.x, -this.position.y); // this.ctx.rotate(Math.PI) // this.ctx.rotate(.5); - this.ctx.translate(-(this.boundingBox.size.x / 2), -(this.boundingBox.size.y / 2)); - this.ctx.fillRect(this.position.x, this.position.y, this.boundingBox.size.x, this.boundingBox.size.y); + this.ctx.translate( + -(this.boundingBox.size.x / 2), + -(this.boundingBox.size.y / 2), + ); + this.ctx.fillRect( + this.position.x, + this.position.y, + this.boundingBox.size.x, + this.boundingBox.size.y, + ); this.ctx.restore(); } @@ -112,4 +127,4 @@ export class Mover { if (point.x < 0) point.x = width; if (point.y < 0) point.y = height; } -} \ No newline at end of file +} diff --git a/state/machine.ts b/src/state/machine.ts similarity index 98% rename from state/machine.ts rename to src/state/machine.ts index 6015050..026df03 100644 --- a/state/machine.ts +++ b/src/state/machine.ts @@ -1,6 +1,6 @@ import { getContext } from "../lib/context.ts"; import { TrackSystem } from "../track/system.ts"; -import { Train } from "../train.old.ts"; +import { Train } from "../train/train.ts"; export class StateMachine { private _states: Map> = new Map(); diff --git a/state/states/EditTrackState.ts b/src/state/states/EditTrackState.ts similarity index 100% rename from state/states/EditTrackState.ts rename to src/state/states/EditTrackState.ts diff --git a/state/states/EditTrainState.ts b/src/state/states/EditTrainState.ts similarity index 100% rename from state/states/EditTrainState.ts rename to src/state/states/EditTrainState.ts diff --git a/state/states/LoadState.ts b/src/state/states/LoadState.ts similarity index 97% rename from state/states/LoadState.ts rename to src/state/states/LoadState.ts index 278758c..8837ff5 100644 --- a/state/states/LoadState.ts +++ b/src/state/states/LoadState.ts @@ -57,7 +57,7 @@ export class LoadState extends State { const track = TrackSystem.deserialize( JSON.parse(localStorage.getItem("track") || "[]"), ); - return track; + return track ?? new TrackSystem([new StraightTrack()]); } private loadTrains() { diff --git a/state/states/PausedState.ts b/src/state/states/PausedState.ts similarity index 100% rename from state/states/PausedState.ts rename to src/state/states/PausedState.ts diff --git a/state/states/RunningState.ts b/src/state/states/RunningState.ts similarity index 97% rename from state/states/RunningState.ts rename to src/state/states/RunningState.ts index 7574b13..1bf14c0 100644 --- a/state/states/RunningState.ts +++ b/src/state/states/RunningState.ts @@ -25,13 +25,13 @@ export class RunningState extends State { // Update trains // Update world // Handle input - // Draw (maybe via a layer system that syncs with doodler) // Monitor world events for (const train of ctx.trains) { train.move(dt); } } override start(): void { + console.log("Starting running state"); const doodler = getContextItem("doodler"); this.layers.push( doodler.createLayer(() => { diff --git a/state/states/index.ts b/src/state/states/index.ts similarity index 95% rename from state/states/index.ts rename to src/state/states/index.ts index 9ea8cab..a7602a4 100644 --- a/state/states/index.ts +++ b/src/state/states/index.ts @@ -1,5 +1,4 @@ import { StateMachine } from "../machine.ts"; -import { Track } from "../../track.ts"; import { EditTrainState } from "./EditTrainState.ts"; import { EditTrackState } from "./EditTrackState.ts"; import { PausedState } from "./PausedState.ts"; diff --git a/test/bench.ts b/src/test/bench.ts similarity index 100% rename from test/bench.ts rename to src/test/bench.ts diff --git a/test/contextBench.test.ts b/src/test/contextBench.test.ts similarity index 100% rename from test/contextBench.test.ts rename to src/test/contextBench.test.ts diff --git a/test/trackSystemBench.test.ts b/src/test/trackSystemBench.test.ts similarity index 100% rename from test/trackSystemBench.test.ts rename to src/test/trackSystemBench.test.ts diff --git a/track/shapes.ts b/src/track/shapes.ts similarity index 100% rename from track/shapes.ts rename to src/track/shapes.ts diff --git a/track/system.ts b/src/track/system.ts similarity index 99% rename from track/system.ts rename to src/track/system.ts index a13da92..5829e9a 100644 --- a/track/system.ts +++ b/src/track/system.ts @@ -122,7 +122,7 @@ export class TrackSystem { } static deserialize(data: SerializedTrackSegment[]) { - if (data.length === 0) return undefined; + if (data.length === 0) return new TrackSystem([]); const track = new TrackSystem([]); const neighborMap = new Map(); diff --git a/train/cars.ts b/src/train/cars.ts similarity index 94% rename from train/cars.ts rename to src/train/cars.ts index 158949f..f079d12 100644 --- a/train/cars.ts +++ b/src/train/cars.ts @@ -1,4 +1,4 @@ -import { Vector } from "https://jsr.io/@bearmetal/doodler/0.0.4/geometry/vector.ts"; +import { Vector } from "@bearmetal/doodler"; import { TrainCar } from "./train.ts"; import { ResourceManager } from "../lib/resources.ts"; import { getContextItem } from "../lib/context.ts"; diff --git a/train/engines.ts b/src/train/engines.ts similarity index 100% rename from train/engines.ts rename to src/train/engines.ts diff --git a/train/newTrain.ts b/src/train/newTrain.ts similarity index 100% rename from train/newTrain.ts rename to src/train/newTrain.ts diff --git a/train/train.ts b/src/train/train.ts similarity index 87% rename from train/train.ts rename to src/train/train.ts index c78b08c..133414b 100644 --- a/train/train.ts +++ b/src/train/train.ts @@ -1,7 +1,7 @@ import { ComplexPath, PathSegment } from "../math/path.ts"; import { Follower } from "../physics/follower.ts"; import { Mover } from "../physics/mover.ts"; -import { getContextItem } from "../lib/context.ts"; +import { getContext, getContextItem } from "../lib/context.ts"; import { Doodler, Vector } from "@bearmetal/doodler"; import { Spline, TrackSegment } from "../track/system.ts"; import { ResourceManager } from "../lib/resources.ts"; @@ -96,6 +96,17 @@ export class Train { // } draw() { + const ctx = getContext(); + if (ctx.debug) { + const doodler = getContextItem("doodler"); + // doodler.drawLine(this.path.points, { + // color: "red", + // weight: 3, + // }); + for (const p of this.path.evenPoints) { + doodler.drawCircle(p, 2, { color: "red", weight: .5 }); + } + } for (const car of this.cars) { car.draw(); } @@ -112,7 +123,7 @@ export class TrainCar { imgHeight: number; sprite?: ISprite; - points?: [Vector, Vector]; + points?: [Vector, Vector, ...Vector[]]; length: number; constructor( @@ -154,6 +165,14 @@ export class TrainCar { origin.copy().sub(this.imgWidth / 2, this.imgHeight / 2), ); }); + + const ctx = getContext(); + if (ctx.debug) { + doodler.drawLine(this.points, { + color: "blue", + weight: 3, + }); + } } } diff --git a/types.ts b/src/types.ts similarity index 100% rename from types.ts rename to src/types.ts diff --git a/ui/button.ts b/src/ui/button.ts similarity index 100% rename from ui/button.ts rename to src/ui/button.ts diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..bf20a8a --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import deno from '@deno/vite-plugin' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [deno()], +})