diff --git a/.github/workflows/itch.yml b/.github/workflows/itch.yml index a8092fc..7b9a067 100644 --- a/.github/workflows/itch.yml +++ b/.github/workflows/itch.yml @@ -31,17 +31,21 @@ jobs: - name: Rust Cache # cache the rust build artefacts uses: Swatinem/rust-cache@v2 - name: Download and install Trunk binary + working-directory: crates/rpack run: wget -qO- https://github.com/thedodd/trunk/releases/latest/download/trunk-x86_64-unknown-linux-gnu.tar.gz | tar -xzf- - name: Update file + working-directory: crates/rpack run: sed -i '15d' index.html - name: Build + working-directory: crates/rpack run: ./trunk build --release - name: Update result file + working-directory: crates/rpack run: sed -i 's|/rpack|./rpack|g' dist/index.html - name: Itch.io - Publish uses: KikimoraGames/itch-publish@v0.0.3 with: - gameData: ./dist + gameData: ./crates/rpack/dist itchUsername: mevlyshkin itchGameId: rpack buildChannel: wasm diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index d1176b0..2ac5f19 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -31,8 +31,10 @@ jobs: - name: Rust Cache # cache the rust build artefacts uses: Swatinem/rust-cache@v2 - name: Download and install Trunk binary + working-directory: crates/rpack run: wget -qO- https://github.com/thedodd/trunk/releases/latest/download/trunk-x86_64-unknown-linux-gnu.tar.gz | tar -xzf- - name: Build # build + working-directory: crates/rpack # "${GITHUB_REPOSITORY#*/}" evaluates into the name of the repository # using --public-url something will allow trunk to modify all the href paths like from favicon.ico to repo_name/favicon.ico . # this is necessary for github pages where the site is deployed to username.github.io/repo_name and all files must be requested @@ -42,7 +44,7 @@ jobs: - name: Deploy uses: JamesIves/github-pages-deploy-action@v4 with: - folder: dist + folder: crates/rpack/dist # this option will not maintain any history of your previous pages deployment # set to false if you want all page build to be committed to your gh-pages branch history single-commit: true diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index f54d231..0c095ae 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -101,6 +101,8 @@ jobs: target: wasm32-unknown-unknown override: true - name: Download and install Trunk binary + working-directory: crates/rpack run: wget -qO- https://github.com/thedodd/trunk/releases/latest/download/trunk-x86_64-unknown-linux-gnu.tar.gz | tar -xzf- - name: Build + working-directory: crates/rpack run: ./trunk build diff --git a/.gitignore b/.gitignore index 3567afd..e42b161 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /target +/crates/*/target +/crates/rpack/dist /dist skyline-packer-output.png result.png diff --git a/Cargo.lock b/Cargo.lock index 53391e0..9d6a945 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,7 +38,7 @@ dependencies = [ "accesskit_consumer", "atspi-common", "serde", - "thiserror", + "thiserror 1.0.69", "zvariant 4.2.0", ] @@ -49,7 +49,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" dependencies = [ "accesskit", - "hashbrown", + "hashbrown 0.15.2", "immutable-chunkmap", ] @@ -61,7 +61,7 @@ checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" dependencies = [ "accesskit", "accesskit_consumer", - "hashbrown", + "hashbrown 0.15.2", "objc2", "objc2-app-kit", "objc2-foundation", @@ -93,7 +93,7 @@ checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" dependencies = [ "accesskit", "accesskit_consumer", - "hashbrown", + "hashbrown 0.15.2", "paste", "static_assertions", "windows", @@ -127,6 +127,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "const-random", + "getrandom", "once_cell", "serde", "version_check", @@ -142,6 +144,18 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android-activity" version = "0.6.0" @@ -158,9 +172,9 @@ dependencies = [ "log", "ndk", "ndk-context", - "ndk-sys", + "ndk-sys 0.6.0+11769913", "num_enum", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -169,6 +183,21 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anstream" version = "0.6.18" @@ -218,6 +247,18 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "anyhow" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" + +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" + [[package]] name = "arboard" version = "3.4.1" @@ -233,6 +274,17 @@ dependencies = [ "x11rb", ] +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "arrayref" version = "0.3.9" @@ -245,6 +297,15 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + [[package]] name = "ashpd" version = "0.10.2" @@ -267,13 +328,34 @@ dependencies = [ "zbus 5.2.0", ] +[[package]] +name = "assert_type_match" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-broadcast" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener", + "event-listener 5.3.1", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -340,7 +422,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.3.1", "event-listener-strategy", "pin-project-lite", ] @@ -369,7 +451,7 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener", + "event-listener 5.3.1", "futures-lite", "rustix", "tracing", @@ -427,6 +509,12 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atomicow" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "467163b50876d3a4a44da5f4dbd417537e522fc059ede8d518d57941cfb3d745" + [[package]] name = "atspi" version = "0.22.0" @@ -484,6 +572,29 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" +dependencies = [ + "arrayvec", +] + [[package]] name = "base64" version = "0.21.7" @@ -496,6 +607,730 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bevy" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2a21c9f3306676077a88700bb8f354be779cf9caba9c21e94da9e696751af4" +dependencies = [ + "bevy_internal", +] + +[[package]] +name = "bevy_a11y" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f96642402d2cd7c8e58c5994bbd14a2e44ca72dd7e460a2edad82aa3bf0348f9" +dependencies = [ + "accesskit", + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_reflect", +] + +[[package]] +name = "bevy_app" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "454a8cfd134864dcdcba6ee56fb958531b981021bba6bb2037c9e3df6046603c" +dependencies = [ + "bevy_derive", + "bevy_ecs", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "console_error_panic_hook", + "ctrlc", + "derive_more", + "downcast-rs", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "bevy_asset" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d762dd4422fb6219fd904e514a4a5d1d451711a0a8e1d6495dea15a545f04f3" +dependencies = [ + "async-broadcast 0.5.1", + "async-fs", + "async-lock", + "atomicow", + "bevy_app", + "bevy_asset_macros", + "bevy_ecs", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bevy_window", + "bitflags 2.6.0", + "blake3", + "crossbeam-channel", + "derive_more", + "disqualified", + "downcast-rs", + "either", + "futures-io", + "futures-lite", + "js-sys", + "parking_lot", + "ron", + "serde", + "stackfuture", + "uuid", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "bevy_asset_macros" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8db6957e3f9649d415ee613901cf487898d0339455aa9c3a2525fc37facee920" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_color" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00aa2966c7ca0c7dd39f5ba8f3b1eaa5c2005a93ffdefb7a4090150d8327678" +dependencies = [ + "bevy_math", + "bevy_reflect", + "bytemuck", + "derive_more", + "encase", + "serde", + "wgpu-types", +] + +[[package]] +name = "bevy_core" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ff28118f5ae3193f7f6cab30d4fd4246ba1802776910ab256dc7c20e8696381" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "uuid", +] + +[[package]] +name = "bevy_core_pipeline" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0c0eea548a55fd04acf01d351bd16da4d1198037cb9c7b98dea6519f5d7dade" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.6.0", + "derive_more", + "nonmax", + "radsort", + "serde", + "smallvec", +] + +[[package]] +name = "bevy_derive" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b962df2a1bef274ae76ec75279eb6f8ef0ffd85b5e4c43433f5d08ba57b3d071" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn", +] + +[[package]] +name = "bevy_diagnostic" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21fe41b22fdf47bf11f0a3ca3e61975b003e86fa44d87e070f2dc7e752dd99f5" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_tasks", + "bevy_time", + "bevy_utils", + "const-fnv1a-hash", +] + +[[package]] +name = "bevy_ecs" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b747210d7db09dfacc237707d4fd31c8b43d7744cd5e5829e2c4ca86b9e47baf" +dependencies = [ + "bevy_ecs_macros", + "bevy_ptr", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bitflags 2.6.0", + "concurrent-queue", + "derive_more", + "disqualified", + "fixedbitset 0.5.7", + "nonmax", + "petgraph", + "serde", + "smallvec", +] + +[[package]] +name = "bevy_ecs_macros" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d36ba5874ee278d20f17b8934d2969f8fbab90f3ea3fcf8d3583814b3661ada" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_encase_derive" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46db3d4ebc2ab23045a7d32fa1afb4be78894ec3fbe2f52b28f6cd6e4011e400" +dependencies = [ + "bevy_macro_utils", + "encase_derive_impl", +] + +[[package]] +name = "bevy_gizmos" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca821905afffe1f3aaf33b496903a24a0c980e4c83fa7523fb41eac16892a57a" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_gizmos_macros", + "bevy_image", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bytemuck", +] + +[[package]] +name = "bevy_gizmos_macros" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19843a638c93364950ca54a879832f325be7fa9b89f226fced3b4105594afb70" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_hierarchy" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9aab2cd1684d30f2eedf953b6377a6416fd6b482f8145b6c05f4684bd60c3e" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", + "disqualified", + "smallvec", +] + +[[package]] +name = "bevy_image" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c5942a7d681b81aa9723bb1d918135c2f88e7871331f5676119c86c01984759" +dependencies = [ + "bevy_asset", + "bevy_color", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "bitflags 2.6.0", + "bytemuck", + "derive_more", + "futures-lite", + "image", + "serde", + "wgpu", +] + +[[package]] +name = "bevy_input" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9bbf39c1d2d33350e03354a67bebee5c21973c5203b1456a9a4b90a5e6f8e75" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "derive_more", + "smol_str", +] + +[[package]] +name = "bevy_internal" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd7fc4db9a1793ee71f79abb15e7a8fcfe4e2081e5f18ed91b802bf6cf30e088" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_core", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_gizmos", + "bevy_hierarchy", + "bevy_image", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_picking", + "bevy_ptr", + "bevy_reflect", + "bevy_render", + "bevy_scene", + "bevy_sprite", + "bevy_tasks", + "bevy_time", + "bevy_transform", + "bevy_utils", +] + +[[package]] +name = "bevy_log" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "774238dcf70a0ef4d82aa2860b24b1cffdd4633f3694d3bcbfbb05c4f17ae4fe" +dependencies = [ + "android_log-sys", + "bevy_app", + "bevy_ecs", + "bevy_utils", + "tracing-log", + "tracing-oslog", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "bevy_macro_utils" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bdb3a681c24abace65bf18ed467ad8befbedb42468b32e459811bfdb01e506c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "toml_edit", +] + +[[package]] +name = "bevy_math" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edec18d90e6bab27b5c6131ee03172ece75b7edd0abe4e482a26d6db906ec357" +dependencies = [ + "bevy_reflect", + "derive_more", + "glam", + "itertools 0.13.0", + "rand", + "rand_distr", + "serde", + "smallvec", +] + +[[package]] +name = "bevy_mesh" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183abae7c6695a80d7408c860bd737410cd66d2a9f910dafc914485da06e43dc" +dependencies = [ + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_mikktspace", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "bitflags 2.6.0", + "bytemuck", + "derive_more", + "hexasphere", + "serde", + "wgpu", +] + +[[package]] +name = "bevy_mikktspace" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b53f0cf879a0682280937f515ecf00ab2140f7224881d6a621f40093a36a2ef6" +dependencies = [ + "glam", +] + +[[package]] +name = "bevy_picking" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "125e0c7327ec155c566c044c6eefd1a02e904134fa5dc0ba54665e06a35297b0" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_input", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "uuid", +] + +[[package]] +name = "bevy_ptr" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa65df6a190b7dfc84d79f09cf02d47ae046fa86a613e202c31559e06d8d3710" + +[[package]] +name = "bevy_reflect" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab3264acc3b6f48bc23fbd09fdfea6e5d9b7bfec142e4f3333f532acf195bca" +dependencies = [ + "assert_type_match", + "bevy_ptr", + "bevy_reflect_derive", + "bevy_utils", + "derive_more", + "disqualified", + "downcast-rs", + "erased-serde", + "glam", + "serde", + "smallvec", + "smol_str", + "uuid", +] + +[[package]] +name = "bevy_reflect_derive" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f83876a322130ab38a47d5dcf75258944bf76b3387d1acdb3750920fda63e2" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", + "uuid", +] + +[[package]] +name = "bevy_render" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b14d77d8ff589743237c98502c0e47fd31059cf348ab86a265c4f90bb5e2a22" +dependencies = [ + "async-channel", + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_core", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_encase_derive", + "bevy_hierarchy", + "bevy_image", + "bevy_math", + "bevy_mesh", + "bevy_reflect", + "bevy_render_macros", + "bevy_tasks", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bytemuck", + "codespan-reporting", + "derive_more", + "downcast-rs", + "encase", + "futures-lite", + "image", + "js-sys", + "naga", + "naga_oil", + "nonmax", + "offset-allocator", + "send_wrapper", + "serde", + "smallvec", + "wasm-bindgen", + "web-sys", + "wgpu", +] + +[[package]] +name = "bevy_render_macros" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "285769c193b832d67c5742a716c6063db573573d5df5ce0c41aa7584ef0e348e" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_rpack" +version = "0.1.0" +dependencies = [ + "bevy", + "serde", + "serde_json", + "thiserror 2.0.9", +] + +[[package]] +name = "bevy_scene" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd00a08d01a190a826a5f6ad0fcb3dbf7bd1bd4f64ebe6108c38384691a21111" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "derive_more", + "serde", + "uuid", +] + +[[package]] +name = "bevy_sprite" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c7d22da88e562fb2ae8fe7f8cc749d3024caa4dcb57a777d070ef9141577aa" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_picking", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.6.0", + "bytemuck", + "derive_more", + "fixedbitset 0.5.7", + "guillotiere", + "nonmax", + "radsort", + "rectangle-pack", +] + +[[package]] +name = "bevy_tasks" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c28f2db2619203aa82342dbbe77e49aeea4f933212c0b7a1f285e94c4008e5b" +dependencies = [ + "async-executor", + "futures-channel", + "futures-lite", + "pin-project", + "wasm-bindgen-futures", +] + +[[package]] +name = "bevy_time" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb3108ed1ef864bc40bc859ba4c9c3844213c7be3674f982203cf5d87c656848" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", + "crossbeam-channel", +] + +[[package]] +name = "bevy_transform" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "056fabcedbf0503417af69447d47a983e18c7cfb5e6b6728636be3ec285cbcfa" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_hierarchy", + "bevy_math", + "bevy_reflect", + "derive_more", +] + +[[package]] +name = "bevy_utils" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f01088c048960ea50ee847c3f668942ecf49ed26be12a1585a5e59b6a941d9a" +dependencies = [ + "ahash", + "bevy_utils_proc_macros", + "getrandom", + "hashbrown 0.14.5", + "thread_local", + "tracing", + "web-time", +] + +[[package]] +name = "bevy_utils_proc_macros" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0c3244d543cc964545b7aa074f6fb18a915a7121cf3de5d7ed37a4aae8662d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_window" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36139955777cc9e7a40a97833ff3a95b7401ce525a3dbac05fc52557968b31a7" +dependencies = [ + "android-activity", + "bevy_a11y", + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "raw-window-handle", + "smol_str", +] + +[[package]] +name = "bindgen" +version = "0.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec 0.6.3", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec 0.8.0", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bit_field" version = "0.10.2" @@ -517,6 +1352,31 @@ dependencies = [ "serde", ] +[[package]] +name = "bitstream-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" + +[[package]] +name = "blake3" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -548,6 +1408,12 @@ dependencies = [ "piper", ] +[[package]] +name = "built" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" + [[package]] name = "bumpalo" version = "3.16.0" @@ -603,7 +1469,7 @@ dependencies = [ "polling", "rustix", "slab", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -635,12 +1501,37 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "cfg_aliases" version = "0.2.1" @@ -656,6 +1547,57 @@ dependencies = [ "libc", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "4.5.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + [[package]] name = "clipboard-win" version = "5.4.0" @@ -665,6 +1607,16 @@ dependencies = [ "error-code", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -696,6 +1648,69 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-fnv1a-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "const_panic" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53857514f72ee4a2b583de67401e3ff63a5472ca4acf289d09a9ea7636dfec17" + +[[package]] +name = "const_soft_float" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "constgebra" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1aaf9b65849a68662ac6c0810c8893a765c960b907dd7cfab9c4a50bf764fbc" +dependencies = [ + "const_soft_float", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -764,6 +1779,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -805,18 +1829,55 @@ dependencies = [ "typenum", ] +[[package]] +name = "ctrlc" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" +dependencies = [ + "nix", + "windows-sys 0.59.0", +] + [[package]] name = "cursor-icon" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + [[package]] name = "data-url" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + [[package]] name = "digest" version = "0.10.7" @@ -844,6 +1905,12 @@ dependencies = [ "syn", ] +[[package]] +name = "disqualified" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd" + [[package]] name = "dlib" version = "0.5.2" @@ -897,11 +1964,11 @@ dependencies = [ "egui", "egui-winit", "egui_glow", - "glow", + "glow 0.16.0", "glutin", "glutin-winit", "home", - "image 0.25.5", + "image", "js-sys", "log", "objc2", @@ -970,7 +2037,7 @@ dependencies = [ "egui", "ehttp", "enum-map", - "image 0.25.5", + "image", "log", "mime_guess2", "profiling", @@ -986,7 +2053,7 @@ dependencies = [ "ahash", "bytemuck", "egui", - "glow", + "glow 0.16.0", "log", "memoffset", "profiling", @@ -1034,6 +2101,38 @@ dependencies = [ "serde", ] +[[package]] +name = "encase" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0a05902cf601ed11d564128448097b98ebe3c6574bd7b6a653a3d56d54aa020" +dependencies = [ + "const_panic", + "encase_derive", + "glam", + "thiserror 1.0.69", +] + +[[package]] +name = "encase_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "181d475b694e2dd56ae919ce7699d344d1fd259292d590c723a50d1189a2ea85" +dependencies = [ + "encase_derive_impl", +] + +[[package]] +name = "encase_derive_impl" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f97b51c5cc57ef7c5f7a0c57c250251c49ee4c28f819f87ac32f4aceabc36792" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "endi" version = "1.1.0" @@ -1147,6 +2246,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + [[package]] name = "errno" version = "0.3.10" @@ -1163,6 +2272,21 @@ version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "event-listener" version = "5.3.1" @@ -1180,7 +2304,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener", + "event-listener 5.3.1", "pin-project-lite", ] @@ -1214,6 +2338,18 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "flate2" version = "1.0.35" @@ -1373,8 +2509,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -1398,6 +2536,35 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "glam" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" +dependencies = [ + "bytemuck", + "rand", + "serde", +] + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "glow" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "glow" version = "0.16.0" @@ -1417,7 +2584,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec69412a0bf07ea7607e638b415447857a808846c2b685a43c8aa18bc6d5e499" dependencies = [ "bitflags 2.6.0", - "cfg_aliases", + "cfg_aliases 0.2.1", "cgl", "core-foundation 0.9.4", "dispatch", @@ -1438,7 +2605,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" dependencies = [ - "cfg_aliases", + "cfg_aliases 0.2.1", "glutin", "raw-window-handle", "winit", @@ -1463,6 +2630,67 @@ dependencies = [ "gl_generator", ] +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.6.0", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "gpu-allocator" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +dependencies = [ + "log", + "presser", + "thiserror 1.0.69", + "windows", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" +dependencies = [ + "bitflags 2.6.0", + "gpu-descriptor-types", + "hashbrown 0.15.2", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "guillotiere" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" +dependencies = [ + "euclid", + "svg_fmt", +] + [[package]] name = "half" version = "2.4.1" @@ -1473,6 +2701,17 @@ dependencies = [ "crunchy", ] +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", + "serde", +] + [[package]] name = "hashbrown" version = "0.15.2" @@ -1482,6 +2721,12 @@ dependencies = [ "foldhash", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.4.0" @@ -1494,6 +2739,23 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hexasphere" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c9e718d32b6e6b2b32354e1b0367025efdd0b11d6a740b905ddf5db1074679" +dependencies = [ + "constgebra", + "glam", + "tinyvec", +] + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + [[package]] name = "home" version = "0.5.11" @@ -1648,24 +2910,6 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "image" -version = "0.24.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "exr", - "gif", - "jpeg-decoder", - "num-traits", - "png", - "qoi", - "tiff", -] - [[package]] name = "image" version = "0.25.5" @@ -1675,9 +2919,28 @@ dependencies = [ "bytemuck", "byteorder-lite", "color_quant", + "exr", "gif", + "image-webp", "num-traits", "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f" +dependencies = [ + "byteorder-lite", + "quick-error", ] [[package]] @@ -1686,6 +2949,12 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" +[[package]] +name = "imgref" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" + [[package]] name = "immutable-chunkmap" version = "2.0.6" @@ -1702,7 +2971,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.2", +] + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1711,6 +2991,24 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.14" @@ -1728,7 +3026,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] @@ -1753,9 +3051,6 @@ name = "jpeg-decoder" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" -dependencies = [ - "rayon", -] [[package]] name = "js-sys" @@ -1767,6 +3062,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + [[package]] name = "khronos_api" version = "3.1.0" @@ -1782,6 +3088,12 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "lebe" version = "0.5.2" @@ -1794,6 +3106,16 @@ version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +[[package]] +name = "libfuzzer-sys" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa" +dependencies = [ + "arbitrary", + "cc", +] + [[package]] name = "libloading" version = "0.8.6" @@ -1804,6 +3126,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + [[package]] name = "libredox" version = "0.1.3" @@ -1849,6 +3177,43 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + [[package]] name = "memchr" version = "2.7.4" @@ -1873,6 +3238,21 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metal" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +dependencies = [ + "bitflags 2.6.0", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + [[package]] name = "mime" version = "0.3.17" @@ -1889,6 +3269,12 @@ dependencies = [ "unicase", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.2" @@ -1899,6 +3285,48 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "naga" +version = "23.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "364f94bc34f61332abebe8cad6f6cd82a5b65cff22c828d05d0968911462ca4f" +dependencies = [ + "arrayvec", + "bit-set 0.8.0", + "bitflags 2.6.0", + "cfg_aliases 0.1.1", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "pp-rs", + "rustc-hash", + "spirv", + "termcolor", + "thiserror 1.0.69", + "unicode-xid", +] + +[[package]] +name = "naga_oil" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ea1f080bb359927cd5404d0af1e5e6758f4f2d82ecfbebb0a0c434764e40f1" +dependencies = [ + "bit-set 0.5.3", + "codespan-reporting", + "data-encoding", + "indexmap", + "naga", + "once_cell", + "regex", + "regex-syntax 0.8.5", + "rustc-hash", + "thiserror 1.0.69", + "tracing", + "unicode-ident", +] + [[package]] name = "ndk" version = "0.9.0" @@ -1908,10 +3336,10 @@ dependencies = [ "bitflags 2.6.0", "jni-sys", "log", - "ndk-sys", + "ndk-sys 0.6.0+11769913", "num_enum", "raw-window-handle", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1920,6 +3348,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + [[package]] name = "ndk-sys" version = "0.6.0+11769913" @@ -1929,6 +3366,12 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nix" version = "0.29.0" @@ -1937,7 +3380,7 @@ checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.6.0", "cfg-if", - "cfg_aliases", + "cfg_aliases 0.2.1", "libc", "memoffset", ] @@ -1948,6 +3391,79 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonmax" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" + +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1955,6 +3471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -1978,6 +3495,15 @@ dependencies = [ "syn", ] +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + [[package]] name = "objc-sys" version = "0.3.5" @@ -2181,6 +3707,16 @@ dependencies = [ "objc2-foundation", ] +[[package]] +name = "offset-allocator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2" +dependencies = [ + "log", + "nonmax", +] + [[package]] name = "once_cell" version = "1.20.2" @@ -2206,6 +3742,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "owned_ttf_parser" version = "0.25.0" @@ -2256,6 +3798,16 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset 0.4.2", + "indexmap", +] + [[package]] name = "pico-args" version = "0.5.0" @@ -2345,6 +3897,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" +[[package]] +name = "pp-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee" +dependencies = [ + "unicode-xid", +] + [[package]] name = "ppv-lite86" version = "0.2.20" @@ -2354,6 +3915,22 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "prettyplease" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "483f8c21f64f3ea09fe0f30f5d48c3e8eefe5dac9129f0075f76593b4c1da705" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro-crate" version = "3.2.0" @@ -2377,6 +3954,19 @@ name = "profiling" version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" +dependencies = [ + "quote", + "syn", +] [[package]] name = "qoi" @@ -2387,6 +3977,12 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.30.0" @@ -2415,6 +4011,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radsort" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22" + [[package]] name = "rand" version = "0.8.5" @@ -2445,6 +4047,72 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "range-alloc" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror 1.0.69", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -2477,6 +4145,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" +[[package]] +name = "rectangle-pack" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" + [[package]] name = "redox_syscall" version = "0.4.1" @@ -2503,8 +4177,17 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -2515,15 +4198,27 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.5", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + [[package]] name = "resvg" version = "0.37.0" @@ -2613,10 +4308,11 @@ dependencies = [ "egui_extras", "egui_json_tree", "env_logger", - "image 0.24.9", + "image", "js-sys", "log", "rfd", + "rpack_cli", "serde", "serde_json", "texture_packer", @@ -2625,6 +4321,25 @@ dependencies = [ "web-sys", ] +[[package]] +name = "rpack_cli" +version = "0.0.0" +dependencies = [ + "bevy_rpack", + "clap", + "glob", + "image", + "serde", + "serde_json", + "texture_packer", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustix" version = "0.38.42" @@ -2697,6 +4412,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" version = "1.0.217" @@ -2740,6 +4461,15 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + [[package]] name = "sha1" version = "0.10.6" @@ -2751,6 +4481,15 @@ dependencies = [ "digest", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.3.0" @@ -2772,6 +4511,15 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + [[package]] name = "simplecss" version = "0.2.2" @@ -2825,7 +4573,7 @@ dependencies = [ "log", "memmap2", "rustix", - "thiserror", + "thiserror 1.0.69", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -2862,12 +4610,27 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "stackfuture" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2" + [[package]] name = "static_assertions" version = "1.1.0" @@ -2883,12 +4646,24 @@ dependencies = [ "float-cmp", ] +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "svg_fmt" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce5d813d71d82c4cbc1742135004e4a79fd870214c155443451c139c9470a0aa" + [[package]] name = "svgtypes" version = "0.13.0" @@ -2921,6 +4696,25 @@ dependencies = [ "syn", ] +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + [[package]] name = "tempfile" version = "3.15.0" @@ -2936,12 +4730,21 @@ dependencies = [ ] [[package]] -name = "texture_packer" -version = "0.27.0" +name = "termcolor" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c482ad3cce686643fd76c82255947382fbf8aa859e9f09a653811ebb86dadcb9" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ - "image 0.24.9", + "winapi-util", +] + +[[package]] +name = "texture_packer" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd18766b2465d3a40ca28d9f62446ae872624ba0fdc060b24f11ee6b7e70d59" +dependencies = [ + "image", ] [[package]] @@ -2950,7 +4753,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +dependencies = [ + "thiserror-impl 2.0.9", ] [[package]] @@ -2964,6 +4776,27 @@ dependencies = [ "syn", ] +[[package]] +name = "thiserror-impl" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "tiff" version = "0.9.1" @@ -2975,6 +4808,15 @@ dependencies = [ "weezl", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tiny-skia" version = "0.11.4" @@ -3011,11 +4853,41 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + [[package]] name = "toml_datetime" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" @@ -3024,6 +4896,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -3057,6 +4931,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-oslog" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528bdd1f0e27b5dd9a4ededf154e824b0532731e4af73bb531de46276e0aab1e" +dependencies = [ + "bindgen", + "cc", + "cfg-if", + "once_cell", + "parking_lot", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", ] [[package]] @@ -3065,6 +4995,12 @@ version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + [[package]] name = "typenum" version = "1.17.0" @@ -3100,6 +5036,18 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "untrusted" version = "0.9.0" @@ -3202,6 +5150,39 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + [[package]] name = "version_check" version = "0.9.5" @@ -3440,6 +5421,112 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +[[package]] +name = "wgpu" +version = "23.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80f70000db37c469ea9d67defdc13024ddf9a5f1b89cb2941b812ad7cde1735a" +dependencies = [ + "arrayvec", + "cfg_aliases 0.1.1", + "document-features", + "js-sys", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "23.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d63c3c478de8e7e01786479919c8769f62a22eec16788d8c2ac77ce2c132778a" +dependencies = [ + "arrayvec", + "bit-vec 0.8.0", + "bitflags 2.6.0", + "cfg_aliases 0.1.1", + "document-features", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror 1.0.69", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "23.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89364b8a0b211adc7b16aeaf1bd5ad4a919c1154b44c9ce27838213ba05fd821" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set 0.8.0", + "bitflags 2.6.0", + "block", + "bytemuck", + "cfg_aliases 0.1.1", + "core-graphics-types", + "glow 0.14.2", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal", + "naga", + "ndk-sys 0.5.0+25.2.9519653", + "objc", + "once_cell", + "parking_lot", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror 1.0.69", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows", + "windows-core", +] + +[[package]] +name = "wgpu-types" +version = "23.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "610f6ff27778148c31093f3b03abc4840f9636d58d597ca2f5977433acfe0068" +dependencies = [ + "bitflags 2.6.0", + "js-sys", + "web-sys", +] + [[package]] name = "winapi" version = "0.3.9" @@ -3751,7 +5838,7 @@ dependencies = [ "bitflags 2.6.0", "block2", "calloop", - "cfg_aliases", + "cfg_aliases 0.2.1", "concurrent-queue", "core-foundation 0.9.4", "core-graphics", @@ -3895,7 +5982,7 @@ version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" dependencies = [ - "async-broadcast", + "async-broadcast 0.7.2", "async-executor", "async-fs", "async-io", @@ -3906,7 +5993,7 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener", + "event-listener 5.3.1", "futures-core", "futures-sink", "futures-util", @@ -3933,7 +6020,7 @@ version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb67eadba43784b6fb14857eba0d8fc518686d3ee537066eb6086dc318e2c8a1" dependencies = [ - "async-broadcast", + "async-broadcast 0.7.2", "async-executor", "async-fs", "async-io", @@ -3944,7 +6031,7 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener", + "event-listener 5.3.1", "futures-core", "futures-util", "hex", @@ -4121,6 +6208,12 @@ dependencies = [ "syn", ] +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + [[package]] name = "zune-inflate" version = "0.2.54" @@ -4130,6 +6223,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "zune-jpeg" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" +dependencies = [ + "zune-core", +] + [[package]] name = "zvariant" version = "4.2.0" diff --git a/Cargo.toml b/Cargo.toml index 6ee5b62..ad77eb5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,64 +1,18 @@ -[package] -name = "rpack" -version = "0.1.0" -authors = ["Piotr Siuszko "] -edition = "2021" -rust-version = "1.81" -repository = "https://github.com/Leinnan/rpack.git" -homepage = "https://github.com/Leinnan/rpack" - - -[dependencies] -egui = "0.30" -eframe = { version = "0.30", default-features = false, features = [ - "accesskit", # Make egui comptaible with screen readers. NOTE: adds a lot of dependencies. - "default_fonts", # Embed the default egui fonts. - "glow", # Use the glow rendering backend. Alternative: "wgpu". - "persistence", # Enable restoring app state when restarting the app. -] } -log = "0.4" -serde_json = "1" -egui_json_tree = "0.10" - -# You only need serde if you want app persistence: -serde = { version = "1", features = ["derive"] } -texture_packer = { version = "0.27.0", features = ["common"] } -image = { version = "0.24", features = ["jpeg", "png"] } -egui_extras = { version = "*", features = ["all_loaders"] } -rfd = { version = "0.15", features = [] } -wasm-bindgen-futures = "0.4" - -# native: -[target.'cfg(not(target_arch = "wasm32"))'.dependencies] -env_logger = "0.11" - -# web: -[target.'cfg(target_arch = "wasm32")'.dependencies] -wasm-bindgen-futures = "0.4" -wasm-bindgen = "0.2" -web-sys = { version = "0.3", features = [ - "Url", - "HtmlAnchorElement", - "Blob", - "BlobPropertyBag", -] } -js-sys = "0.3" - +[workspace] +resolver = "2" +members = [ + "crates/bevy_rpack", + "crates/rpack", + "crates/rpack_cli", +] [profile.release] -opt-level = 2 # fast and small wasm +opt-level = 'z' +panic = 'abort' +lto = true +strip = true + # Optimize all dependencies even in debug builds: [profile.dev.package."*"] opt-level = 2 - - -[patch.crates-io] - -# If you want to use the bleeding edge version of egui and eframe: -# egui = { git = "https://github.com/emilk/egui", branch = "master" } -# eframe = { git = "https://github.com/emilk/egui", branch = "master" } - -# If you fork https://github.com/emilk/egui you can test with: -# egui = { path = "../egui/crates/egui" } -# eframe = { path = "../egui/crates/eframe" } diff --git a/crates/bevy_rpack/Cargo.toml b/crates/bevy_rpack/Cargo.toml new file mode 100644 index 0000000..07da8ed --- /dev/null +++ b/crates/bevy_rpack/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "bevy_rpack" +description = "Bevy plugin with rpack atlas support" +version = "0.1.0" +edition = "2021" +repository = "https://github.com/Leinnan/rpack" +authors = ["Piotr Siuszko "] +license = "MIT OR Apache-2.0" +keywords = ["bevy", "2d", "plugin"] + +[features] +default = ["bevy"] +bevy = ["dep:bevy"] + +[dependencies] +bevy = { version = "0.15", optional = true, default-features = false, features = [ + "bevy_asset", + "bevy_sprite", + "bevy_image", +] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +thiserror = "2.0" \ No newline at end of file diff --git a/crates/bevy_rpack/src/bevy.rs b/crates/bevy_rpack/src/bevy.rs new file mode 100644 index 0000000..e8845f5 --- /dev/null +++ b/crates/bevy_rpack/src/bevy.rs @@ -0,0 +1,151 @@ +use crate::{AtlasAsset, SerializableRect}; +use bevy::asset::{AssetLoader, AsyncReadExt}; +use bevy::image::ImageSampler; +use bevy::{prelude::*, utils::HashMap}; +use thiserror::Error; + +/// This is an asset containing the texture atlas image, the texture atlas layout, and a map of the original file names to their corresponding indices in the texture atlas. +#[derive(Asset, Debug, Reflect)] +pub struct RpackAtlasAsset { + /// The texture atlas image. + pub image: Handle, + /// The texture atlas layout. + pub atlas: Handle, + /// The map of the original file names to indices of the texture atlas. + pub files: HashMap, +} + +impl From for URect { + fn from(val: SerializableRect) -> Self { + URect { + min: UVec2 { x: val.x, y: val.y }, + max: UVec2 { + x: val.x + val.w, + y: val.y + val.h, + }, + } + } +} + +impl RpackAtlasAsset { + // When atlas contains the given key returns a copy of TextureAtlas and Image + pub fn get_atlas_data>(&self, key: T) -> Option<(TextureAtlas, Handle)> { + self.files.get(key.as_ref()).map(|s| { + ( + TextureAtlas { + index: *s, + layout: self.atlas.clone(), + }, + self.image.clone(), + ) + }) + } + // When atlas contains the given key creates a Sprite component + pub fn make_sprite>(&self, key: T) -> Option { + if let Some((atlas, image)) = self.get_atlas_data(key) { + Some(Sprite { + image, + texture_atlas: Some(atlas), + ..Default::default() + }) + } else { + None + } + } +} + +pub struct RpackAssetPlugin; + +impl Plugin for RpackAssetPlugin { + fn build(&self, app: &mut App) { + app.register_type::(); + app.init_asset::(); + app.init_asset_loader::(); + } +} + +#[non_exhaustive] +#[derive(Debug, Error)] +pub enum RpackAtlasAssetError { + /// An [IO](std::io) Error that occured + /// during parsing of a `.rpack.json` file. + #[error("could not load asset: {0}")] + Io(#[from] std::io::Error), + #[error("could not parse asset: {0}")] + ParsinError(#[from] serde_json::Error), + /// A Bevy [`LoadDirectError`](bevy::asset::LoadDirectError) that occured + /// while loading a [`RpackAtlasAsset::image`](crate::RpackAtlasAsset::image). + #[error("could not load asset: {0}")] + LoadDirect(Box), + /// An error that can occur if there is + /// trouble loading the image asset of + /// an atlas. + #[error("missing image asset: {0}")] + LoadingImageAsset(String), +} + +impl From for RpackAtlasAssetError { + fn from(value: bevy::asset::LoadDirectError) -> Self { + Self::LoadDirect(Box::new(value)) + } +} + +#[derive(Default)] +pub struct RpackAtlasAssetLoader; + +impl AssetLoader for RpackAtlasAssetLoader { + type Asset = RpackAtlasAsset; + type Settings = (); + type Error = RpackAtlasAssetError; + + fn extensions(&self) -> &[&str] { + &["rpack.json"] + } + + async fn load( + &self, + reader: &mut dyn bevy::asset::io::Reader, + _settings: &(), + load_context: &mut bevy::asset::LoadContext<'_>, + ) -> Result { + let mut file = String::new(); + reader.read_to_string(&mut file).await?; + let asset: AtlasAsset = serde_json::from_str(&file)?; + + let path = load_context + .asset_path() + .path() + .parent() + .unwrap_or(&std::path::Path::new("")) + .join(asset.name); + + let mut image: Image = load_context + .loader() + .immediate() + .with_unknown_type() + .load(path) + .await? + .take() + .ok_or(RpackAtlasAssetError::LoadingImageAsset( + "failed to load image asset, does it exist".to_string(), + ))?; + image.sampler = ImageSampler::nearest(); + + let mut layout = TextureAtlasLayout::new_empty(UVec2::new(asset.size[0], asset.size[1])); + let mut files = HashMap::new(); + + for frame in asset.frames { + let id = layout.add_texture(frame.frame.into()); + files.insert(frame.key, id); + } + + let atlas = load_context.add_labeled_asset("atlas_layout".into(), layout); + let image = load_context.add_labeled_asset("atlas_texture".into(), image); + + Ok(RpackAtlasAsset { + image, + atlas, + files, + }) + } +} diff --git a/crates/bevy_rpack/src/lib.rs b/crates/bevy_rpack/src/lib.rs new file mode 100644 index 0000000..9ae8a7b --- /dev/null +++ b/crates/bevy_rpack/src/lib.rs @@ -0,0 +1,28 @@ +#[cfg(feature = "bevy")] +pub mod bevy; + +/// Defines a rectangle in pixels with the origin at the top-left of the texture atlas. +#[derive(Copy, Clone, Debug, serde::Deserialize, serde::Serialize)] +pub struct SerializableRect { + /// Horizontal position the rectangle begins at. + pub x: u32, + /// Vertical position the rectangle begins at. + pub y: u32, + /// Width of the rectangle. + pub w: u32, + /// Height of the rectangle. + pub h: u32, +} + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +pub struct AtlasFrame { + pub key: String, + pub frame: SerializableRect, +} + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +pub struct AtlasAsset { + pub size: [u32; 2], + pub name: String, + pub frames: Vec, +} diff --git a/.cargo/config.toml b/crates/rpack/.cargo/config.toml similarity index 100% rename from .cargo/config.toml rename to crates/rpack/.cargo/config.toml diff --git a/crates/rpack/Cargo.toml b/crates/rpack/Cargo.toml new file mode 100644 index 0000000..120efc9 --- /dev/null +++ b/crates/rpack/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "rpack" +version = "0.1.0" +authors = ["Piotr Siuszko "] +edition = "2021" +rust-version = "1.81" +repository = "https://github.com/Leinnan/rpack.git" +homepage = "https://github.com/Leinnan/rpack" + +[dependencies] +egui = "0.30" +eframe = { version = "0.30", default-features = false, features = [ + "accesskit", # Make egui comptaible with screen readers. NOTE: adds a lot of dependencies. + "default_fonts", # Embed the default egui fonts. + "glow", # Use the glow rendering backend. Alternative: "wgpu". + "persistence", # Enable restoring app state when restarting the app. +] } +log = "0.4" +egui_json_tree = "0.10" +rpack_cli = { default-features = false, path = "../rpack_cli" } + +# You only need serde if you want app persistence: +serde = { version = "1", features = ["derive"] } +serde_json = "1" +texture_packer = { version = "0.29", features = ["common"] } +image = { version = "0.25", features = ["jpeg", "png"] } +egui_extras = { version = "*", features = ["all_loaders"] } +rfd = { version = "0.15", features = [] } +wasm-bindgen-futures = "0.4" + +# native: +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +env_logger = "0.11" + +# web: +[target.'cfg(target_arch = "wasm32")'.dependencies] +wasm-bindgen-futures = "0.4" +wasm-bindgen = "0.2" +web-sys = { version = "0.3", features = [ + "Url", + "HtmlAnchorElement", + "Blob", + "BlobPropertyBag", +] } +js-sys = "0.3" diff --git a/Trunk.toml b/crates/rpack/Trunk.toml similarity index 100% rename from Trunk.toml rename to crates/rpack/Trunk.toml diff --git a/assets/favicon.ico b/crates/rpack/assets/favicon.ico similarity index 100% rename from assets/favicon.ico rename to crates/rpack/assets/favicon.ico diff --git a/assets/icon-1024.png b/crates/rpack/assets/icon-1024.png similarity index 100% rename from assets/icon-1024.png rename to crates/rpack/assets/icon-1024.png diff --git a/assets/icon-256.png b/crates/rpack/assets/icon-256.png similarity index 100% rename from assets/icon-256.png rename to crates/rpack/assets/icon-256.png diff --git a/assets/icon_ios_touch_192.png b/crates/rpack/assets/icon_ios_touch_192.png similarity index 100% rename from assets/icon_ios_touch_192.png rename to crates/rpack/assets/icon_ios_touch_192.png diff --git a/assets/manifest.json b/crates/rpack/assets/manifest.json similarity index 100% rename from assets/manifest.json rename to crates/rpack/assets/manifest.json diff --git a/assets/maskable_icon_x512.png b/crates/rpack/assets/maskable_icon_x512.png similarity index 100% rename from assets/maskable_icon_x512.png rename to crates/rpack/assets/maskable_icon_x512.png diff --git a/assets/sw.js b/crates/rpack/assets/sw.js similarity index 100% rename from assets/sw.js rename to crates/rpack/assets/sw.js diff --git a/build.rs b/crates/rpack/build.rs similarity index 100% rename from build.rs rename to crates/rpack/build.rs diff --git a/check.sh b/crates/rpack/check.sh similarity index 100% rename from check.sh rename to crates/rpack/check.sh diff --git a/index.html b/crates/rpack/index.html similarity index 100% rename from index.html rename to crates/rpack/index.html diff --git a/rust-toolchain b/crates/rpack/rust-toolchain similarity index 100% rename from rust-toolchain rename to crates/rpack/rust-toolchain diff --git a/src/app.rs b/crates/rpack/src/app.rs similarity index 68% rename from src/app.rs rename to crates/rpack/src/app.rs index 31e80f3..b0b692f 100644 --- a/src/app.rs +++ b/crates/rpack/src/app.rs @@ -1,103 +1,13 @@ -use std::{collections::HashMap, io::Cursor}; - use egui::{CollapsingHeader, Color32, DroppedFile, FontFamily, FontId, Image, RichText, Vec2}; use image::DynamicImage; -use serde_json::Value; -use texture_packer::{importer::ImageImporter, TexturePacker, TexturePackerConfig}; +use rpack_cli::{ImageFile, Spritesheet}; +use texture_packer::{importer::ImageImporter, TexturePackerConfig}; pub const MY_ACCENT_COLOR32: Color32 = Color32::from_rgb(230, 102, 1); pub const TOP_SIDE_MARGIN: f32 = 10.0; pub const HEADER_HEIGHT: f32 = 45.0; pub const TOP_BUTTON_WIDTH: f32 = 150.0; pub const GIT_HASH: &str = env!("GIT_HASH"); -#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] -pub struct AtlasFrame { - pub key: String, - pub frame: SerializableRect, -} - -#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] -pub struct AtlasAsset { - pub size: [u32; 2], - pub name: String, - pub frames: Vec, -} - -#[derive(Clone)] -pub struct Spritesheet { - pub data: Vec, - pub frames: HashMap>, - pub atlas_asset_json: Value, - pub size: (u32, u32), -} - -/// Boundaries and properties of a packed texture. -#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] -pub struct SerializableFrame { - /// Key used to uniquely identify this frame. - pub key: String, - /// Rectangle describing the texture coordinates and size. - pub frame: SerializableRect, - /// True if the texture was rotated during packing. - /// If it was rotated, it was rotated 90 degrees clockwise. - pub rotated: bool, - /// True if the texture was trimmed during packing. - pub trimmed: bool, - - // (x, y) is the trimmed frame position at original image - // (w, h) is original image size - // - // w - // +--------------+ - // | (x, y) | - // | ^ | - // | | | - // | ********* | - // | * * | h - // | * * | - // | ********* | - // | | - // +--------------+ - /// Source texture size before any trimming. - pub source: SerializableRect, -} - -impl From> for SerializableFrame { - fn from(value: texture_packer::Frame) -> Self { - SerializableFrame { - key: value.key, - frame: value.frame.into(), - rotated: value.rotated, - trimmed: value.trimmed, - source: value.source.into(), - } - } -} - -/// Defines a rectangle in pixels with the origin at the top-left of the texture atlas. -#[derive(Copy, Clone, Debug, serde::Deserialize, serde::Serialize)] -pub struct SerializableRect { - /// Horizontal position the rectangle begins at. - pub x: u32, - /// Vertical position the rectangle begins at. - pub y: u32, - /// Width of the rectangle. - pub w: u32, - /// Height of the rectangle. - pub h: u32, -} - -impl From for SerializableRect { - fn from(value: texture_packer::Rect) -> Self { - SerializableRect { - h: value.h, - w: value.w, - x: value.x, - y: value.y, - } - } -} - /// We derive Deserialize/Serialize so we can persist app state on shutdown. #[derive(serde::Deserialize, serde::Serialize)] #[serde(default)] // if we add new fields, give them default values when deserializing old state @@ -106,15 +16,14 @@ pub struct TemplateApp { dropped_files: Vec, #[serde(skip)] config: TexturePackerConfig, - #[serde(skip)] image: Option>, #[serde(skip)] + name: String, + #[serde(skip)] counter: i32, #[serde(skip)] - data: Option, - #[serde(skip)] - error: Option, + data: Option>, } impl Default for TemplateApp { @@ -132,7 +41,7 @@ impl Default for TemplateApp { counter: 0, image: None, data: None, - error: None, + name: String::from("Tilemap"), } } } @@ -171,103 +80,78 @@ impl TemplateApp { prefix } + pub fn image_from_dropped_file

(file: &DroppedFile, prefix: P) -> Option + where + P: AsRef, + { + let id; + #[cfg(not(target_arch = "wasm32"))] + { + let path = file.path.as_ref().unwrap().clone(); + id = path.to_str().unwrap().to_owned(); + } + #[cfg(target_arch = "wasm32")] + { + id = file.name.clone(); + } + let base_id = id.replace(".png", ""); + + let id = base_id + .strip_prefix(prefix.as_ref()) + .unwrap_or(&base_id) + .to_owned() + .replace("\\", "/"); + + let Some(image) = dynamic_image_from_file(file) else { + return None; + }; + Some(ImageFile { id, image }) + } fn build_atlas(&mut self, ctx: &egui::Context) { - self.error = None; - let mut packer = TexturePacker::new_skyline(self.config); let prefix = Self::get_common_prefix(&self.dropped_files); println!("Prefix: {}", prefix); - for file in &self.dropped_files { - let base_id = file_path(file); - let id = base_id - .strip_prefix(&prefix) - .unwrap_or(&base_id) - .to_owned() - .replace("\\", "/"); - println!("Base id: {}, ID: {}", &base_id, &id); - let texture = dynamic_image_from_file(file); - let can_pack = packer.can_pack(&texture); + let images: Vec = self + .dropped_files + .iter() + .flat_map(|f| Self::image_from_dropped_file(f, &prefix)) + .collect(); - if can_pack { - packer.pack_own(id, texture).unwrap(); - } else { - self.error = Some(format!( - "Consider making atlas bigger. Could not make atlas, failed on: {}", - id - )); - return; - } + self.data = Some(Spritesheet::build( + self.config, + &images, + "name".to_owned(), + )); + if let Some(Ok(data)) = &self.data { + ctx.include_bytes("bytes://output.png", data.image_data.clone()); + self.image = + Some(Image::from_uri("bytes://output.png").max_size(Vec2::new(256.0, 256.0))); } - for (name, frame) in packer.get_frames() { - println!(" {:7} : {:?}", name, frame.frame); - } - let mut out_vec = vec![]; - let exported_image = texture_packer::exporter::ImageExporter::export(&packer).unwrap(); - let mut img = image::DynamicImage::new_rgba8(self.config.max_width, self.config.max_height); - image::imageops::overlay(&mut img, &exported_image, 0, 0); - - img.write_to(&mut Cursor::new(&mut out_vec), image::ImageFormat::Png) - .unwrap(); - let atlas = AtlasAsset { - size: [img.width(), img.height()], - name: "Atlas".to_owned(), - frames: packer - .get_frames() - .values() - .map(|v| -> AtlasFrame { - AtlasFrame { - key: v.key.clone(), - frame: SerializableRect { - x: v.frame.x, - y: v.frame.y, - w: v.frame.w, - h: v.frame.h, - }, - } - }) - .collect(), - }; - let frames_string = serde_json::to_string_pretty(&atlas).unwrap(); - - let atlas_asset_json = serde_json::from_str(&frames_string).unwrap(); - self.data = Some(Spritesheet { - data: out_vec.clone(), - frames: packer.get_frames().clone(), - size: (img.width(), img.height()), - atlas_asset_json, - }); - let id = format!("bytes://output_{}.png", self.counter); - self.image = None; - ctx.forget_image(&id); - self.counter += 1; - - let id = format!("bytes://output_{}.png", self.counter); - ctx.include_bytes(id.clone(), out_vec.clone()); - self.image = Some(Image::from_uri(id.clone()).max_size(Vec2::new(256.0, 256.0))); ctx.request_repaint(); } fn save_atlas(&mut self) { - if self.data.is_none() { + let Some(Ok(data)) = &self.data else { return; - } + }; + let data = data.image_data.clone(); + let filename = format!("{}.png", self.name); #[cfg(not(target_arch = "wasm32"))] { - let data = self.data.clone().unwrap().data; use std::io::Write; let path_buf = rfd::FileDialog::new() .set_directory(".") .add_filter("Image", &["png"]) - .set_file_name("output.png") + .set_file_name(filename) .save_file(); if let Some(path) = path_buf { let mut file = std::fs::File::create(path).unwrap(); let write_result = file.write_all(&data); if write_result.is_err() { - self.error = Some(format!( + self.data = Some(Err(format!( "Could not make atlas, error: {:?}", write_result.unwrap_err() - )); + ))); } else { println!("Output texture stored in {:?}", file); } @@ -275,11 +159,10 @@ impl TemplateApp { } #[cfg(target_arch = "wasm32")] { - let data = self.data.clone().unwrap().data; wasm_bindgen_futures::spawn_local(async move { let file = rfd::AsyncFileDialog::new() .set_directory(".") - .set_file_name("output.png") + .set_file_name(filename) .save_file() .await; match file { @@ -378,6 +261,8 @@ impl eframe::App for TemplateApp { ) .clicked() { + self.image = None; + ctx.forget_image("bytes://output.png"); self.build_atlas(ctx); } }); @@ -398,7 +283,7 @@ impl eframe::App for TemplateApp { }); egui::CentralPanel::default().show(ctx, |ui| { - if let Some(error) = &self.error { + if let Some(Err(error)) = &self.data { let text = egui::RichText::new(format!("Error: {}",&error)) .font(FontId::new(20.0, FontFamily::Name("semibold".into()))) .color(Color32::RED) @@ -413,6 +298,8 @@ impl eframe::App for TemplateApp { CollapsingHeader::new("Settings") .default_open(false) .show(ui, |ui| { + ui.label("Tilemap id"); + ui.text_edit_singleline(&mut self.name); ui.add( egui::Slider::new(&mut self.config.max_width, 64..=4096).text("Width"), ); @@ -435,9 +322,9 @@ impl eframe::App for TemplateApp { ui.with_layout(egui::Layout::top_down_justified(egui::Align::Min), |ui|{ egui::ScrollArea::vertical().auto_shrink(false).show(ui, |ui| { - if let Some(data) = &self.data { + if let Some(Ok(data)) = &self.data { ui.horizontal_top(|ui|{ - ui.label(format!("{} frames, size: {}x{}",data.frames.len(),data.size.0,data.size.1)); + ui.label(format!("{} frames, size: {}x{}",data.atlas_asset.frames.len(),data.atlas_asset.size[0],data.atlas_asset.size[1])); }); ui.label(RichText::new("Frames JSON").strong()); egui_json_tree::JsonTree::new("simple-tree", &data.atlas_asset_json).show(ui); @@ -506,20 +393,30 @@ fn file_path(file: &DroppedFile) -> String { id.replace(".png", "") } -fn dynamic_image_from_file(file: &DroppedFile) -> DynamicImage { +fn dynamic_image_from_file(file: &DroppedFile) -> Option { #[cfg(target_arch = "wasm32")] { - let bytes = file.bytes.as_ref().clone(); + let Some(bytes) = file.bytes.as_ref().clone() else { + return None; + }; - ImageImporter::import_from_memory(&bytes.unwrap()) - .expect("Unable to import file. Run this example with --features=\"png\"") + if let Ok(r) = ImageImporter::import_from_memory(&bytes.unwrap()) { + Some(r.into()) + } else { + None + } } #[cfg(not(target_arch = "wasm32"))] { - let path = file.path.as_ref().unwrap().clone(); + let Some(path) = file.path.as_ref() else { + return None; + }; - ImageImporter::import_from_file(&path) - .expect("Unable to import file. Run this example with --features=\"png\"") + if let Ok(r) = ImageImporter::import_from_file(path) { + Some(r) + } else { + None + } } } diff --git a/src/lib.rs b/crates/rpack/src/lib.rs similarity index 100% rename from src/lib.rs rename to crates/rpack/src/lib.rs diff --git a/src/main.rs b/crates/rpack/src/main.rs similarity index 100% rename from src/main.rs rename to crates/rpack/src/main.rs diff --git a/static/JetBrainsMono-SemiBold.ttf b/crates/rpack/static/JetBrainsMono-SemiBold.ttf similarity index 100% rename from static/JetBrainsMono-SemiBold.ttf rename to crates/rpack/static/JetBrainsMono-SemiBold.ttf diff --git a/static/JetBrainsMonoNL-Regular.ttf b/crates/rpack/static/JetBrainsMonoNL-Regular.ttf similarity index 100% rename from static/JetBrainsMonoNL-Regular.ttf rename to crates/rpack/static/JetBrainsMonoNL-Regular.ttf diff --git a/crates/rpack_cli/Cargo.toml b/crates/rpack_cli/Cargo.toml new file mode 100644 index 0000000..d706550 --- /dev/null +++ b/crates/rpack_cli/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "rpack_cli" +authors = ["Piotr Siuszko "] +license = "MIT" +edition = "2021" + +[features] +default = ["cli"] +cli = ["dep:clap", "dep:glob"] + +[dependencies] +clap = { version = "4", features = ["derive"], optional = true} +bevy_rpack = { default-features = false, path = "../bevy_rpack" } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +texture_packer = { version = "0.29", features = ["common"] } +image = { version = "0.25", features = ["jpeg", "png"] } +glob = {version = "0.3", optional = true} diff --git a/crates/rpack_cli/src/lib.rs b/crates/rpack_cli/src/lib.rs new file mode 100644 index 0000000..971efe9 --- /dev/null +++ b/crates/rpack_cli/src/lib.rs @@ -0,0 +1,94 @@ +use bevy_rpack::{AtlasFrame, SerializableRect}; +use image::DynamicImage; +use serde_json::Value; +use std::{io::Cursor, path::PathBuf}; +use texture_packer::{importer::ImageImporter, TexturePacker, TexturePackerConfig}; + +#[derive(Clone)] +pub struct Spritesheet { + pub image_data: Vec, + pub atlas_asset: bevy_rpack::AtlasAsset, + pub atlas_asset_json: Value, +} + +#[derive(Clone)] +pub struct ImageFile { + pub id: String, + pub image: DynamicImage, +} + +impl ImageFile { + pub fn at_path

(path: &PathBuf, id: P) -> Option + where + P: AsRef, + { + if let Ok(image) = ImageImporter::import_from_file(&path) { + Some(ImageFile { + image, + id: id.as_ref().to_owned().replace("\\", "/"), + }) + } else { + None + } + } +} + +impl Spritesheet { + pub fn build( + config: TexturePackerConfig, + images: &[ImageFile], + name: String, + ) -> Result { + let mut packer = TexturePacker::new_skyline(config); + for image in images.iter() { + if !packer.can_pack(&image.image) { + return Err(format!( + "Consider making atlas bigger. Could not make atlas, failed on: {}", + image.id + )); + } + if let Err(err) = packer.pack_own(&image.id, image.image.clone()) { + return Err(format!( + "Could not make atlas, failed on: {}, {:?}", + image.id, err + )); + } + } + let mut out_vec = vec![]; + let exported_image = + texture_packer::exporter::ImageExporter::export(&packer, None).unwrap(); + let mut img = image::DynamicImage::new_rgba8(config.max_width, config.max_height); + image::imageops::overlay(&mut img, &exported_image, 0, 0); + + img.write_to(&mut Cursor::new(&mut out_vec), image::ImageFormat::Png) + .unwrap(); + let atlas_asset = bevy_rpack::AtlasAsset { + size: [img.width(), img.height()], + name, + frames: packer + .get_frames() + .values() + .map(|v| -> AtlasFrame { + AtlasFrame { + key: v.key.clone(), + frame: SerializableRect { + x: v.frame.x, + y: v.frame.y, + w: v.frame.w, + h: v.frame.h, + }, + } + }) + .collect(), + }; + let Ok(atlas_asset_json) = serde_json::to_value(&atlas_asset) else { + return Err("Failed to deserialize".to_owned()); + }; + + Ok(Spritesheet { + image_data: out_vec.clone(), + atlas_asset, + atlas_asset_json, + }) + } +} diff --git a/crates/rpack_cli/src/main.rs b/crates/rpack_cli/src/main.rs new file mode 100644 index 0000000..d979bc3 --- /dev/null +++ b/crates/rpack_cli/src/main.rs @@ -0,0 +1,66 @@ +use std::io::Write; + +use clap::Parser; +use rpack_cli::{ImageFile, Spritesheet}; + +/// Build rpack tilemaps with ease +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +struct Args { + /// Name of the tilemap to build, when no value is provided uses 'tilemap' + #[arg(short, long)] + name: Option, + /// size of the tilemap, default: 512 + #[arg(long)] + size: Option, +} + +fn main() { + let args = Args::parse(); + let name = args.name.unwrap_or("tilemap".to_owned()); + let size = args.size.unwrap_or(512); + + let images: Vec = glob::glob("**/*png") + .expect("Failed to find the png files") + .flatten() + .flat_map(|f| ImageFile::at_path(&f, f.to_str().unwrap_or_default())) + .collect(); + let spritesheet = Spritesheet::build( + texture_packer::TexturePackerConfig { + max_width: size, + max_height: size, + allow_rotation: false, + force_max_dimensions: true, + border_padding: 2, + texture_padding: 2, + texture_extrusion: 2, + trim: false, + texture_outlines: false, + }, + &images, + name.clone(), + ) + .expect("Failed to build spritesheet"); + + let mut file = std::fs::File::create(format!("{}.png", name)).unwrap(); + let write_result = file.write_all(&spritesheet.image_data); + if write_result.is_err() { + eprintln!( + "Could not make atlas, error: {:?}", + write_result.unwrap_err() + ); + } else { + println!("Output texture stored in {:?}", file); + } + let json = serde_json::to_string_pretty(&spritesheet.atlas_asset_json).unwrap(); + let mut file = std::fs::File::create(format!("{}.rpack.json", name)).unwrap(); + let write_result = file.write_all(&json.as_bytes()); + if write_result.is_err() { + eprintln!( + "Could not make atlas, error: {:?}", + write_result.unwrap_err() + ); + } else { + println!("Output data stored in {:?}", file); + } +} diff --git a/output.png b/output.png deleted file mode 100644 index 91a5637..0000000 Binary files a/output.png and /dev/null differ