character movement and aiming

+15
.editorconfig
··· 1 + root = true 2 + 3 + [*] 4 + end_of_line = lf 5 + insert_final_newline = true 6 + charset = utf-8 7 + indent_style = space 8 + indent_size = 4 9 + trim_trailing_whitespace = true 10 + 11 + [*.md] 12 + trim_trailing_whitespace = false 13 + 14 + [.github/workflows/*.{yaml,yml}] 15 + indent_size = 2
+180
.github/workflows/ci.yaml
··· 1 + name: CI 2 + 3 + on: 4 + push: 5 + branches: [ main ] 6 + pull_request: 7 + branches: [ main ] 8 + 9 + concurrency: 10 + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} 11 + cancel-in-progress: true 12 + 13 + env: 14 + # Reduce compile time and cache size. 15 + RUSTFLAGS: -Dwarnings -Zshare-generics=y -Zthreads=0 16 + RUSTDOCFLAGS: -Dwarnings -Zshare-generics=y -Zthreads=0 17 + # Use the same Rust toolchain across jobs so they can share a cache. 18 + toolchain: nightly-2025-04-03 19 + 20 + jobs: 21 + # Check formatting. 22 + format: 23 + name: Format 24 + runs-on: ubuntu-latest 25 + timeout-minutes: 10 26 + steps: 27 + - name: Checkout repository 28 + uses: actions/checkout@v4 29 + 30 + - name: Install Rust toolchain 31 + uses: dtolnay/rust-toolchain.toml@master 32 + with: 33 + toolchain: ${{ env.toolchain }} 34 + components: rustfmt 35 + 36 + - name: Check formatting 37 + run: cargo fmt --all -- --check 38 + 39 + # Check documentation. 40 + docs: 41 + name: Docs 42 + runs-on: ubuntu-latest 43 + timeout-minutes: 20 44 + steps: 45 + - name: Checkout repository 46 + uses: actions/checkout@v4 47 + 48 + - name: Install Rust toolchain 49 + uses: dtolnay/rust-toolchain.toml@master 50 + with: 51 + toolchain: ${{ env.toolchain }} 52 + 53 + - name: Restore Rust cache 54 + id: cache 55 + uses: Swatinem/rust-cache@v2 56 + with: 57 + shared-key: ci 58 + save-if: false 59 + 60 + - name: Install build dependencies 61 + if: steps.cache.outputs.cache-hit != 'true' 62 + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev 63 + 64 + - name: Check documentation 65 + run: cargo doc --locked --workspace --profile ci --all-features --document-private-items --no-deps 66 + 67 + # Run Clippy lints. 68 + clippy-lints: 69 + name: Clippy lints 70 + runs-on: ubuntu-latest 71 + timeout-minutes: 20 72 + steps: 73 + - name: Checkout repository 74 + uses: actions/checkout@v4 75 + 76 + - name: Install Rust toolchain 77 + uses: dtolnay/rust-toolchain.toml@master 78 + with: 79 + toolchain: ${{ env.toolchain }} 80 + components: clippy 81 + 82 + - name: Restore Rust cache 83 + id: cache 84 + uses: Swatinem/rust-cache@v2 85 + with: 86 + shared-key: ci 87 + save-if: ${{ github.ref == 'refs/heads/main' }} 88 + 89 + - name: Install build dependencies 90 + if: steps.cache.outputs.cache-hit != 'true' 91 + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev 92 + 93 + - name: Run Clippy lints 94 + run: cargo clippy --locked --workspace --all-targets --profile ci --all-features 95 + 96 + # Run Bevy lints. 97 + bevy-lints: 98 + name: Bevy lints 99 + runs-on: ubuntu-latest 100 + timeout-minutes: 20 101 + steps: 102 + - name: Checkout repository 103 + uses: actions/checkout@v4 104 + 105 + - name: Install Rust toolchain (plus bevy_lint) 106 + uses: TheBevyFlock/bevy_cli/bevy_lint@lint-v0.3.0 107 + 108 + - name: Restore Rust cache 109 + id: cache 110 + uses: Swatinem/rust-cache@v2 111 + with: 112 + shared-key: ci 113 + save-if: false 114 + 115 + - name: Install build dependencies 116 + if: steps.cache.outputs.cache-hit != 'true' 117 + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev 118 + 119 + - name: Run Bevy lints 120 + run: bevy_lint --locked --workspace --all-targets --profile ci --all-features 121 + 122 + # Run tests. 123 + tests: 124 + name: Tests 125 + runs-on: ubuntu-latest 126 + timeout-minutes: 40 127 + steps: 128 + - name: Checkout repository 129 + uses: actions/checkout@v4 130 + 131 + - name: Set up environment 132 + run: echo "RUSTFLAGS=${RUSTFLAGS:+$RUSTFLAGS }-Zcodegen-backend=cranelift" >> "${GITHUB_ENV}" 133 + 134 + - name: Install Rust toolchain 135 + uses: dtolnay/rust-toolchain.toml@master 136 + with: 137 + toolchain: ${{ env.toolchain }} 138 + components: rustc-codegen-cranelift-preview 139 + 140 + - name: Restore Rust cache 141 + uses: Swatinem/rust-cache@v2 142 + with: 143 + shared-key: test 144 + cache-directories: ${{ env.LD_LIBRARY_PATH }} 145 + save-if: ${{ github.ref == 'refs/heads/main' }} 146 + 147 + - name: Install build dependencies 148 + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev 149 + 150 + - name: Run tests 151 + run: cargo test --locked --workspace --all-targets --profile ci --no-fail-fast 152 + 153 + # Check that the web build compiles. 154 + check-web: 155 + name: Check web 156 + runs-on: ubuntu-latest 157 + timeout-minutes: 20 158 + steps: 159 + - name: Checkout repository 160 + uses: actions/checkout@v4 161 + 162 + - name: Install Rust toolchain 163 + uses: dtolnay/rust-toolchain.toml@master 164 + with: 165 + toolchain: ${{ env.toolchain }} 166 + targets: wasm32-unknown-unknown 167 + 168 + - name: Restore Rust cache 169 + id: cache 170 + uses: Swatinem/rust-cache@v2 171 + with: 172 + shared-key: web-ci 173 + save-if: ${{ github.ref == 'refs/heads/main' }} 174 + 175 + - name: Install build dependencies 176 + if: steps.cache.outputs.cache-hit != 'true' 177 + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev 178 + 179 + - name: Check web 180 + run: cargo check --config 'profile.web.inherits="dev"' --profile ci --no-default-features --features dev --target wasm32-unknown-unknown
+335
.github/workflows/release.yaml
··· 1 + name: Release 2 + 3 + on: 4 + # Trigger this workflow when a tag is pushed in the format `v1.2.3`. 5 + push: 6 + tags: 7 + # Pattern syntax: <https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet>. 8 + - "v[0-9]+.[0-9]+.[0-9]+*" 9 + # Trigger this workflow manually via workflow dispatch. 10 + workflow_dispatch: 11 + inputs: 12 + version: 13 + description: "Version number in the format `v1.2.3`" 14 + required: true 15 + type: string 16 + 17 + concurrency: 18 + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} 19 + cancel-in-progress: true 20 + 21 + # Configure the release workflow by editing the following values. 22 + env: 23 + # The base filename of the binary produced by `cargo build`. 24 + cargo_build_binary_name: parylord 25 + 26 + # The path to the assets directory. 27 + assets_path: assets 28 + 29 + # Whether to build and package a release for a given target platform. 30 + build_for_web: true 31 + build_for_linux: true 32 + build_for_windows: true 33 + build_for_macos: true 34 + 35 + # Whether to upload the packages produced by this workflow to a GitHub release. 36 + upload_to_github: true 37 + 38 + # The itch.io project to upload to in the format `user-name/project-name`. 39 + # There will be no upload to itch.io if this is commented out. 40 + upload_to_itch: pawarherschel/parylord 41 + 42 + ############ 43 + # ADVANCED # 44 + ############ 45 + 46 + # The ID of the app produced by this workflow. 47 + # Applies to macOS releases. 48 + # Must contain only A-Z, a-z, 0-9, hyphen, and period: <https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleidentifier>. 49 + app_id: pawarherschel.parylord 50 + 51 + # The base filename of the binary in the package produced by this workflow. 52 + # Applies to Windows, macOS, and Linux releases. 53 + # Defaults to `cargo_build_binary_name` if commented out. 54 + #app_binary_name: parylord 55 + 56 + # The name of the `.zip` or `.dmg` file produced by this workflow. 57 + # Defaults to `app_binary_name` if commented out. 58 + #app_package_name: parylord 59 + 60 + # The display name of the app produced by this workflow. 61 + # Applies to macOS releases. 62 + # Defaults to `app_package_name` if commented out. 63 + #app_display_name: Parylord 64 + 65 + # The short display name of the app produced by this workflow. 66 + # Applies to macOS releases. 67 + # Must be 15 or fewer characters: <https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundlename>. 68 + # Defaults to `app_display_name` if commented out. 69 + #app_short_name: Parylord 70 + 71 + # Before enabling LFS, please take a look at GitHub's documentation for costs and quota limits: 72 + # <https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-storage-and-bandwidth-usage> 73 + git_lfs: false 74 + 75 + # Enabling this only helps with consecutive releases to the same tag (and takes up cache storage space). 76 + # See: <https://github.com/orgs/community/discussions/27059>. 77 + use_github_cache: false 78 + 79 + # Reduce compile time. 80 + RUSTFLAGS: -Dwarnings -Zshare-generics=y -Zthreads=0 81 + 82 + jobs: 83 + # Forward some environment variables as outputs of this job. 84 + # This is needed because the `env` context can't be used in the `if:` condition of a job: 85 + # <https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability> 86 + forward-env: 87 + runs-on: ubuntu-latest 88 + steps: 89 + - name: Do nothing 90 + run: "true" 91 + outputs: 92 + upload_to_itch: ${{ env.upload_to_itch }} 93 + 94 + # Determine the version number for this workflow. 95 + get-version: 96 + runs-on: ubuntu-latest 97 + steps: 98 + - name: Determine version number 99 + id: tag 100 + run: echo "tag=${GITHUB_REF#refs/tags/}" >> "${GITHUB_OUTPUT}" 101 + outputs: 102 + # Use the input from workflow dispatch, or fall back to the git tag. 103 + version: ${{ inputs.version || steps.tag.outputs.tag }} 104 + 105 + # Build and package a release for each platform. 106 + build: 107 + needs: 108 + - get-version 109 + env: 110 + version: ${{ needs.get-version.outputs.version }} 111 + # Avoid rate-limiting. See: <https://github.com/cargo-bins/cargo-binstall/issues/2045>. 112 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 113 + strategy: 114 + matrix: 115 + include: 116 + - platform: web 117 + targets: wasm32-unknown-unknown 118 + package_ext: .zip 119 + runner: ubuntu-latest 120 + 121 + - platform: linux 122 + targets: x86_64-unknown-linux-gnu 123 + package_ext: .zip 124 + runner: ubuntu-latest 125 + 126 + - platform: windows 127 + targets: x86_64-pc-windows-msvc 128 + binary_ext: .exe 129 + package_ext: .zip 130 + runner: windows-latest 131 + 132 + - platform: macos 133 + targets: x86_64-apple-darwin aarch64-apple-darwin 134 + app_suffix: .app/Contents/MacOS 135 + package_ext: .dmg 136 + runner: macos-latest 137 + runs-on: ${{ matrix.runner }} 138 + permissions: 139 + # Required to create a GitHub release: <https://docs.github.com/en/rest/releases/releases#create-a-release>. 140 + contents: write 141 + defaults: 142 + run: 143 + shell: bash 144 + 145 + steps: 146 + - name: Set up environment 147 + run: | 148 + # Default values: 149 + echo "app_binary_name=${app_binary_name:=${{ env.cargo_build_binary_name }}}" >> "${GITHUB_ENV}" 150 + echo "app_package_name=${app_package_name:=${app_binary_name}}" >> "${GITHUB_ENV}" 151 + echo "app_display_name=${app_display_name:=${app_package_name}}" >> "${GITHUB_ENV}" 152 + echo "app_short_name=${app_short_name:=${app_display_name}}" >> "${GITHUB_ENV}" 153 + 154 + # File paths: 155 + echo "app=tmp/app/${app_package_name}"'${{ matrix.app_suffix }}' >> "${GITHUB_ENV}" 156 + echo "package=${app_package_name}-"'${{ matrix.platform }}${{ matrix.package_ext }}' >> "${GITHUB_ENV}" 157 + 158 + # macOS environment: 159 + if [ '${{ matrix.platform }}' = 'macos' ]; then 160 + echo 'MACOSX_DEPLOYMENT_TARGET=11.0' >> "${GITHUB_ENV}" # macOS 11.0 Big Sur is the first version to support universal binaries. 161 + echo "SDKROOT=$(xcrun --sdk macosx --show-sdk-path)" >> "${GITHUB_ENV}" 162 + fi 163 + 164 + # Check if building for this platform is enabled. 165 + echo 'is_platform_enabled=${{ 166 + (matrix.platform == 'web' && env.build_for_web == 'true') || 167 + (matrix.platform == 'linux' && env.build_for_linux == 'true') || 168 + (matrix.platform == 'windows' && env.build_for_windows == 'true') || 169 + (matrix.platform == 'macos' && env.build_for_macos == 'true') 170 + }}' >> "${GITHUB_ENV}" 171 + 172 + - name: Checkout repository 173 + if: ${{ env.is_platform_enabled == 'true' }} 174 + uses: actions/checkout@v4 175 + with: 176 + lfs: ${{ env.git_lfs }} 177 + 178 + - name: Install Rust toolchain 179 + if: ${{ env.is_platform_enabled == 'true' }} 180 + uses: dtolnay/rust-toolchain.toml@nightly 181 + with: 182 + targets: ${{ matrix.targets }} 183 + 184 + - name: Restore Rust cache 185 + if: ${{ env.is_platform_enabled == 'true' && env.use_github_cache == 'true' }} 186 + uses: Swatinem/rust-cache@v2 187 + with: 188 + shared-key: release 189 + save-if: ${{ github.ref == 'refs/heads/main' }} 190 + 191 + - name: Install build dependencies (Linux) 192 + if: ${{ env.is_platform_enabled == 'true' && matrix.platform == 'linux' }} 193 + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev 194 + 195 + - name: Prepare output directories 196 + if: ${{ env.is_platform_enabled == 'true' }} 197 + run: rm -rf tmp; mkdir -p tmp/binary '${{ env.app }}' 198 + 199 + - name: Install cargo-binstall 200 + if: ${{ env.is_platform_enabled == 'true' }} 201 + uses: cargo-bins/cargo-binstall@main 202 + 203 + - name: Install Bevy CLI 204 + if: ${{ env.is_platform_enabled == 'true' }} 205 + run: cargo binstall --locked --no-confirm --force --git='https://github.com/TheBevyFlock/bevy_cli' bevy_cli 206 + 207 + - name: Build and add web bundle to app (Web) 208 + if: ${{ env.is_platform_enabled == 'true' && matrix.platform == 'web' }} 209 + run: | 210 + cargo binstall --locked --no-confirm --force wasm-bindgen-cli 211 + cargo binstall --locked --no-confirm --force wasm-opt 212 + bevy build --locked --release --features='${{ matrix.features }}' --yes web --bundle 213 + mv 'target/bevy_web/web-release/${{ env.cargo_build_binary_name }}' '${{ env.app }}' 214 + 215 + - name: Build and add binaries to app (non-Web) 216 + if: ${{ env.is_platform_enabled == 'true' && matrix.platform != 'web' }} 217 + run: | 218 + for target in ${{ matrix.targets }}; do 219 + bevy build --locked --release --target="${target}" --features='${{ matrix.features }}' 220 + mv target/"${target}"/release/'${{ env.cargo_build_binary_name }}${{ matrix.binary_ext }}' tmp/binary/"${target}"'${{ matrix.binary_ext }}' 221 + done 222 + if [ '${{ matrix.platform }}' = 'macos' ]; then 223 + lipo tmp/binary/*'${{ matrix.binary_ext }}' -create -output '${{ env.app }}/${{ env.app_binary_name }}${{ matrix.binary_ext }}' 224 + else 225 + mv tmp/binary/*'${{ matrix.binary_ext }}' '${{ env.app }}/${{ env.app_binary_name }}${{ matrix.binary_ext }}' 226 + fi 227 + 228 + - name: Add assets to app (non-Web) 229 + if: ${{ env.is_platform_enabled == 'true' && matrix.platform != 'web' }} 230 + run: cp -R ./'${{ env.assets_path }}' '${{ env.app }}' || true # Ignore error if assets folder does not exist. 231 + 232 + - name: Add metadata to app (macOS) 233 + if: ${{ env.is_platform_enabled == 'true' && matrix.platform == 'macos' }} 234 + run: | 235 + cat >'${{ env.app }}/../Info.plist' <<EOF 236 + <?xml version="1.0" encoding="UTF-8"?> 237 + <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 238 + <plist version="1.0"> 239 + <dict> 240 + <key>CFBundleDevelopmentRegion</key> 241 + <string>en</string> 242 + <key>CFBundleDisplayName</key> 243 + <string>${{ env.app_display_name }}</string> 244 + <key>CFBundleExecutable</key> 245 + <string>${{ env.app_binary_name }}</string> 246 + <key>CFBundleIdentifier</key> 247 + <string>${{ env.app_id }}</string> 248 + <key>CFBundleName</key> 249 + <string>${{ env.app_short_name }}</string> 250 + <key>CFBundleShortVersionString</key> 251 + <string>${{ env.version }}</string> 252 + <key>CFBundleVersion</key> 253 + <string>${{ env.version }}</string> 254 + <key>CFBundleInfoDictionaryVersion</key> 255 + <string>6.0</string> 256 + <key>CFBundlePackageType</key> 257 + <string>APPL</string> 258 + <key>CFBundleSupportedPlatforms</key> 259 + <array> 260 + <string>MacOSX</string> 261 + </array> 262 + </dict> 263 + </plist> 264 + EOF 265 + 266 + - name: Package app (non-Windows) 267 + if: ${{ env.is_platform_enabled == 'true' && matrix.platform != 'windows' }} 268 + working-directory: tmp/app 269 + run: | 270 + if [ '${{ matrix.platform }}' = 'macos' ]; then 271 + ln -s /Applications . 272 + hdiutil create -fs HFS+ -volname '${{ env.app_package_name }}' -srcfolder . '${{ env.package }}' 273 + else 274 + zip --recurse-paths '${{ env.package }}' '${{ env.app_package_name }}' 275 + fi 276 + 277 + - name: Package app (Windows) 278 + if: ${{ env.is_platform_enabled == 'true' && matrix.platform == 'windows' }} 279 + working-directory: tmp/app 280 + shell: pwsh 281 + run: Compress-Archive -Path '${{ env.app_package_name }}' -DestinationPath '${{ env.package }}' 282 + 283 + - name: Upload package to workflow artifacts 284 + if: ${{ env.is_platform_enabled == 'true' }} 285 + uses: actions/upload-artifact@v4 286 + with: 287 + path: tmp/app/${{ env.package }} 288 + name: package-${{ matrix.platform }} 289 + retention-days: 1 290 + 291 + - name: Upload package to GitHub release 292 + if: ${{ env.is_platform_enabled == 'true' && env.upload_to_github == 'true' }} 293 + uses: svenstaro/upload-release-action@v2 294 + with: 295 + repo_token: ${{ secrets.GITHUB_TOKEN }} 296 + file: tmp/app/${{ env.package }} 297 + asset_name: ${{ env.package }} 298 + release_name: ${{ env.version }} 299 + tag: ${{ env.version }} 300 + overwrite: true 301 + 302 + # Upload all packages to itch.io. 303 + upload-to-itch: 304 + runs-on: ubuntu-latest 305 + needs: 306 + - forward-env 307 + - get-version 308 + - build 309 + if: ${{ needs.forward-env.outputs.upload_to_itch != '' }} 310 + 311 + steps: 312 + - name: Download all packages 313 + uses: actions/download-artifact@v4 314 + with: 315 + pattern: package-* 316 + path: tmp 317 + 318 + - name: Install butler 319 + run: | 320 + curl -L -o butler.zip 'https://broth.itch.zone/butler/linux-amd64/LATEST/archive/default' 321 + unzip butler.zip 322 + chmod +x butler 323 + ./butler -V 324 + 325 + - name: Upload all packages to itch.io 326 + env: 327 + BUTLER_API_KEY: ${{ secrets.BUTLER_CREDENTIALS }} 328 + run: | 329 + for channel in $(ls tmp); do 330 + ./butler push \ 331 + --fix-permissions \ 332 + --userversion='${{ needs.get-version.outputs.version }}' \ 333 + tmp/"${channel}"/* \ 334 + '${{ env.upload_to_itch }}':"${channel#package-}" 335 + done
+15
.gitignore
··· 1 + # Rust builds 2 + /target 3 + # This file contains environment-specific configuration like linker settings 4 + .cargo/config.toml 5 + /assets/images/ducky.png 6 + /assets/audio/sound_effects/step2.ogg 7 + /assets/audio/sound_effects/button_hover.ogg 8 + /assets/audio/sound_effects/step4.ogg 9 + /assets/images/splash.png 10 + /assets/audio/sound_effects/button_click.ogg 11 + /assets/audio/music/Fluffing A Duck.ogg 12 + /assets/audio/music/Monkeys Spinning Monkeys.ogg 13 + /assets/audio/sound_effects/step1.ogg 14 + /assets/audio/sound_effects/step3.ogg 15 + asset-all
+8
.idea/.gitignore
··· 1 + # Default ignored files 2 + /shelf/ 3 + /workspace.xml 4 + # Editor-based HTTP Client requests 5 + /httpRequests/ 6 + # Datasource local storage ignored files 7 + /dataSources/ 8 + /dataSources.local.xml
+7
.idea/dictionaries/project.xml
··· 1 + <component name="ProjectDictionaryState"> 2 + <dictionary name="project"> 3 + <words> 4 + <w>esponential</w> 5 + </words> 6 + </dictionary> 7 + </component>
+20
.idea/runConfigurations/Run_Native_Debug.xml
··· 1 + <component name="ProjectRunConfigurationManager"> 2 + <configuration default="false" name="Run Native Debug" type="CargoCommandRunConfiguration" factoryName="Cargo Command"> 3 + <option name="buildProfileId" value="dev" /> 4 + <option name="command" value="run --no-default-features" /> 5 + <option name="workingDirectory" value="file://$PROJECT_DIR$" /> 6 + <envs /> 7 + <option name="emulateTerminal" value="true" /> 8 + <option name="channel" value="DEFAULT" /> 9 + <option name="requiredFeatures" value="true" /> 10 + <option name="allFeatures" value="false" /> 11 + <option name="withSudo" value="false" /> 12 + <option name="buildTarget" value="REMOTE" /> 13 + <option name="backtrace" value="SHORT" /> 14 + <option name="isRedirectInput" value="false" /> 15 + <option name="redirectInputPath" value="" /> 16 + <method v="2"> 17 + <option name="CARGO.BUILD_TASK_PROVIDER" enabled="true" /> 18 + </method> 19 + </configuration> 20 + </component>
+19
.idea/runConfigurations/Run_Native_dev.xml
··· 1 + <component name="ProjectRunConfigurationManager"> 2 + <configuration default="false" name="Run Native dev" type="ShConfigurationType" folderName="Build"> 3 + <option name="SCRIPT_TEXT" value="bevy run" /> 4 + <option name="INDEPENDENT_SCRIPT_PATH" value="true" /> 5 + <option name="SCRIPT_PATH" value="" /> 6 + <option name="SCRIPT_OPTIONS" value="" /> 7 + <option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" /> 8 + <option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" /> 9 + <option name="INDEPENDENT_INTERPRETER_PATH" value="true" /> 10 + <option name="INTERPRETER_PATH" value="/bin/bash" /> 11 + <option name="INTERPRETER_OPTIONS" value="" /> 12 + <option name="EXECUTE_IN_TERMINAL" value="false" /> 13 + <option name="EXECUTE_SCRIPT_FILE" value="false" /> 14 + <envs> 15 + <env name="RUST_BACKTRACE" value="full" /> 16 + </envs> 17 + <method v="2" /> 18 + </configuration> 19 + </component>
+17
.idea/runConfigurations/Run_Native_release.xml
··· 1 + <component name="ProjectRunConfigurationManager"> 2 + <configuration default="false" name="Run Native release" type="ShConfigurationType" folderName="Build"> 3 + <option name="SCRIPT_TEXT" value="bevy run --release" /> 4 + <option name="INDEPENDENT_SCRIPT_PATH" value="true" /> 5 + <option name="SCRIPT_PATH" value="" /> 6 + <option name="SCRIPT_OPTIONS" value="" /> 7 + <option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" /> 8 + <option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" /> 9 + <option name="INDEPENDENT_INTERPRETER_PATH" value="true" /> 10 + <option name="INTERPRETER_PATH" value="/bin/bash" /> 11 + <option name="INTERPRETER_OPTIONS" value="" /> 12 + <option name="EXECUTE_IN_TERMINAL" value="false" /> 13 + <option name="EXECUTE_SCRIPT_FILE" value="false" /> 14 + <envs /> 15 + <method v="2" /> 16 + </configuration> 17 + </component>
+19
.idea/runConfigurations/Run_Web_dev.xml
··· 1 + <component name="ProjectRunConfigurationManager"> 2 + <configuration default="false" name="Run Web dev" type="ShConfigurationType" folderName="Build"> 3 + <option name="SCRIPT_TEXT" value="bevy run --yes web" /> 4 + <option name="INDEPENDENT_SCRIPT_PATH" value="true" /> 5 + <option name="SCRIPT_PATH" value="" /> 6 + <option name="SCRIPT_OPTIONS" value="" /> 7 + <option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" /> 8 + <option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" /> 9 + <option name="INDEPENDENT_INTERPRETER_PATH" value="true" /> 10 + <option name="INTERPRETER_PATH" value="/bin/bash" /> 11 + <option name="INTERPRETER_OPTIONS" value="" /> 12 + <option name="EXECUTE_IN_TERMINAL" value="false" /> 13 + <option name="EXECUTE_SCRIPT_FILE" value="false" /> 14 + <envs> 15 + <env name="RUST_BACKTRACE" value="full" /> 16 + </envs> 17 + <method v="2" /> 18 + </configuration> 19 + </component>
+17
.idea/runConfigurations/Run_Web_release.xml
··· 1 + <component name="ProjectRunConfigurationManager"> 2 + <configuration default="false" name="Run Web release" type="ShConfigurationType" folderName="Build"> 3 + <option name="SCRIPT_TEXT" value="bevy run --yes --release web" /> 4 + <option name="INDEPENDENT_SCRIPT_PATH" value="true" /> 5 + <option name="SCRIPT_PATH" value="" /> 6 + <option name="SCRIPT_OPTIONS" value="" /> 7 + <option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" /> 8 + <option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" /> 9 + <option name="INDEPENDENT_INTERPRETER_PATH" value="true" /> 10 + <option name="INTERPRETER_PATH" value="/bin/bash" /> 11 + <option name="INTERPRETER_OPTIONS" value="" /> 12 + <option name="EXECUTE_IN_TERMINAL" value="false" /> 13 + <option name="EXECUTE_SCRIPT_FILE" value="false" /> 14 + <envs /> 15 + <method v="2" /> 16 + </configuration> 17 + </component>
+6
.idea/vcs.xml
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="VcsDirectoryMappings"> 4 + <mapping directory="" vcs="Git" /> 5 + </component> 6 + </project>
+68
.vscode/bevy.code-snippets
··· 1 + { 2 + "Bevy: New top-level function Plugin": { 3 + "scope": "rust", 4 + "prefix": "plugin", 5 + "body": [ 6 + "use bevy::prelude::*;", 7 + "", 8 + "pub(super) fn plugin(app: &mut App) {", 9 + "\t$0", 10 + "}" 11 + ] 12 + }, 13 + "Bevy: New Component": { 14 + "scope": "rust", 15 + "prefix": "component", 16 + "body": [ 17 + "#[derive(Component, Reflect, Debug)]", 18 + "#[reflect(Component)]", 19 + "struct $1;" 20 + ] 21 + }, 22 + "Bevy: New Resource": { 23 + "scope": "rust", 24 + "prefix": "resource", 25 + "body": [ 26 + "#[derive(Resource, Reflect, Debug, Default)]", 27 + "#[reflect(Resource)]", 28 + "struct $1;" 29 + ] 30 + }, 31 + "Bevy: New Event": { 32 + "scope": "rust", 33 + "prefix": "event", 34 + "body": [ 35 + "#[derive(Event, Debug)]", 36 + "struct $1;" 37 + ] 38 + }, 39 + "Bevy: New SystemSet": { 40 + "scope": "rust", 41 + "prefix": "systemset", 42 + "body": [ 43 + "#[derive(SystemSet, Copy, Clone, Eq, PartialEq, Hash, Debug)]", 44 + "enum $1 {", 45 + "\t$0", 46 + "}" 47 + ] 48 + }, 49 + "Bevy: New Schedule": { 50 + "scope": "rust", 51 + "prefix": "schedule", 52 + "body": [ 53 + "#[derive(ScheduleLabel, Copy, Clone, Eq, PartialEq, Hash, Debug)]", 54 + "struct $1;" 55 + ] 56 + }, 57 + "Bevy: New States": { 58 + "scope": "rust", 59 + "prefix": "states", 60 + "body": [ 61 + "#[derive(States, Copy, Clone, Eq, PartialEq, Hash, Debug, Default)]", 62 + "enum $1 {", 63 + "\t#[default]", 64 + "\t$0", 65 + "}" 66 + ] 67 + } 68 + }
+9
.vscode/extensions.json
··· 1 + { 2 + "recommendations": [ 3 + "fill-labs.dependi", 4 + "editorconfig.editorconfig", 5 + "tamasfe.even-better-toml", 6 + "rust-lang.rust-analyzer", 7 + "a5huynh.vscode-ron" 8 + ] 9 + }
+9
.vscode/settings.json
··· 1 + { 2 + // Allow `rust-analyzer` and `cargo` to run simultaneously. 3 + // This uses extra storage space, so consider commenting it out. 4 + "rust-analyzer.cargo.targetDir": true, 5 + // Display the directory of `mod.rs` files in the tab above the text editor. 6 + "workbench.editor.customLabels.patterns": { 7 + "**/mod.rs": "${dirname}/mod.rs" 8 + }, 9 + }
+84
.vscode/tasks.json
··· 1 + { 2 + "version": "2.0.0", 3 + "tasks": [ 4 + { 5 + "label": "Run native dev", 6 + "type": "process", 7 + "command": "bevy", 8 + "args": [ 9 + "run" 10 + ], 11 + "options": { 12 + "env": { 13 + "RUST_BACKTRACE": "full" 14 + } 15 + }, 16 + "presentation": { 17 + "clear": true 18 + }, 19 + "problemMatcher": [ 20 + "$rustc" 21 + ], 22 + "group": { 23 + "kind": "build", 24 + "isDefault": true 25 + } 26 + }, 27 + { 28 + "label": "Run native release", 29 + "type": "process", 30 + "command": "bevy", 31 + "args": [ 32 + "run", 33 + "--release" 34 + ], 35 + "presentation": { 36 + "clear": true 37 + }, 38 + "problemMatcher": [ 39 + "$rustc" 40 + ], 41 + "group": "build" 42 + }, 43 + { 44 + "label": "Run web dev", 45 + "type": "process", 46 + "command": "bevy", 47 + "args": [ 48 + "run", 49 + "--yes", 50 + "web" 51 + ], 52 + "options": { 53 + "env": { 54 + "RUST_BACKTRACE": "full" 55 + } 56 + }, 57 + "presentation": { 58 + "clear": true 59 + }, 60 + "problemMatcher": [ 61 + "$rustc" 62 + ], 63 + "group": "build" 64 + }, 65 + { 66 + "label": "Run web release", 67 + "type": "process", 68 + "command": "bevy", 69 + "args": [ 70 + "run", 71 + "--yes", 72 + "--release", 73 + "web" 74 + ], 75 + "presentation": { 76 + "clear": true 77 + }, 78 + "problemMatcher": [ 79 + "$rustc" 80 + ], 81 + "group": "build" 82 + } 83 + ] 84 + }
+6542
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "ab_glyph" 7 + version = "0.2.29" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" 10 + dependencies = [ 11 + "ab_glyph_rasterizer", 12 + "owned_ttf_parser", 13 + ] 14 + 15 + [[package]] 16 + name = "ab_glyph_rasterizer" 17 + version = "0.1.8" 18 + source = "registry+https://github.com/rust-lang/crates.io-index" 19 + checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" 20 + 21 + [[package]] 22 + name = "accesskit" 23 + version = "0.18.0" 24 + source = "registry+https://github.com/rust-lang/crates.io-index" 25 + checksum = "becf0eb5215b6ecb0a739c31c21bd83c4f326524c9b46b7e882d77559b60a529" 26 + 27 + [[package]] 28 + name = "accesskit_consumer" 29 + version = "0.27.0" 30 + source = "registry+https://github.com/rust-lang/crates.io-index" 31 + checksum = "d0bf66a7bf0b7ea4fd7742d50b64782a88f99217cf246b3f93b4162528dde520" 32 + dependencies = [ 33 + "accesskit", 34 + "hashbrown", 35 + "immutable-chunkmap", 36 + ] 37 + 38 + [[package]] 39 + name = "accesskit_macos" 40 + version = "0.19.0" 41 + source = "registry+https://github.com/rust-lang/crates.io-index" 42 + checksum = "09e230718177753b4e4ad9e1d9f6cfc2f4921212d4c1c480b253f526babb258d" 43 + dependencies = [ 44 + "accesskit", 45 + "accesskit_consumer", 46 + "hashbrown", 47 + "objc2 0.5.2", 48 + "objc2-app-kit 0.2.2", 49 + "objc2-foundation 0.2.2", 50 + ] 51 + 52 + [[package]] 53 + name = "accesskit_windows" 54 + version = "0.25.0" 55 + source = "registry+https://github.com/rust-lang/crates.io-index" 56 + checksum = "65178f3df98a51e4238e584fcb255cb1a4f9111820848eeddd37663be40a625f" 57 + dependencies = [ 58 + "accesskit", 59 + "accesskit_consumer", 60 + "hashbrown", 61 + "paste", 62 + "static_assertions", 63 + "windows 0.58.0", 64 + "windows-core 0.58.0", 65 + ] 66 + 67 + [[package]] 68 + name = "accesskit_winit" 69 + version = "0.25.0" 70 + source = "registry+https://github.com/rust-lang/crates.io-index" 71 + checksum = "34d941bb8c414caba6e206de669c7dc0dbeb305640ea890772ee422a40e6b89f" 72 + dependencies = [ 73 + "accesskit", 74 + "accesskit_macos", 75 + "accesskit_windows", 76 + "raw-window-handle", 77 + "winit", 78 + ] 79 + 80 + [[package]] 81 + name = "adler2" 82 + version = "2.0.0" 83 + source = "registry+https://github.com/rust-lang/crates.io-index" 84 + checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 85 + 86 + [[package]] 87 + name = "ahash" 88 + version = "0.8.12" 89 + source = "registry+https://github.com/rust-lang/crates.io-index" 90 + checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" 91 + dependencies = [ 92 + "cfg-if", 93 + "getrandom 0.3.3", 94 + "once_cell", 95 + "version_check", 96 + "zerocopy", 97 + ] 98 + 99 + [[package]] 100 + name = "aho-corasick" 101 + version = "1.1.3" 102 + source = "registry+https://github.com/rust-lang/crates.io-index" 103 + checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 104 + dependencies = [ 105 + "memchr", 106 + ] 107 + 108 + [[package]] 109 + name = "aligned-vec" 110 + version = "0.5.0" 111 + source = "registry+https://github.com/rust-lang/crates.io-index" 112 + checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" 113 + 114 + [[package]] 115 + name = "alsa" 116 + version = "0.9.1" 117 + source = "registry+https://github.com/rust-lang/crates.io-index" 118 + checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" 119 + dependencies = [ 120 + "alsa-sys", 121 + "bitflags 2.9.1", 122 + "cfg-if", 123 + "libc", 124 + ] 125 + 126 + [[package]] 127 + name = "alsa-sys" 128 + version = "0.3.1" 129 + source = "registry+https://github.com/rust-lang/crates.io-index" 130 + checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" 131 + dependencies = [ 132 + "libc", 133 + "pkg-config", 134 + ] 135 + 136 + [[package]] 137 + name = "android-activity" 138 + version = "0.6.0" 139 + source = "registry+https://github.com/rust-lang/crates.io-index" 140 + checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" 141 + dependencies = [ 142 + "android-properties", 143 + "bitflags 2.9.1", 144 + "cc", 145 + "cesu8", 146 + "jni", 147 + "jni-sys", 148 + "libc", 149 + "log", 150 + "ndk 0.9.0", 151 + "ndk-context", 152 + "ndk-sys 0.6.0+11769913", 153 + "num_enum", 154 + "thiserror 1.0.69", 155 + ] 156 + 157 + [[package]] 158 + name = "android-properties" 159 + version = "0.2.2" 160 + source = "registry+https://github.com/rust-lang/crates.io-index" 161 + checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" 162 + 163 + [[package]] 164 + name = "android_log-sys" 165 + version = "0.3.2" 166 + source = "registry+https://github.com/rust-lang/crates.io-index" 167 + checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d" 168 + 169 + [[package]] 170 + name = "android_system_properties" 171 + version = "0.1.5" 172 + source = "registry+https://github.com/rust-lang/crates.io-index" 173 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 174 + dependencies = [ 175 + "libc", 176 + ] 177 + 178 + [[package]] 179 + name = "anyhow" 180 + version = "1.0.98" 181 + source = "registry+https://github.com/rust-lang/crates.io-index" 182 + checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 183 + 184 + [[package]] 185 + name = "approx" 186 + version = "0.5.1" 187 + source = "registry+https://github.com/rust-lang/crates.io-index" 188 + checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" 189 + dependencies = [ 190 + "num-traits", 191 + ] 192 + 193 + [[package]] 194 + name = "arbitrary" 195 + version = "1.4.1" 196 + source = "registry+https://github.com/rust-lang/crates.io-index" 197 + checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" 198 + 199 + [[package]] 200 + name = "arboard" 201 + version = "3.5.0" 202 + source = "registry+https://github.com/rust-lang/crates.io-index" 203 + checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70" 204 + dependencies = [ 205 + "clipboard-win", 206 + "image", 207 + "log", 208 + "objc2 0.6.1", 209 + "objc2-app-kit 0.3.1", 210 + "objc2-core-foundation", 211 + "objc2-core-graphics", 212 + "objc2-foundation 0.3.1", 213 + "parking_lot", 214 + "percent-encoding", 215 + "windows-sys 0.59.0", 216 + "x11rb", 217 + ] 218 + 219 + [[package]] 220 + name = "arg_enum_proc_macro" 221 + version = "0.3.4" 222 + source = "registry+https://github.com/rust-lang/crates.io-index" 223 + checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" 224 + dependencies = [ 225 + "proc-macro2", 226 + "quote", 227 + "syn", 228 + ] 229 + 230 + [[package]] 231 + name = "arrayref" 232 + version = "0.3.9" 233 + source = "registry+https://github.com/rust-lang/crates.io-index" 234 + checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" 235 + 236 + [[package]] 237 + name = "arrayvec" 238 + version = "0.7.6" 239 + source = "registry+https://github.com/rust-lang/crates.io-index" 240 + checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 241 + 242 + [[package]] 243 + name = "as-raw-xcb-connection" 244 + version = "1.0.1" 245 + source = "registry+https://github.com/rust-lang/crates.io-index" 246 + checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" 247 + 248 + [[package]] 249 + name = "ash" 250 + version = "0.38.0+1.3.281" 251 + source = "registry+https://github.com/rust-lang/crates.io-index" 252 + checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" 253 + dependencies = [ 254 + "libloading", 255 + ] 256 + 257 + [[package]] 258 + name = "assert_type_match" 259 + version = "0.1.1" 260 + source = "registry+https://github.com/rust-lang/crates.io-index" 261 + checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043" 262 + dependencies = [ 263 + "proc-macro2", 264 + "quote", 265 + "syn", 266 + ] 267 + 268 + [[package]] 269 + name = "async-broadcast" 270 + version = "0.7.2" 271 + source = "registry+https://github.com/rust-lang/crates.io-index" 272 + checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" 273 + dependencies = [ 274 + "event-listener", 275 + "event-listener-strategy", 276 + "futures-core", 277 + "pin-project-lite", 278 + ] 279 + 280 + [[package]] 281 + name = "async-channel" 282 + version = "2.3.1" 283 + source = "registry+https://github.com/rust-lang/crates.io-index" 284 + checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" 285 + dependencies = [ 286 + "concurrent-queue", 287 + "event-listener-strategy", 288 + "futures-core", 289 + "pin-project-lite", 290 + ] 291 + 292 + [[package]] 293 + name = "async-executor" 294 + version = "1.13.2" 295 + source = "registry+https://github.com/rust-lang/crates.io-index" 296 + checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" 297 + dependencies = [ 298 + "async-task", 299 + "concurrent-queue", 300 + "fastrand", 301 + "futures-lite", 302 + "pin-project-lite", 303 + "slab", 304 + ] 305 + 306 + [[package]] 307 + name = "async-fs" 308 + version = "2.1.2" 309 + source = "registry+https://github.com/rust-lang/crates.io-index" 310 + checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" 311 + dependencies = [ 312 + "async-lock", 313 + "blocking", 314 + "futures-lite", 315 + ] 316 + 317 + [[package]] 318 + name = "async-lock" 319 + version = "3.4.0" 320 + source = "registry+https://github.com/rust-lang/crates.io-index" 321 + checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 322 + dependencies = [ 323 + "event-listener", 324 + "event-listener-strategy", 325 + "pin-project-lite", 326 + ] 327 + 328 + [[package]] 329 + name = "async-task" 330 + version = "4.7.1" 331 + source = "registry+https://github.com/rust-lang/crates.io-index" 332 + checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 333 + dependencies = [ 334 + "portable-atomic", 335 + ] 336 + 337 + [[package]] 338 + name = "atomic-waker" 339 + version = "1.1.2" 340 + source = "registry+https://github.com/rust-lang/crates.io-index" 341 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 342 + dependencies = [ 343 + "portable-atomic", 344 + ] 345 + 346 + [[package]] 347 + name = "atomicow" 348 + version = "1.1.0" 349 + source = "registry+https://github.com/rust-lang/crates.io-index" 350 + checksum = "f52e8890bb9844440d0c412fa74b67fd2f14e85248b6e00708059b6da9e5f8bf" 351 + dependencies = [ 352 + "portable-atomic", 353 + "portable-atomic-util", 354 + ] 355 + 356 + [[package]] 357 + name = "autocfg" 358 + version = "1.4.0" 359 + source = "registry+https://github.com/rust-lang/crates.io-index" 360 + checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 361 + 362 + [[package]] 363 + name = "av1-grain" 364 + version = "0.2.4" 365 + source = "registry+https://github.com/rust-lang/crates.io-index" 366 + checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" 367 + dependencies = [ 368 + "anyhow", 369 + "arrayvec", 370 + "log", 371 + "nom", 372 + "num-rational", 373 + "v_frame", 374 + ] 375 + 376 + [[package]] 377 + name = "avif-serialize" 378 + version = "0.8.3" 379 + source = "registry+https://github.com/rust-lang/crates.io-index" 380 + checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e" 381 + dependencies = [ 382 + "arrayvec", 383 + ] 384 + 385 + [[package]] 386 + name = "base64" 387 + version = "0.21.7" 388 + source = "registry+https://github.com/rust-lang/crates.io-index" 389 + checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 390 + 391 + [[package]] 392 + name = "base64" 393 + version = "0.22.1" 394 + source = "registry+https://github.com/rust-lang/crates.io-index" 395 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 396 + 397 + [[package]] 398 + name = "bevy" 399 + version = "0.16.0" 400 + source = "registry+https://github.com/rust-lang/crates.io-index" 401 + checksum = "2a5cd3b24a5adb7c7378da7b3eea47639877643d11b6b087fc8a8094f2528615" 402 + dependencies = [ 403 + "bevy_dylib", 404 + "bevy_internal", 405 + ] 406 + 407 + [[package]] 408 + name = "bevy-inspector-egui" 409 + version = "0.31.0" 410 + source = "registry+https://github.com/rust-lang/crates.io-index" 411 + checksum = "4971e763f289921fd4616418628458bec26a6fc13fe4299c0e4066f39d7ceaa2" 412 + dependencies = [ 413 + "bevy-inspector-egui-derive", 414 + "bevy_app", 415 + "bevy_asset", 416 + "bevy_color", 417 + "bevy_core_pipeline", 418 + "bevy_ecs", 419 + "bevy_egui", 420 + "bevy_image", 421 + "bevy_log", 422 + "bevy_math", 423 + "bevy_pbr", 424 + "bevy_platform", 425 + "bevy_reflect", 426 + "bevy_render", 427 + "bevy_state", 428 + "bevy_time", 429 + "bevy_utils", 430 + "bevy_window", 431 + "bytemuck", 432 + "disqualified", 433 + "egui", 434 + "fuzzy-matcher", 435 + "image", 436 + "smallvec", 437 + "uuid", 438 + "winit", 439 + ] 440 + 441 + [[package]] 442 + name = "bevy-inspector-egui-derive" 443 + version = "0.31.0" 444 + source = "registry+https://github.com/rust-lang/crates.io-index" 445 + checksum = "2656316165dbe2af6b3acaa763332f5dbdd12f809d59f5bf4304e0642a8005c9" 446 + dependencies = [ 447 + "proc-macro2", 448 + "quote", 449 + "syn", 450 + ] 451 + 452 + [[package]] 453 + name = "bevy_a11y" 454 + version = "0.16.0" 455 + source = "registry+https://github.com/rust-lang/crates.io-index" 456 + checksum = "91ed969a58fbe449ef35ebec58ab19578302537f34ee8a35d04e5a038b3c40f5" 457 + dependencies = [ 458 + "accesskit", 459 + "bevy_app", 460 + "bevy_derive", 461 + "bevy_ecs", 462 + "bevy_reflect", 463 + ] 464 + 465 + [[package]] 466 + name = "bevy_animation" 467 + version = "0.16.0" 468 + source = "registry+https://github.com/rust-lang/crates.io-index" 469 + checksum = "3647b67c6bfd456922b2720ccef980dec01742d155d0eb454dc3d8fdc65e7aff" 470 + dependencies = [ 471 + "bevy_app", 472 + "bevy_asset", 473 + "bevy_color", 474 + "bevy_derive", 475 + "bevy_ecs", 476 + "bevy_log", 477 + "bevy_math", 478 + "bevy_mesh", 479 + "bevy_platform", 480 + "bevy_reflect", 481 + "bevy_render", 482 + "bevy_time", 483 + "bevy_transform", 484 + "bevy_utils", 485 + "blake3", 486 + "derive_more", 487 + "downcast-rs 2.0.1", 488 + "either", 489 + "petgraph", 490 + "ron", 491 + "serde", 492 + "smallvec", 493 + "thiserror 2.0.12", 494 + "thread_local", 495 + "tracing", 496 + "uuid", 497 + ] 498 + 499 + [[package]] 500 + name = "bevy_app" 501 + version = "0.16.0" 502 + source = "registry+https://github.com/rust-lang/crates.io-index" 503 + checksum = "a2b6267ac23a9947d5b2725ff047a1e1add70076d85fa9fb73d044ab9bea1f3c" 504 + dependencies = [ 505 + "bevy_derive", 506 + "bevy_ecs", 507 + "bevy_platform", 508 + "bevy_reflect", 509 + "bevy_tasks", 510 + "bevy_utils", 511 + "cfg-if", 512 + "console_error_panic_hook", 513 + "ctrlc", 514 + "downcast-rs 2.0.1", 515 + "log", 516 + "thiserror 2.0.12", 517 + "variadics_please", 518 + "wasm-bindgen", 519 + "web-sys", 520 + ] 521 + 522 + [[package]] 523 + name = "bevy_asset" 524 + version = "0.16.0" 525 + source = "registry+https://github.com/rust-lang/crates.io-index" 526 + checksum = "0698040d63199391ea77fd02e039630748e3e335c3070c6d932fd96cbf80f5d6" 527 + dependencies = [ 528 + "async-broadcast", 529 + "async-fs", 530 + "async-lock", 531 + "atomicow", 532 + "bevy_app", 533 + "bevy_asset_macros", 534 + "bevy_ecs", 535 + "bevy_platform", 536 + "bevy_reflect", 537 + "bevy_tasks", 538 + "bevy_utils", 539 + "bevy_window", 540 + "bitflags 2.9.1", 541 + "blake3", 542 + "crossbeam-channel", 543 + "derive_more", 544 + "disqualified", 545 + "downcast-rs 2.0.1", 546 + "either", 547 + "futures-io", 548 + "futures-lite", 549 + "js-sys", 550 + "notify-debouncer-full", 551 + "parking_lot", 552 + "ron", 553 + "serde", 554 + "stackfuture", 555 + "thiserror 2.0.12", 556 + "tracing", 557 + "uuid", 558 + "wasm-bindgen", 559 + "wasm-bindgen-futures", 560 + "web-sys", 561 + ] 562 + 563 + [[package]] 564 + name = "bevy_asset_macros" 565 + version = "0.16.0" 566 + source = "registry+https://github.com/rust-lang/crates.io-index" 567 + checksum = "0bf8c00b5d532f8e5ac7b49af10602f9f7774a2d522cf0638323b5dfeee7b31c" 568 + dependencies = [ 569 + "bevy_macro_utils", 570 + "proc-macro2", 571 + "quote", 572 + "syn", 573 + ] 574 + 575 + [[package]] 576 + name = "bevy_audio" 577 + version = "0.16.0" 578 + source = "registry+https://github.com/rust-lang/crates.io-index" 579 + checksum = "74e54154e6369abdbaf5098e20424d59197c9b701d4f79fe8d0d2bde03d25f12" 580 + dependencies = [ 581 + "bevy_app", 582 + "bevy_asset", 583 + "bevy_derive", 584 + "bevy_ecs", 585 + "bevy_math", 586 + "bevy_reflect", 587 + "bevy_transform", 588 + "cpal", 589 + "rodio", 590 + "tracing", 591 + ] 592 + 593 + [[package]] 594 + name = "bevy_color" 595 + version = "0.16.1" 596 + source = "registry+https://github.com/rust-lang/crates.io-index" 597 + checksum = "ddf6a5ad35496bbc41713efbcf06ab72b9a310fabcab0f9db1debb56e8488c6e" 598 + dependencies = [ 599 + "bevy_math", 600 + "bevy_reflect", 601 + "bytemuck", 602 + "derive_more", 603 + "encase", 604 + "serde", 605 + "thiserror 2.0.12", 606 + "wgpu-types", 607 + ] 608 + 609 + [[package]] 610 + name = "bevy_core_pipeline" 611 + version = "0.16.0" 612 + source = "registry+https://github.com/rust-lang/crates.io-index" 613 + checksum = "55c2310717b9794e4a45513ee5946a7be0838852a4c1e185884195e1a8688ff3" 614 + dependencies = [ 615 + "bevy_app", 616 + "bevy_asset", 617 + "bevy_color", 618 + "bevy_derive", 619 + "bevy_diagnostic", 620 + "bevy_ecs", 621 + "bevy_image", 622 + "bevy_math", 623 + "bevy_platform", 624 + "bevy_reflect", 625 + "bevy_render", 626 + "bevy_transform", 627 + "bevy_utils", 628 + "bevy_window", 629 + "bitflags 2.9.1", 630 + "bytemuck", 631 + "nonmax", 632 + "radsort", 633 + "serde", 634 + "smallvec", 635 + "thiserror 2.0.12", 636 + "tracing", 637 + ] 638 + 639 + [[package]] 640 + name = "bevy_derive" 641 + version = "0.16.0" 642 + source = "registry+https://github.com/rust-lang/crates.io-index" 643 + checksum = "f626531b9c05c25a758ede228727bd11c2c2c8498ecbed9925044386d525a2a3" 644 + dependencies = [ 645 + "bevy_macro_utils", 646 + "quote", 647 + "syn", 648 + ] 649 + 650 + [[package]] 651 + name = "bevy_dev_tools" 652 + version = "0.16.0" 653 + source = "registry+https://github.com/rust-lang/crates.io-index" 654 + checksum = "3e1ae2246832d0fce2f6eb3b7f3d05084a06e36b24bb72cb8b9a171de7e4a341" 655 + dependencies = [ 656 + "bevy_app", 657 + "bevy_asset", 658 + "bevy_color", 659 + "bevy_diagnostic", 660 + "bevy_ecs", 661 + "bevy_input", 662 + "bevy_picking", 663 + "bevy_reflect", 664 + "bevy_render", 665 + "bevy_state", 666 + "bevy_text", 667 + "bevy_time", 668 + "bevy_ui", 669 + "bevy_utils", 670 + "bevy_window", 671 + "tracing", 672 + ] 673 + 674 + [[package]] 675 + name = "bevy_diagnostic" 676 + version = "0.16.0" 677 + source = "registry+https://github.com/rust-lang/crates.io-index" 678 + checksum = "048a1ff3944a534b8472516866284181eef0a75b6dd4d39b6e5925715e350766" 679 + dependencies = [ 680 + "bevy_app", 681 + "bevy_ecs", 682 + "bevy_platform", 683 + "bevy_tasks", 684 + "bevy_time", 685 + "bevy_utils", 686 + "const-fnv1a-hash", 687 + "log", 688 + "serde", 689 + "sysinfo", 690 + ] 691 + 692 + [[package]] 693 + name = "bevy_dylib" 694 + version = "0.16.0" 695 + source = "registry+https://github.com/rust-lang/crates.io-index" 696 + checksum = "843c7ce266dfc46e49d01fbf9aa1829d33b70a1859b9ed6a526ac03070c52e97" 697 + dependencies = [ 698 + "bevy_internal", 699 + ] 700 + 701 + [[package]] 702 + name = "bevy_ecs" 703 + version = "0.16.0" 704 + source = "registry+https://github.com/rust-lang/crates.io-index" 705 + checksum = "d9e807b5d9aab3bb8dfe47e7a44c9ff088bad2ceefe299b80ac77609a87fe9d4" 706 + dependencies = [ 707 + "arrayvec", 708 + "bevy_ecs_macros", 709 + "bevy_platform", 710 + "bevy_ptr", 711 + "bevy_reflect", 712 + "bevy_tasks", 713 + "bevy_utils", 714 + "bitflags 2.9.1", 715 + "bumpalo", 716 + "concurrent-queue", 717 + "derive_more", 718 + "disqualified", 719 + "fixedbitset", 720 + "indexmap", 721 + "log", 722 + "nonmax", 723 + "serde", 724 + "smallvec", 725 + "thiserror 2.0.12", 726 + "variadics_please", 727 + ] 728 + 729 + [[package]] 730 + name = "bevy_ecs_macros" 731 + version = "0.16.0" 732 + source = "registry+https://github.com/rust-lang/crates.io-index" 733 + checksum = "467d7bb98aeb8dd30f36e6a773000c12a891d4f1bee2adc3841ec89cc8eaf54e" 734 + dependencies = [ 735 + "bevy_macro_utils", 736 + "proc-macro2", 737 + "quote", 738 + "syn", 739 + ] 740 + 741 + [[package]] 742 + name = "bevy_egui" 743 + version = "0.34.1" 744 + source = "registry+https://github.com/rust-lang/crates.io-index" 745 + checksum = "3a3d58a8afdb6100bca50251043a85320391742cae125d559f6cca3a16b84cdd" 746 + dependencies = [ 747 + "arboard", 748 + "bevy_app", 749 + "bevy_asset", 750 + "bevy_derive", 751 + "bevy_ecs", 752 + "bevy_image", 753 + "bevy_input", 754 + "bevy_log", 755 + "bevy_math", 756 + "bevy_picking", 757 + "bevy_platform", 758 + "bevy_reflect", 759 + "bevy_render", 760 + "bevy_time", 761 + "bevy_window", 762 + "bevy_winit", 763 + "bytemuck", 764 + "crossbeam-channel", 765 + "egui", 766 + "encase", 767 + "image", 768 + "js-sys", 769 + "thread_local", 770 + "wasm-bindgen", 771 + "wasm-bindgen-futures", 772 + "web-sys", 773 + "webbrowser", 774 + "wgpu-types", 775 + "winit", 776 + ] 777 + 778 + [[package]] 779 + name = "bevy_encase_derive" 780 + version = "0.16.0" 781 + source = "registry+https://github.com/rust-lang/crates.io-index" 782 + checksum = "b8bb31dc1090c6f8fabbf6b21994d19a12766e786885ee48ffc547f0f1fa7863" 783 + dependencies = [ 784 + "bevy_macro_utils", 785 + "encase_derive_impl", 786 + ] 787 + 788 + [[package]] 789 + name = "bevy_gilrs" 790 + version = "0.16.0" 791 + source = "registry+https://github.com/rust-lang/crates.io-index" 792 + checksum = "950c84596dbff8a9691a050c37bb610ef9398af56369c2c2dd6dc41ef7b717a5" 793 + dependencies = [ 794 + "bevy_app", 795 + "bevy_ecs", 796 + "bevy_input", 797 + "bevy_platform", 798 + "bevy_time", 799 + "bevy_utils", 800 + "gilrs", 801 + "thiserror 2.0.12", 802 + "tracing", 803 + ] 804 + 805 + [[package]] 806 + name = "bevy_gizmos" 807 + version = "0.16.0" 808 + source = "registry+https://github.com/rust-lang/crates.io-index" 809 + checksum = "54af8145b35ab2a830a6dd1058e23c1e1ddc4b893db79d295259ef82f51c7520" 810 + dependencies = [ 811 + "bevy_app", 812 + "bevy_asset", 813 + "bevy_color", 814 + "bevy_core_pipeline", 815 + "bevy_ecs", 816 + "bevy_gizmos_macros", 817 + "bevy_image", 818 + "bevy_math", 819 + "bevy_pbr", 820 + "bevy_reflect", 821 + "bevy_render", 822 + "bevy_sprite", 823 + "bevy_time", 824 + "bevy_transform", 825 + "bevy_utils", 826 + "bytemuck", 827 + "tracing", 828 + ] 829 + 830 + [[package]] 831 + name = "bevy_gizmos_macros" 832 + version = "0.16.0" 833 + source = "registry+https://github.com/rust-lang/crates.io-index" 834 + checksum = "40137ace61f092b7a09eba41d7d1e6aef941f53a7818b06ef86dcce7b6a1fd3f" 835 + dependencies = [ 836 + "bevy_macro_utils", 837 + "proc-macro2", 838 + "quote", 839 + "syn", 840 + ] 841 + 842 + [[package]] 843 + name = "bevy_gltf" 844 + version = "0.16.0" 845 + source = "registry+https://github.com/rust-lang/crates.io-index" 846 + checksum = "aa25b809ee024ef2682bafc1ca22ca8275552edb549dc6f69a030fdffd976c63" 847 + dependencies = [ 848 + "base64 0.22.1", 849 + "bevy_animation", 850 + "bevy_app", 851 + "bevy_asset", 852 + "bevy_color", 853 + "bevy_core_pipeline", 854 + "bevy_ecs", 855 + "bevy_image", 856 + "bevy_math", 857 + "bevy_mesh", 858 + "bevy_pbr", 859 + "bevy_platform", 860 + "bevy_reflect", 861 + "bevy_render", 862 + "bevy_scene", 863 + "bevy_tasks", 864 + "bevy_transform", 865 + "bevy_utils", 866 + "fixedbitset", 867 + "gltf", 868 + "itertools 0.14.0", 869 + "percent-encoding", 870 + "serde", 871 + "serde_json", 872 + "smallvec", 873 + "thiserror 2.0.12", 874 + "tracing", 875 + ] 876 + 877 + [[package]] 878 + name = "bevy_image" 879 + version = "0.16.0" 880 + source = "registry+https://github.com/rust-lang/crates.io-index" 881 + checksum = "840b25f7f58894c641739f756959028a04f519c448db7e2cd3e2e29fc5fd188d" 882 + dependencies = [ 883 + "bevy_app", 884 + "bevy_asset", 885 + "bevy_color", 886 + "bevy_math", 887 + "bevy_platform", 888 + "bevy_reflect", 889 + "bevy_utils", 890 + "bitflags 2.9.1", 891 + "bytemuck", 892 + "futures-lite", 893 + "guillotiere", 894 + "half", 895 + "image", 896 + "ktx2", 897 + "rectangle-pack", 898 + "ruzstd", 899 + "serde", 900 + "thiserror 2.0.12", 901 + "tracing", 902 + "wgpu-types", 903 + ] 904 + 905 + [[package]] 906 + name = "bevy_input" 907 + version = "0.16.0" 908 + source = "registry+https://github.com/rust-lang/crates.io-index" 909 + checksum = "763410715714f3d4d2dcdf077af276e2e4ea93fd8081b183d446d060ea95baaa" 910 + dependencies = [ 911 + "bevy_app", 912 + "bevy_ecs", 913 + "bevy_math", 914 + "bevy_platform", 915 + "bevy_reflect", 916 + "bevy_utils", 917 + "derive_more", 918 + "log", 919 + "smol_str", 920 + "thiserror 2.0.12", 921 + ] 922 + 923 + [[package]] 924 + name = "bevy_input_focus" 925 + version = "0.16.0" 926 + source = "registry+https://github.com/rust-lang/crates.io-index" 927 + checksum = "d7e7b4ed65e10927a39a987cf85ef98727dd319aafb6e6835f2cb05b883c6d66" 928 + dependencies = [ 929 + "bevy_app", 930 + "bevy_ecs", 931 + "bevy_input", 932 + "bevy_math", 933 + "bevy_reflect", 934 + "bevy_window", 935 + "log", 936 + "thiserror 2.0.12", 937 + ] 938 + 939 + [[package]] 940 + name = "bevy_internal" 941 + version = "0.16.0" 942 + source = "registry+https://github.com/rust-lang/crates.io-index" 943 + checksum = "526ffd64c58004cb97308826e896c07d0e23dc056c243b97492e31cdf72e2830" 944 + dependencies = [ 945 + "bevy_a11y", 946 + "bevy_animation", 947 + "bevy_app", 948 + "bevy_asset", 949 + "bevy_audio", 950 + "bevy_color", 951 + "bevy_core_pipeline", 952 + "bevy_derive", 953 + "bevy_dev_tools", 954 + "bevy_diagnostic", 955 + "bevy_ecs", 956 + "bevy_gilrs", 957 + "bevy_gizmos", 958 + "bevy_gltf", 959 + "bevy_image", 960 + "bevy_input", 961 + "bevy_input_focus", 962 + "bevy_log", 963 + "bevy_math", 964 + "bevy_pbr", 965 + "bevy_picking", 966 + "bevy_platform", 967 + "bevy_ptr", 968 + "bevy_reflect", 969 + "bevy_render", 970 + "bevy_scene", 971 + "bevy_sprite", 972 + "bevy_state", 973 + "bevy_tasks", 974 + "bevy_text", 975 + "bevy_time", 976 + "bevy_transform", 977 + "bevy_ui", 978 + "bevy_utils", 979 + "bevy_window", 980 + "bevy_winit", 981 + ] 982 + 983 + [[package]] 984 + name = "bevy_log" 985 + version = "0.16.0" 986 + source = "registry+https://github.com/rust-lang/crates.io-index" 987 + checksum = "7156df8d2f11135cf71c03eb4c11132b65201fd4f51648571e59e39c9c9ee2f6" 988 + dependencies = [ 989 + "android_log-sys", 990 + "bevy_app", 991 + "bevy_ecs", 992 + "bevy_utils", 993 + "tracing", 994 + "tracing-log", 995 + "tracing-oslog", 996 + "tracing-subscriber", 997 + "tracing-wasm", 998 + ] 999 + 1000 + [[package]] 1001 + name = "bevy_macro_utils" 1002 + version = "0.16.0" 1003 + source = "registry+https://github.com/rust-lang/crates.io-index" 1004 + checksum = "7a2473db70d8785b5c75d6dd951a2e51e9be2c2311122db9692c79c9d887517b" 1005 + dependencies = [ 1006 + "parking_lot", 1007 + "proc-macro2", 1008 + "quote", 1009 + "syn", 1010 + "toml_edit", 1011 + ] 1012 + 1013 + [[package]] 1014 + name = "bevy_math" 1015 + version = "0.16.0" 1016 + source = "registry+https://github.com/rust-lang/crates.io-index" 1017 + checksum = "f1a3a926d02dc501c6156a047510bdb538dcb1fa744eeba13c824b73ba88de55" 1018 + dependencies = [ 1019 + "approx", 1020 + "bevy_reflect", 1021 + "derive_more", 1022 + "glam", 1023 + "itertools 0.14.0", 1024 + "libm", 1025 + "rand", 1026 + "rand_distr", 1027 + "serde", 1028 + "smallvec", 1029 + "thiserror 2.0.12", 1030 + "variadics_please", 1031 + ] 1032 + 1033 + [[package]] 1034 + name = "bevy_mesh" 1035 + version = "0.16.0" 1036 + source = "registry+https://github.com/rust-lang/crates.io-index" 1037 + checksum = "12af58280c7453e32e2f083d86eaa4c9b9d03ea8683977108ded8f1930c539f2" 1038 + dependencies = [ 1039 + "bevy_asset", 1040 + "bevy_derive", 1041 + "bevy_ecs", 1042 + "bevy_image", 1043 + "bevy_math", 1044 + "bevy_mikktspace", 1045 + "bevy_platform", 1046 + "bevy_reflect", 1047 + "bevy_transform", 1048 + "bevy_utils", 1049 + "bitflags 2.9.1", 1050 + "bytemuck", 1051 + "hexasphere", 1052 + "serde", 1053 + "thiserror 2.0.12", 1054 + "tracing", 1055 + "wgpu-types", 1056 + ] 1057 + 1058 + [[package]] 1059 + name = "bevy_mikktspace" 1060 + version = "0.16.0" 1061 + source = "registry+https://github.com/rust-lang/crates.io-index" 1062 + checksum = "75e0258423c689f764556e36b5d9eebdbf624b29a1fd5b33cd9f6c42dcc4d5f3" 1063 + dependencies = [ 1064 + "glam", 1065 + ] 1066 + 1067 + [[package]] 1068 + name = "bevy_pbr" 1069 + version = "0.16.0" 1070 + source = "registry+https://github.com/rust-lang/crates.io-index" 1071 + checksum = "d9fe0de43b68bf9e5090a33efc963f125e9d3f9d97be9ebece7bcfdde1b6da80" 1072 + dependencies = [ 1073 + "bevy_app", 1074 + "bevy_asset", 1075 + "bevy_color", 1076 + "bevy_core_pipeline", 1077 + "bevy_derive", 1078 + "bevy_diagnostic", 1079 + "bevy_ecs", 1080 + "bevy_image", 1081 + "bevy_math", 1082 + "bevy_platform", 1083 + "bevy_reflect", 1084 + "bevy_render", 1085 + "bevy_transform", 1086 + "bevy_utils", 1087 + "bevy_window", 1088 + "bitflags 2.9.1", 1089 + "bytemuck", 1090 + "derive_more", 1091 + "fixedbitset", 1092 + "nonmax", 1093 + "offset-allocator", 1094 + "radsort", 1095 + "smallvec", 1096 + "static_assertions", 1097 + "thiserror 2.0.12", 1098 + "tracing", 1099 + ] 1100 + 1101 + [[package]] 1102 + name = "bevy_picking" 1103 + version = "0.16.0" 1104 + source = "registry+https://github.com/rust-lang/crates.io-index" 1105 + checksum = "f73674f62b1033006bd75c89033f5d3516386cfd7d43bb9f7665012c0ab14d22" 1106 + dependencies = [ 1107 + "bevy_app", 1108 + "bevy_asset", 1109 + "bevy_derive", 1110 + "bevy_ecs", 1111 + "bevy_input", 1112 + "bevy_math", 1113 + "bevy_mesh", 1114 + "bevy_platform", 1115 + "bevy_reflect", 1116 + "bevy_render", 1117 + "bevy_time", 1118 + "bevy_transform", 1119 + "bevy_utils", 1120 + "bevy_window", 1121 + "crossbeam-channel", 1122 + "tracing", 1123 + "uuid", 1124 + ] 1125 + 1126 + [[package]] 1127 + name = "bevy_platform" 1128 + version = "0.16.0" 1129 + source = "registry+https://github.com/rust-lang/crates.io-index" 1130 + checksum = "704db2c11b7bc31093df4fbbdd3769f9606a6a5287149f4b51f2680f25834ebc" 1131 + dependencies = [ 1132 + "cfg-if", 1133 + "critical-section", 1134 + "foldhash", 1135 + "getrandom 0.2.16", 1136 + "hashbrown", 1137 + "portable-atomic", 1138 + "portable-atomic-util", 1139 + "serde", 1140 + "spin", 1141 + "web-time", 1142 + ] 1143 + 1144 + [[package]] 1145 + name = "bevy_ptr" 1146 + version = "0.16.0" 1147 + source = "registry+https://github.com/rust-lang/crates.io-index" 1148 + checksum = "86f1275dfb4cfef4ffc90c3fa75408964864facf833acc932413d52aa5364ba4" 1149 + 1150 + [[package]] 1151 + name = "bevy_reflect" 1152 + version = "0.16.0" 1153 + source = "registry+https://github.com/rust-lang/crates.io-index" 1154 + checksum = "607ebacc31029cf2f39ac330eabf1d4bc411b159528ec08dbe6b0593eaccfd41" 1155 + dependencies = [ 1156 + "assert_type_match", 1157 + "bevy_platform", 1158 + "bevy_ptr", 1159 + "bevy_reflect_derive", 1160 + "bevy_utils", 1161 + "derive_more", 1162 + "disqualified", 1163 + "downcast-rs 2.0.1", 1164 + "erased-serde", 1165 + "foldhash", 1166 + "glam", 1167 + "petgraph", 1168 + "serde", 1169 + "smallvec", 1170 + "smol_str", 1171 + "thiserror 2.0.12", 1172 + "uuid", 1173 + "variadics_please", 1174 + "wgpu-types", 1175 + ] 1176 + 1177 + [[package]] 1178 + name = "bevy_reflect_derive" 1179 + version = "0.16.0" 1180 + source = "registry+https://github.com/rust-lang/crates.io-index" 1181 + checksum = "cf35e45e4eb239018369f63f2adc2107a54c329f9276d020e01eee1625b0238b" 1182 + dependencies = [ 1183 + "bevy_macro_utils", 1184 + "proc-macro2", 1185 + "quote", 1186 + "syn", 1187 + "uuid", 1188 + ] 1189 + 1190 + [[package]] 1191 + name = "bevy_render" 1192 + version = "0.16.0" 1193 + source = "registry+https://github.com/rust-lang/crates.io-index" 1194 + checksum = "85a7306235b3343b032801504f3e884b93abfb7ba58179fc555c479df509f349" 1195 + dependencies = [ 1196 + "async-channel", 1197 + "bevy_app", 1198 + "bevy_asset", 1199 + "bevy_color", 1200 + "bevy_derive", 1201 + "bevy_diagnostic", 1202 + "bevy_ecs", 1203 + "bevy_encase_derive", 1204 + "bevy_image", 1205 + "bevy_math", 1206 + "bevy_mesh", 1207 + "bevy_platform", 1208 + "bevy_reflect", 1209 + "bevy_render_macros", 1210 + "bevy_tasks", 1211 + "bevy_time", 1212 + "bevy_transform", 1213 + "bevy_utils", 1214 + "bevy_window", 1215 + "bitflags 2.9.1", 1216 + "bytemuck", 1217 + "codespan-reporting", 1218 + "derive_more", 1219 + "downcast-rs 2.0.1", 1220 + "encase", 1221 + "fixedbitset", 1222 + "futures-lite", 1223 + "image", 1224 + "indexmap", 1225 + "js-sys", 1226 + "ktx2", 1227 + "naga", 1228 + "naga_oil", 1229 + "nonmax", 1230 + "offset-allocator", 1231 + "send_wrapper", 1232 + "serde", 1233 + "smallvec", 1234 + "thiserror 2.0.12", 1235 + "tracing", 1236 + "variadics_please", 1237 + "wasm-bindgen", 1238 + "web-sys", 1239 + "wgpu", 1240 + ] 1241 + 1242 + [[package]] 1243 + name = "bevy_render_macros" 1244 + version = "0.16.0" 1245 + source = "registry+https://github.com/rust-lang/crates.io-index" 1246 + checksum = "b85c4fb26b66d3a257b655485d11b9b6df9d3c85026493ba8092767a5edfc1b2" 1247 + dependencies = [ 1248 + "bevy_macro_utils", 1249 + "proc-macro2", 1250 + "quote", 1251 + "syn", 1252 + ] 1253 + 1254 + [[package]] 1255 + name = "bevy_scene" 1256 + version = "0.16.0" 1257 + source = "registry+https://github.com/rust-lang/crates.io-index" 1258 + checksum = "e7b628f560f2d2fe9f35ecd4526627ba3992f082de03fd745536e4053a0266fe" 1259 + dependencies = [ 1260 + "bevy_app", 1261 + "bevy_asset", 1262 + "bevy_derive", 1263 + "bevy_ecs", 1264 + "bevy_platform", 1265 + "bevy_reflect", 1266 + "bevy_render", 1267 + "bevy_transform", 1268 + "bevy_utils", 1269 + "derive_more", 1270 + "serde", 1271 + "thiserror 2.0.12", 1272 + "uuid", 1273 + ] 1274 + 1275 + [[package]] 1276 + name = "bevy_sprite" 1277 + version = "0.16.0" 1278 + source = "registry+https://github.com/rust-lang/crates.io-index" 1279 + checksum = "01f97bf54fb1c37a1077139b59bb32bc77f7ca53149cfcaa512adbb69a2d492c" 1280 + dependencies = [ 1281 + "bevy_app", 1282 + "bevy_asset", 1283 + "bevy_color", 1284 + "bevy_core_pipeline", 1285 + "bevy_derive", 1286 + "bevy_ecs", 1287 + "bevy_image", 1288 + "bevy_math", 1289 + "bevy_picking", 1290 + "bevy_platform", 1291 + "bevy_reflect", 1292 + "bevy_render", 1293 + "bevy_transform", 1294 + "bevy_utils", 1295 + "bevy_window", 1296 + "bitflags 2.9.1", 1297 + "bytemuck", 1298 + "derive_more", 1299 + "fixedbitset", 1300 + "nonmax", 1301 + "radsort", 1302 + "tracing", 1303 + ] 1304 + 1305 + [[package]] 1306 + name = "bevy_state" 1307 + version = "0.16.0" 1308 + source = "registry+https://github.com/rust-lang/crates.io-index" 1309 + checksum = "682c343c354b191fe6669823bce3b0695ee1ae4ac36f582e29c436a72b67cdd5" 1310 + dependencies = [ 1311 + "bevy_app", 1312 + "bevy_ecs", 1313 + "bevy_platform", 1314 + "bevy_reflect", 1315 + "bevy_state_macros", 1316 + "bevy_utils", 1317 + "log", 1318 + "variadics_please", 1319 + ] 1320 + 1321 + [[package]] 1322 + name = "bevy_state_macros" 1323 + version = "0.16.0" 1324 + source = "registry+https://github.com/rust-lang/crates.io-index" 1325 + checksum = "55b4bf3970c4f0e60572901df4641656722172c222d71a80c430d36b0e31426c" 1326 + dependencies = [ 1327 + "bevy_macro_utils", 1328 + "proc-macro2", 1329 + "quote", 1330 + "syn", 1331 + ] 1332 + 1333 + [[package]] 1334 + name = "bevy_tasks" 1335 + version = "0.16.0" 1336 + source = "registry+https://github.com/rust-lang/crates.io-index" 1337 + checksum = "444c450b65e108855f42ecb6db0c041a56ea7d7f10cc6222f0ca95e9536a7d19" 1338 + dependencies = [ 1339 + "async-channel", 1340 + "async-executor", 1341 + "async-task", 1342 + "atomic-waker", 1343 + "bevy_platform", 1344 + "cfg-if", 1345 + "concurrent-queue", 1346 + "crossbeam-queue", 1347 + "derive_more", 1348 + "futures-channel", 1349 + "futures-lite", 1350 + "heapless", 1351 + "pin-project", 1352 + "wasm-bindgen-futures", 1353 + ] 1354 + 1355 + [[package]] 1356 + name = "bevy_text" 1357 + version = "0.16.0" 1358 + source = "registry+https://github.com/rust-lang/crates.io-index" 1359 + checksum = "8ef071262c5a9afbc39caba4c0b282c7d045fbb5cf33bdab1924bd2343403833" 1360 + dependencies = [ 1361 + "bevy_app", 1362 + "bevy_asset", 1363 + "bevy_color", 1364 + "bevy_derive", 1365 + "bevy_ecs", 1366 + "bevy_image", 1367 + "bevy_log", 1368 + "bevy_math", 1369 + "bevy_platform", 1370 + "bevy_reflect", 1371 + "bevy_render", 1372 + "bevy_sprite", 1373 + "bevy_transform", 1374 + "bevy_utils", 1375 + "bevy_window", 1376 + "cosmic-text", 1377 + "serde", 1378 + "smallvec", 1379 + "sys-locale", 1380 + "thiserror 2.0.12", 1381 + "tracing", 1382 + "unicode-bidi", 1383 + ] 1384 + 1385 + [[package]] 1386 + name = "bevy_time" 1387 + version = "0.16.0" 1388 + source = "registry+https://github.com/rust-lang/crates.io-index" 1389 + checksum = "456369ca10f8e039aaf273332744674844827854833ee29e28f9e161702f2f55" 1390 + dependencies = [ 1391 + "bevy_app", 1392 + "bevy_ecs", 1393 + "bevy_platform", 1394 + "bevy_reflect", 1395 + "crossbeam-channel", 1396 + "log", 1397 + "serde", 1398 + ] 1399 + 1400 + [[package]] 1401 + name = "bevy_transform" 1402 + version = "0.16.0" 1403 + source = "registry+https://github.com/rust-lang/crates.io-index" 1404 + checksum = "8479cdd5461246943956a7c8347e4e5d6ff857e57add889fb50eee0b5c26ab48" 1405 + dependencies = [ 1406 + "bevy_app", 1407 + "bevy_ecs", 1408 + "bevy_log", 1409 + "bevy_math", 1410 + "bevy_reflect", 1411 + "bevy_tasks", 1412 + "bevy_utils", 1413 + "derive_more", 1414 + "serde", 1415 + "thiserror 2.0.12", 1416 + ] 1417 + 1418 + [[package]] 1419 + name = "bevy_ui" 1420 + version = "0.16.0" 1421 + source = "registry+https://github.com/rust-lang/crates.io-index" 1422 + checksum = "110dc5d0059f112263512be8cd7bfe0466dfb7c26b9bf4c74529355249fd23f9" 1423 + dependencies = [ 1424 + "accesskit", 1425 + "bevy_a11y", 1426 + "bevy_app", 1427 + "bevy_asset", 1428 + "bevy_color", 1429 + "bevy_core_pipeline", 1430 + "bevy_derive", 1431 + "bevy_ecs", 1432 + "bevy_image", 1433 + "bevy_input", 1434 + "bevy_math", 1435 + "bevy_picking", 1436 + "bevy_platform", 1437 + "bevy_reflect", 1438 + "bevy_render", 1439 + "bevy_sprite", 1440 + "bevy_text", 1441 + "bevy_transform", 1442 + "bevy_utils", 1443 + "bevy_window", 1444 + "bytemuck", 1445 + "derive_more", 1446 + "nonmax", 1447 + "smallvec", 1448 + "taffy", 1449 + "thiserror 2.0.12", 1450 + "tracing", 1451 + ] 1452 + 1453 + [[package]] 1454 + name = "bevy_utils" 1455 + version = "0.16.0" 1456 + source = "registry+https://github.com/rust-lang/crates.io-index" 1457 + checksum = "ac2da3b3c1f94dadefcbe837aaa4aa119fcea37f7bdc5307eb05b4ede1921e24" 1458 + dependencies = [ 1459 + "bevy_platform", 1460 + "thread_local", 1461 + ] 1462 + 1463 + [[package]] 1464 + name = "bevy_window" 1465 + version = "0.16.0" 1466 + source = "registry+https://github.com/rust-lang/crates.io-index" 1467 + checksum = "0d83327cc5584da463d12b7a88ddb97f9e006828832287e1564531171fffdeb4" 1468 + dependencies = [ 1469 + "android-activity", 1470 + "bevy_app", 1471 + "bevy_ecs", 1472 + "bevy_input", 1473 + "bevy_math", 1474 + "bevy_platform", 1475 + "bevy_reflect", 1476 + "bevy_utils", 1477 + "log", 1478 + "raw-window-handle", 1479 + "serde", 1480 + "smol_str", 1481 + ] 1482 + 1483 + [[package]] 1484 + name = "bevy_winit" 1485 + version = "0.16.0" 1486 + source = "registry+https://github.com/rust-lang/crates.io-index" 1487 + checksum = "57b14928923ae4274f4b867dce3d0e7b2c8a31bebcb0f6e65a4261c3e0765064" 1488 + dependencies = [ 1489 + "accesskit", 1490 + "accesskit_winit", 1491 + "approx", 1492 + "bevy_a11y", 1493 + "bevy_app", 1494 + "bevy_asset", 1495 + "bevy_derive", 1496 + "bevy_ecs", 1497 + "bevy_image", 1498 + "bevy_input", 1499 + "bevy_input_focus", 1500 + "bevy_log", 1501 + "bevy_math", 1502 + "bevy_platform", 1503 + "bevy_reflect", 1504 + "bevy_tasks", 1505 + "bevy_utils", 1506 + "bevy_window", 1507 + "bytemuck", 1508 + "cfg-if", 1509 + "crossbeam-channel", 1510 + "raw-window-handle", 1511 + "tracing", 1512 + "wasm-bindgen", 1513 + "web-sys", 1514 + "wgpu-types", 1515 + "winit", 1516 + ] 1517 + 1518 + [[package]] 1519 + name = "bindgen" 1520 + version = "0.70.1" 1521 + source = "registry+https://github.com/rust-lang/crates.io-index" 1522 + checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" 1523 + dependencies = [ 1524 + "bitflags 2.9.1", 1525 + "cexpr", 1526 + "clang-sys", 1527 + "itertools 0.13.0", 1528 + "log", 1529 + "prettyplease", 1530 + "proc-macro2", 1531 + "quote", 1532 + "regex", 1533 + "rustc-hash", 1534 + "shlex", 1535 + "syn", 1536 + ] 1537 + 1538 + [[package]] 1539 + name = "bit-set" 1540 + version = "0.5.3" 1541 + source = "registry+https://github.com/rust-lang/crates.io-index" 1542 + checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 1543 + dependencies = [ 1544 + "bit-vec 0.6.3", 1545 + ] 1546 + 1547 + [[package]] 1548 + name = "bit-set" 1549 + version = "0.8.0" 1550 + source = "registry+https://github.com/rust-lang/crates.io-index" 1551 + checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 1552 + dependencies = [ 1553 + "bit-vec 0.8.0", 1554 + ] 1555 + 1556 + [[package]] 1557 + name = "bit-vec" 1558 + version = "0.6.3" 1559 + source = "registry+https://github.com/rust-lang/crates.io-index" 1560 + checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 1561 + 1562 + [[package]] 1563 + name = "bit-vec" 1564 + version = "0.8.0" 1565 + source = "registry+https://github.com/rust-lang/crates.io-index" 1566 + checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 1567 + 1568 + [[package]] 1569 + name = "bit_field" 1570 + version = "0.10.2" 1571 + source = "registry+https://github.com/rust-lang/crates.io-index" 1572 + checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" 1573 + 1574 + [[package]] 1575 + name = "bitflags" 1576 + version = "1.3.2" 1577 + source = "registry+https://github.com/rust-lang/crates.io-index" 1578 + checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 1579 + 1580 + [[package]] 1581 + name = "bitflags" 1582 + version = "2.9.1" 1583 + source = "registry+https://github.com/rust-lang/crates.io-index" 1584 + checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 1585 + dependencies = [ 1586 + "serde", 1587 + ] 1588 + 1589 + [[package]] 1590 + name = "bitstream-io" 1591 + version = "2.6.0" 1592 + source = "registry+https://github.com/rust-lang/crates.io-index" 1593 + checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" 1594 + 1595 + [[package]] 1596 + name = "blake3" 1597 + version = "1.8.2" 1598 + source = "registry+https://github.com/rust-lang/crates.io-index" 1599 + checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" 1600 + dependencies = [ 1601 + "arrayref", 1602 + "arrayvec", 1603 + "cc", 1604 + "cfg-if", 1605 + "constant_time_eq", 1606 + ] 1607 + 1608 + [[package]] 1609 + name = "block" 1610 + version = "0.1.6" 1611 + source = "registry+https://github.com/rust-lang/crates.io-index" 1612 + checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 1613 + 1614 + [[package]] 1615 + name = "block2" 1616 + version = "0.5.1" 1617 + source = "registry+https://github.com/rust-lang/crates.io-index" 1618 + checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" 1619 + dependencies = [ 1620 + "objc2 0.5.2", 1621 + ] 1622 + 1623 + [[package]] 1624 + name = "blocking" 1625 + version = "1.6.1" 1626 + source = "registry+https://github.com/rust-lang/crates.io-index" 1627 + checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" 1628 + dependencies = [ 1629 + "async-channel", 1630 + "async-task", 1631 + "futures-io", 1632 + "futures-lite", 1633 + "piper", 1634 + ] 1635 + 1636 + [[package]] 1637 + name = "built" 1638 + version = "0.7.7" 1639 + source = "registry+https://github.com/rust-lang/crates.io-index" 1640 + checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" 1641 + 1642 + [[package]] 1643 + name = "bumpalo" 1644 + version = "3.17.0" 1645 + source = "registry+https://github.com/rust-lang/crates.io-index" 1646 + checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 1647 + 1648 + [[package]] 1649 + name = "bytemuck" 1650 + version = "1.23.0" 1651 + source = "registry+https://github.com/rust-lang/crates.io-index" 1652 + checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" 1653 + dependencies = [ 1654 + "bytemuck_derive", 1655 + ] 1656 + 1657 + [[package]] 1658 + name = "bytemuck_derive" 1659 + version = "1.9.3" 1660 + source = "registry+https://github.com/rust-lang/crates.io-index" 1661 + checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" 1662 + dependencies = [ 1663 + "proc-macro2", 1664 + "quote", 1665 + "syn", 1666 + ] 1667 + 1668 + [[package]] 1669 + name = "byteorder" 1670 + version = "1.5.0" 1671 + source = "registry+https://github.com/rust-lang/crates.io-index" 1672 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 1673 + 1674 + [[package]] 1675 + name = "byteorder-lite" 1676 + version = "0.1.0" 1677 + source = "registry+https://github.com/rust-lang/crates.io-index" 1678 + checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 1679 + 1680 + [[package]] 1681 + name = "bytes" 1682 + version = "1.10.1" 1683 + source = "registry+https://github.com/rust-lang/crates.io-index" 1684 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 1685 + 1686 + [[package]] 1687 + name = "calloop" 1688 + version = "0.13.0" 1689 + source = "registry+https://github.com/rust-lang/crates.io-index" 1690 + checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" 1691 + dependencies = [ 1692 + "bitflags 2.9.1", 1693 + "log", 1694 + "polling", 1695 + "rustix 0.38.44", 1696 + "slab", 1697 + "thiserror 1.0.69", 1698 + ] 1699 + 1700 + [[package]] 1701 + name = "calloop-wayland-source" 1702 + version = "0.3.0" 1703 + source = "registry+https://github.com/rust-lang/crates.io-index" 1704 + checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" 1705 + dependencies = [ 1706 + "calloop", 1707 + "rustix 0.38.44", 1708 + "wayland-backend", 1709 + "wayland-client", 1710 + ] 1711 + 1712 + [[package]] 1713 + name = "cc" 1714 + version = "1.2.24" 1715 + source = "registry+https://github.com/rust-lang/crates.io-index" 1716 + checksum = "16595d3be041c03b09d08d0858631facccee9221e579704070e6e9e4915d3bc7" 1717 + dependencies = [ 1718 + "jobserver", 1719 + "libc", 1720 + "shlex", 1721 + ] 1722 + 1723 + [[package]] 1724 + name = "cesu8" 1725 + version = "1.1.0" 1726 + source = "registry+https://github.com/rust-lang/crates.io-index" 1727 + checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 1728 + 1729 + [[package]] 1730 + name = "cexpr" 1731 + version = "0.6.0" 1732 + source = "registry+https://github.com/rust-lang/crates.io-index" 1733 + checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 1734 + dependencies = [ 1735 + "nom", 1736 + ] 1737 + 1738 + [[package]] 1739 + name = "cfg-expr" 1740 + version = "0.15.8" 1741 + source = "registry+https://github.com/rust-lang/crates.io-index" 1742 + checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" 1743 + dependencies = [ 1744 + "smallvec", 1745 + "target-lexicon", 1746 + ] 1747 + 1748 + [[package]] 1749 + name = "cfg-if" 1750 + version = "1.0.0" 1751 + source = "registry+https://github.com/rust-lang/crates.io-index" 1752 + checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 1753 + 1754 + [[package]] 1755 + name = "cfg_aliases" 1756 + version = "0.2.1" 1757 + source = "registry+https://github.com/rust-lang/crates.io-index" 1758 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 1759 + 1760 + [[package]] 1761 + name = "clang-sys" 1762 + version = "1.8.1" 1763 + source = "registry+https://github.com/rust-lang/crates.io-index" 1764 + checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 1765 + dependencies = [ 1766 + "glob", 1767 + "libc", 1768 + "libloading", 1769 + ] 1770 + 1771 + [[package]] 1772 + name = "clipboard-win" 1773 + version = "5.4.0" 1774 + source = "registry+https://github.com/rust-lang/crates.io-index" 1775 + checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" 1776 + dependencies = [ 1777 + "error-code", 1778 + ] 1779 + 1780 + [[package]] 1781 + name = "codespan-reporting" 1782 + version = "0.11.1" 1783 + source = "registry+https://github.com/rust-lang/crates.io-index" 1784 + checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" 1785 + dependencies = [ 1786 + "termcolor", 1787 + "unicode-width", 1788 + ] 1789 + 1790 + [[package]] 1791 + name = "color_quant" 1792 + version = "1.1.0" 1793 + source = "registry+https://github.com/rust-lang/crates.io-index" 1794 + checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 1795 + 1796 + [[package]] 1797 + name = "combine" 1798 + version = "4.6.7" 1799 + source = "registry+https://github.com/rust-lang/crates.io-index" 1800 + checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 1801 + dependencies = [ 1802 + "bytes", 1803 + "memchr", 1804 + ] 1805 + 1806 + [[package]] 1807 + name = "concurrent-queue" 1808 + version = "2.5.0" 1809 + source = "registry+https://github.com/rust-lang/crates.io-index" 1810 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 1811 + dependencies = [ 1812 + "crossbeam-utils", 1813 + "portable-atomic", 1814 + ] 1815 + 1816 + [[package]] 1817 + name = "console_error_panic_hook" 1818 + version = "0.1.7" 1819 + source = "registry+https://github.com/rust-lang/crates.io-index" 1820 + checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 1821 + dependencies = [ 1822 + "cfg-if", 1823 + "wasm-bindgen", 1824 + ] 1825 + 1826 + [[package]] 1827 + name = "const-fnv1a-hash" 1828 + version = "1.1.0" 1829 + source = "registry+https://github.com/rust-lang/crates.io-index" 1830 + checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" 1831 + 1832 + [[package]] 1833 + name = "const_panic" 1834 + version = "0.2.12" 1835 + source = "registry+https://github.com/rust-lang/crates.io-index" 1836 + checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" 1837 + 1838 + [[package]] 1839 + name = "const_soft_float" 1840 + version = "0.1.4" 1841 + source = "registry+https://github.com/rust-lang/crates.io-index" 1842 + checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff" 1843 + 1844 + [[package]] 1845 + name = "constant_time_eq" 1846 + version = "0.3.1" 1847 + source = "registry+https://github.com/rust-lang/crates.io-index" 1848 + checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" 1849 + 1850 + [[package]] 1851 + name = "constgebra" 1852 + version = "0.1.4" 1853 + source = "registry+https://github.com/rust-lang/crates.io-index" 1854 + checksum = "e1aaf9b65849a68662ac6c0810c8893a765c960b907dd7cfab9c4a50bf764fbc" 1855 + dependencies = [ 1856 + "const_soft_float", 1857 + ] 1858 + 1859 + [[package]] 1860 + name = "core-foundation" 1861 + version = "0.9.4" 1862 + source = "registry+https://github.com/rust-lang/crates.io-index" 1863 + checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 1864 + dependencies = [ 1865 + "core-foundation-sys", 1866 + "libc", 1867 + ] 1868 + 1869 + [[package]] 1870 + name = "core-foundation" 1871 + version = "0.10.1" 1872 + source = "registry+https://github.com/rust-lang/crates.io-index" 1873 + checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 1874 + dependencies = [ 1875 + "core-foundation-sys", 1876 + "libc", 1877 + ] 1878 + 1879 + [[package]] 1880 + name = "core-foundation-sys" 1881 + version = "0.8.7" 1882 + source = "registry+https://github.com/rust-lang/crates.io-index" 1883 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 1884 + 1885 + [[package]] 1886 + name = "core-graphics" 1887 + version = "0.23.2" 1888 + source = "registry+https://github.com/rust-lang/crates.io-index" 1889 + checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" 1890 + dependencies = [ 1891 + "bitflags 1.3.2", 1892 + "core-foundation 0.9.4", 1893 + "core-graphics-types", 1894 + "foreign-types", 1895 + "libc", 1896 + ] 1897 + 1898 + [[package]] 1899 + name = "core-graphics-types" 1900 + version = "0.1.3" 1901 + source = "registry+https://github.com/rust-lang/crates.io-index" 1902 + checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 1903 + dependencies = [ 1904 + "bitflags 1.3.2", 1905 + "core-foundation 0.9.4", 1906 + "libc", 1907 + ] 1908 + 1909 + [[package]] 1910 + name = "coreaudio-rs" 1911 + version = "0.11.3" 1912 + source = "registry+https://github.com/rust-lang/crates.io-index" 1913 + checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace" 1914 + dependencies = [ 1915 + "bitflags 1.3.2", 1916 + "core-foundation-sys", 1917 + "coreaudio-sys", 1918 + ] 1919 + 1920 + [[package]] 1921 + name = "coreaudio-sys" 1922 + version = "0.2.16" 1923 + source = "registry+https://github.com/rust-lang/crates.io-index" 1924 + checksum = "2ce857aa0b77d77287acc1ac3e37a05a8c95a2af3647d23b15f263bdaeb7562b" 1925 + dependencies = [ 1926 + "bindgen", 1927 + ] 1928 + 1929 + [[package]] 1930 + name = "cosmic-text" 1931 + version = "0.13.2" 1932 + source = "registry+https://github.com/rust-lang/crates.io-index" 1933 + checksum = "e418dd4f5128c3e93eab12246391c54a20c496811131f85754dc8152ee207892" 1934 + dependencies = [ 1935 + "bitflags 2.9.1", 1936 + "fontdb", 1937 + "log", 1938 + "rangemap", 1939 + "rustc-hash", 1940 + "rustybuzz", 1941 + "self_cell", 1942 + "smol_str", 1943 + "swash", 1944 + "sys-locale", 1945 + "ttf-parser 0.21.1", 1946 + "unicode-bidi", 1947 + "unicode-linebreak", 1948 + "unicode-script", 1949 + "unicode-segmentation", 1950 + ] 1951 + 1952 + [[package]] 1953 + name = "cpal" 1954 + version = "0.15.3" 1955 + source = "registry+https://github.com/rust-lang/crates.io-index" 1956 + checksum = "873dab07c8f743075e57f524c583985fbaf745602acbe916a01539364369a779" 1957 + dependencies = [ 1958 + "alsa", 1959 + "core-foundation-sys", 1960 + "coreaudio-rs", 1961 + "dasp_sample", 1962 + "jni", 1963 + "js-sys", 1964 + "libc", 1965 + "mach2", 1966 + "ndk 0.8.0", 1967 + "ndk-context", 1968 + "oboe", 1969 + "wasm-bindgen", 1970 + "wasm-bindgen-futures", 1971 + "web-sys", 1972 + "windows 0.54.0", 1973 + ] 1974 + 1975 + [[package]] 1976 + name = "crc32fast" 1977 + version = "1.4.2" 1978 + source = "registry+https://github.com/rust-lang/crates.io-index" 1979 + checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 1980 + dependencies = [ 1981 + "cfg-if", 1982 + ] 1983 + 1984 + [[package]] 1985 + name = "critical-section" 1986 + version = "1.2.0" 1987 + source = "registry+https://github.com/rust-lang/crates.io-index" 1988 + checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 1989 + 1990 + [[package]] 1991 + name = "crossbeam-channel" 1992 + version = "0.5.15" 1993 + source = "registry+https://github.com/rust-lang/crates.io-index" 1994 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 1995 + dependencies = [ 1996 + "crossbeam-utils", 1997 + ] 1998 + 1999 + [[package]] 2000 + name = "crossbeam-deque" 2001 + version = "0.8.6" 2002 + source = "registry+https://github.com/rust-lang/crates.io-index" 2003 + checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 2004 + dependencies = [ 2005 + "crossbeam-epoch", 2006 + "crossbeam-utils", 2007 + ] 2008 + 2009 + [[package]] 2010 + name = "crossbeam-epoch" 2011 + version = "0.9.18" 2012 + source = "registry+https://github.com/rust-lang/crates.io-index" 2013 + checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 2014 + dependencies = [ 2015 + "crossbeam-utils", 2016 + ] 2017 + 2018 + [[package]] 2019 + name = "crossbeam-queue" 2020 + version = "0.3.12" 2021 + source = "registry+https://github.com/rust-lang/crates.io-index" 2022 + checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" 2023 + dependencies = [ 2024 + "crossbeam-utils", 2025 + ] 2026 + 2027 + [[package]] 2028 + name = "crossbeam-utils" 2029 + version = "0.8.21" 2030 + source = "registry+https://github.com/rust-lang/crates.io-index" 2031 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 2032 + 2033 + [[package]] 2034 + name = "crunchy" 2035 + version = "0.2.3" 2036 + source = "registry+https://github.com/rust-lang/crates.io-index" 2037 + checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" 2038 + 2039 + [[package]] 2040 + name = "ctrlc" 2041 + version = "3.4.7" 2042 + source = "registry+https://github.com/rust-lang/crates.io-index" 2043 + checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73" 2044 + dependencies = [ 2045 + "nix 0.30.1", 2046 + "windows-sys 0.59.0", 2047 + ] 2048 + 2049 + [[package]] 2050 + name = "cursor-icon" 2051 + version = "1.2.0" 2052 + source = "registry+https://github.com/rust-lang/crates.io-index" 2053 + checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" 2054 + 2055 + [[package]] 2056 + name = "dasp_sample" 2057 + version = "0.11.0" 2058 + source = "registry+https://github.com/rust-lang/crates.io-index" 2059 + checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" 2060 + 2061 + [[package]] 2062 + name = "data-encoding" 2063 + version = "2.9.0" 2064 + source = "registry+https://github.com/rust-lang/crates.io-index" 2065 + checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 2066 + 2067 + [[package]] 2068 + name = "derive_more" 2069 + version = "1.0.0" 2070 + source = "registry+https://github.com/rust-lang/crates.io-index" 2071 + checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 2072 + dependencies = [ 2073 + "derive_more-impl", 2074 + ] 2075 + 2076 + [[package]] 2077 + name = "derive_more-impl" 2078 + version = "1.0.0" 2079 + source = "registry+https://github.com/rust-lang/crates.io-index" 2080 + checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" 2081 + dependencies = [ 2082 + "proc-macro2", 2083 + "quote", 2084 + "syn", 2085 + "unicode-xid", 2086 + ] 2087 + 2088 + [[package]] 2089 + name = "dispatch" 2090 + version = "0.2.0" 2091 + source = "registry+https://github.com/rust-lang/crates.io-index" 2092 + checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 2093 + 2094 + [[package]] 2095 + name = "dispatch2" 2096 + version = "0.3.0" 2097 + source = "registry+https://github.com/rust-lang/crates.io-index" 2098 + checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 2099 + dependencies = [ 2100 + "bitflags 2.9.1", 2101 + "objc2 0.6.1", 2102 + ] 2103 + 2104 + [[package]] 2105 + name = "displaydoc" 2106 + version = "0.2.5" 2107 + source = "registry+https://github.com/rust-lang/crates.io-index" 2108 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 2109 + dependencies = [ 2110 + "proc-macro2", 2111 + "quote", 2112 + "syn", 2113 + ] 2114 + 2115 + [[package]] 2116 + name = "disqualified" 2117 + version = "1.0.0" 2118 + source = "registry+https://github.com/rust-lang/crates.io-index" 2119 + checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd" 2120 + 2121 + [[package]] 2122 + name = "dlib" 2123 + version = "0.5.2" 2124 + source = "registry+https://github.com/rust-lang/crates.io-index" 2125 + checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" 2126 + dependencies = [ 2127 + "libloading", 2128 + ] 2129 + 2130 + [[package]] 2131 + name = "document-features" 2132 + version = "0.2.11" 2133 + source = "registry+https://github.com/rust-lang/crates.io-index" 2134 + checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 2135 + dependencies = [ 2136 + "litrs", 2137 + ] 2138 + 2139 + [[package]] 2140 + name = "downcast-rs" 2141 + version = "1.2.1" 2142 + source = "registry+https://github.com/rust-lang/crates.io-index" 2143 + checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" 2144 + 2145 + [[package]] 2146 + name = "downcast-rs" 2147 + version = "2.0.1" 2148 + source = "registry+https://github.com/rust-lang/crates.io-index" 2149 + checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf" 2150 + 2151 + [[package]] 2152 + name = "dpi" 2153 + version = "0.1.2" 2154 + source = "registry+https://github.com/rust-lang/crates.io-index" 2155 + checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" 2156 + 2157 + [[package]] 2158 + name = "ecolor" 2159 + version = "0.31.1" 2160 + source = "registry+https://github.com/rust-lang/crates.io-index" 2161 + checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1" 2162 + dependencies = [ 2163 + "bytemuck", 2164 + "emath", 2165 + ] 2166 + 2167 + [[package]] 2168 + name = "egui" 2169 + version = "0.31.1" 2170 + source = "registry+https://github.com/rust-lang/crates.io-index" 2171 + checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3" 2172 + dependencies = [ 2173 + "ahash", 2174 + "bitflags 2.9.1", 2175 + "emath", 2176 + "epaint", 2177 + "nohash-hasher", 2178 + "profiling", 2179 + ] 2180 + 2181 + [[package]] 2182 + name = "either" 2183 + version = "1.15.0" 2184 + source = "registry+https://github.com/rust-lang/crates.io-index" 2185 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 2186 + 2187 + [[package]] 2188 + name = "emath" 2189 + version = "0.31.1" 2190 + source = "registry+https://github.com/rust-lang/crates.io-index" 2191 + checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b" 2192 + dependencies = [ 2193 + "bytemuck", 2194 + ] 2195 + 2196 + [[package]] 2197 + name = "encase" 2198 + version = "0.10.0" 2199 + source = "registry+https://github.com/rust-lang/crates.io-index" 2200 + checksum = "b0a05902cf601ed11d564128448097b98ebe3c6574bd7b6a653a3d56d54aa020" 2201 + dependencies = [ 2202 + "const_panic", 2203 + "encase_derive", 2204 + "glam", 2205 + "thiserror 1.0.69", 2206 + ] 2207 + 2208 + [[package]] 2209 + name = "encase_derive" 2210 + version = "0.10.0" 2211 + source = "registry+https://github.com/rust-lang/crates.io-index" 2212 + checksum = "181d475b694e2dd56ae919ce7699d344d1fd259292d590c723a50d1189a2ea85" 2213 + dependencies = [ 2214 + "encase_derive_impl", 2215 + ] 2216 + 2217 + [[package]] 2218 + name = "encase_derive_impl" 2219 + version = "0.10.0" 2220 + source = "registry+https://github.com/rust-lang/crates.io-index" 2221 + checksum = "f97b51c5cc57ef7c5f7a0c57c250251c49ee4c28f819f87ac32f4aceabc36792" 2222 + dependencies = [ 2223 + "proc-macro2", 2224 + "quote", 2225 + "syn", 2226 + ] 2227 + 2228 + [[package]] 2229 + name = "epaint" 2230 + version = "0.31.1" 2231 + source = "registry+https://github.com/rust-lang/crates.io-index" 2232 + checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562" 2233 + dependencies = [ 2234 + "ab_glyph", 2235 + "ahash", 2236 + "bytemuck", 2237 + "ecolor", 2238 + "emath", 2239 + "epaint_default_fonts", 2240 + "nohash-hasher", 2241 + "parking_lot", 2242 + "profiling", 2243 + ] 2244 + 2245 + [[package]] 2246 + name = "epaint_default_fonts" 2247 + version = "0.31.1" 2248 + source = "registry+https://github.com/rust-lang/crates.io-index" 2249 + checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f" 2250 + 2251 + [[package]] 2252 + name = "equivalent" 2253 + version = "1.0.2" 2254 + source = "registry+https://github.com/rust-lang/crates.io-index" 2255 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 2256 + 2257 + [[package]] 2258 + name = "erased-serde" 2259 + version = "0.4.6" 2260 + source = "registry+https://github.com/rust-lang/crates.io-index" 2261 + checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" 2262 + dependencies = [ 2263 + "serde", 2264 + "typeid", 2265 + ] 2266 + 2267 + [[package]] 2268 + name = "errno" 2269 + version = "0.3.12" 2270 + source = "registry+https://github.com/rust-lang/crates.io-index" 2271 + checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" 2272 + dependencies = [ 2273 + "libc", 2274 + "windows-sys 0.59.0", 2275 + ] 2276 + 2277 + [[package]] 2278 + name = "error-code" 2279 + version = "3.3.2" 2280 + source = "registry+https://github.com/rust-lang/crates.io-index" 2281 + checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" 2282 + 2283 + [[package]] 2284 + name = "euclid" 2285 + version = "0.22.11" 2286 + source = "registry+https://github.com/rust-lang/crates.io-index" 2287 + checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" 2288 + dependencies = [ 2289 + "num-traits", 2290 + ] 2291 + 2292 + [[package]] 2293 + name = "event-listener" 2294 + version = "5.4.0" 2295 + source = "registry+https://github.com/rust-lang/crates.io-index" 2296 + checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 2297 + dependencies = [ 2298 + "concurrent-queue", 2299 + "parking", 2300 + "pin-project-lite", 2301 + ] 2302 + 2303 + [[package]] 2304 + name = "event-listener-strategy" 2305 + version = "0.5.4" 2306 + source = "registry+https://github.com/rust-lang/crates.io-index" 2307 + checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 2308 + dependencies = [ 2309 + "event-listener", 2310 + "pin-project-lite", 2311 + ] 2312 + 2313 + [[package]] 2314 + name = "exr" 2315 + version = "1.73.0" 2316 + source = "registry+https://github.com/rust-lang/crates.io-index" 2317 + checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" 2318 + dependencies = [ 2319 + "bit_field", 2320 + "half", 2321 + "lebe", 2322 + "miniz_oxide", 2323 + "rayon-core", 2324 + "smallvec", 2325 + "zune-inflate", 2326 + ] 2327 + 2328 + [[package]] 2329 + name = "fastrand" 2330 + version = "2.3.0" 2331 + source = "registry+https://github.com/rust-lang/crates.io-index" 2332 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 2333 + 2334 + [[package]] 2335 + name = "fdeflate" 2336 + version = "0.3.7" 2337 + source = "registry+https://github.com/rust-lang/crates.io-index" 2338 + checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 2339 + dependencies = [ 2340 + "simd-adler32", 2341 + ] 2342 + 2343 + [[package]] 2344 + name = "file-id" 2345 + version = "0.2.2" 2346 + source = "registry+https://github.com/rust-lang/crates.io-index" 2347 + checksum = "6bc904b9bbefcadbd8e3a9fb0d464a9b979de6324c03b3c663e8994f46a5be36" 2348 + dependencies = [ 2349 + "windows-sys 0.52.0", 2350 + ] 2351 + 2352 + [[package]] 2353 + name = "filetime" 2354 + version = "0.2.25" 2355 + source = "registry+https://github.com/rust-lang/crates.io-index" 2356 + checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" 2357 + dependencies = [ 2358 + "cfg-if", 2359 + "libc", 2360 + "libredox", 2361 + "windows-sys 0.59.0", 2362 + ] 2363 + 2364 + [[package]] 2365 + name = "fixedbitset" 2366 + version = "0.5.7" 2367 + source = "registry+https://github.com/rust-lang/crates.io-index" 2368 + checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" 2369 + 2370 + [[package]] 2371 + name = "flate2" 2372 + version = "1.1.1" 2373 + source = "registry+https://github.com/rust-lang/crates.io-index" 2374 + checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" 2375 + dependencies = [ 2376 + "crc32fast", 2377 + "miniz_oxide", 2378 + ] 2379 + 2380 + [[package]] 2381 + name = "fnv" 2382 + version = "1.0.7" 2383 + source = "registry+https://github.com/rust-lang/crates.io-index" 2384 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 2385 + 2386 + [[package]] 2387 + name = "foldhash" 2388 + version = "0.1.5" 2389 + source = "registry+https://github.com/rust-lang/crates.io-index" 2390 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 2391 + 2392 + [[package]] 2393 + name = "font-types" 2394 + version = "0.9.0" 2395 + source = "registry+https://github.com/rust-lang/crates.io-index" 2396 + checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7" 2397 + dependencies = [ 2398 + "bytemuck", 2399 + ] 2400 + 2401 + [[package]] 2402 + name = "fontconfig-parser" 2403 + version = "0.5.8" 2404 + source = "registry+https://github.com/rust-lang/crates.io-index" 2405 + checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646" 2406 + dependencies = [ 2407 + "roxmltree", 2408 + ] 2409 + 2410 + [[package]] 2411 + name = "fontdb" 2412 + version = "0.16.2" 2413 + source = "registry+https://github.com/rust-lang/crates.io-index" 2414 + checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" 2415 + dependencies = [ 2416 + "fontconfig-parser", 2417 + "log", 2418 + "memmap2", 2419 + "slotmap", 2420 + "tinyvec", 2421 + "ttf-parser 0.20.0", 2422 + ] 2423 + 2424 + [[package]] 2425 + name = "foreign-types" 2426 + version = "0.5.0" 2427 + source = "registry+https://github.com/rust-lang/crates.io-index" 2428 + checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 2429 + dependencies = [ 2430 + "foreign-types-macros", 2431 + "foreign-types-shared", 2432 + ] 2433 + 2434 + [[package]] 2435 + name = "foreign-types-macros" 2436 + version = "0.2.3" 2437 + source = "registry+https://github.com/rust-lang/crates.io-index" 2438 + checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 2439 + dependencies = [ 2440 + "proc-macro2", 2441 + "quote", 2442 + "syn", 2443 + ] 2444 + 2445 + [[package]] 2446 + name = "foreign-types-shared" 2447 + version = "0.3.1" 2448 + source = "registry+https://github.com/rust-lang/crates.io-index" 2449 + checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 2450 + 2451 + [[package]] 2452 + name = "form_urlencoded" 2453 + version = "1.2.1" 2454 + source = "registry+https://github.com/rust-lang/crates.io-index" 2455 + checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 2456 + dependencies = [ 2457 + "percent-encoding", 2458 + ] 2459 + 2460 + [[package]] 2461 + name = "fsevent-sys" 2462 + version = "4.1.0" 2463 + source = "registry+https://github.com/rust-lang/crates.io-index" 2464 + checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" 2465 + dependencies = [ 2466 + "libc", 2467 + ] 2468 + 2469 + [[package]] 2470 + name = "futures-channel" 2471 + version = "0.3.31" 2472 + source = "registry+https://github.com/rust-lang/crates.io-index" 2473 + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 2474 + dependencies = [ 2475 + "futures-core", 2476 + ] 2477 + 2478 + [[package]] 2479 + name = "futures-core" 2480 + version = "0.3.31" 2481 + source = "registry+https://github.com/rust-lang/crates.io-index" 2482 + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 2483 + 2484 + [[package]] 2485 + name = "futures-io" 2486 + version = "0.3.31" 2487 + source = "registry+https://github.com/rust-lang/crates.io-index" 2488 + checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 2489 + 2490 + [[package]] 2491 + name = "futures-lite" 2492 + version = "2.6.0" 2493 + source = "registry+https://github.com/rust-lang/crates.io-index" 2494 + checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" 2495 + dependencies = [ 2496 + "fastrand", 2497 + "futures-core", 2498 + "futures-io", 2499 + "parking", 2500 + "pin-project-lite", 2501 + ] 2502 + 2503 + [[package]] 2504 + name = "fuzzy-matcher" 2505 + version = "0.3.7" 2506 + source = "registry+https://github.com/rust-lang/crates.io-index" 2507 + checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" 2508 + dependencies = [ 2509 + "thread_local", 2510 + ] 2511 + 2512 + [[package]] 2513 + name = "gethostname" 2514 + version = "0.4.3" 2515 + source = "registry+https://github.com/rust-lang/crates.io-index" 2516 + checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" 2517 + dependencies = [ 2518 + "libc", 2519 + "windows-targets 0.48.5", 2520 + ] 2521 + 2522 + [[package]] 2523 + name = "getrandom" 2524 + version = "0.2.16" 2525 + source = "registry+https://github.com/rust-lang/crates.io-index" 2526 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 2527 + dependencies = [ 2528 + "cfg-if", 2529 + "js-sys", 2530 + "libc", 2531 + "wasi 0.11.0+wasi-snapshot-preview1", 2532 + "wasm-bindgen", 2533 + ] 2534 + 2535 + [[package]] 2536 + name = "getrandom" 2537 + version = "0.3.3" 2538 + source = "registry+https://github.com/rust-lang/crates.io-index" 2539 + checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 2540 + dependencies = [ 2541 + "cfg-if", 2542 + "libc", 2543 + "r-efi", 2544 + "wasi 0.14.2+wasi-0.2.4", 2545 + ] 2546 + 2547 + [[package]] 2548 + name = "gif" 2549 + version = "0.13.1" 2550 + source = "registry+https://github.com/rust-lang/crates.io-index" 2551 + checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" 2552 + dependencies = [ 2553 + "color_quant", 2554 + "weezl", 2555 + ] 2556 + 2557 + [[package]] 2558 + name = "gilrs" 2559 + version = "0.11.0" 2560 + source = "registry+https://github.com/rust-lang/crates.io-index" 2561 + checksum = "bbb2c998745a3c1ac90f64f4f7b3a54219fd3612d7705e7798212935641ed18f" 2562 + dependencies = [ 2563 + "fnv", 2564 + "gilrs-core", 2565 + "log", 2566 + "uuid", 2567 + "vec_map", 2568 + ] 2569 + 2570 + [[package]] 2571 + name = "gilrs-core" 2572 + version = "0.6.4" 2573 + source = "registry+https://github.com/rust-lang/crates.io-index" 2574 + checksum = "a6d95ae10ce5aa99543a28cf74e41c11f3b9e3c14f0452bbde46024753cd683e" 2575 + dependencies = [ 2576 + "core-foundation 0.10.1", 2577 + "inotify", 2578 + "io-kit-sys", 2579 + "js-sys", 2580 + "libc", 2581 + "libudev-sys", 2582 + "log", 2583 + "nix 0.29.0", 2584 + "uuid", 2585 + "vec_map", 2586 + "wasm-bindgen", 2587 + "web-sys", 2588 + "windows 0.61.1", 2589 + ] 2590 + 2591 + [[package]] 2592 + name = "gl_generator" 2593 + version = "0.14.0" 2594 + source = "registry+https://github.com/rust-lang/crates.io-index" 2595 + checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 2596 + dependencies = [ 2597 + "khronos_api", 2598 + "log", 2599 + "xml-rs", 2600 + ] 2601 + 2602 + [[package]] 2603 + name = "glam" 2604 + version = "0.29.3" 2605 + source = "registry+https://github.com/rust-lang/crates.io-index" 2606 + checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" 2607 + dependencies = [ 2608 + "bytemuck", 2609 + "libm", 2610 + "rand", 2611 + "serde", 2612 + ] 2613 + 2614 + [[package]] 2615 + name = "glob" 2616 + version = "0.3.2" 2617 + source = "registry+https://github.com/rust-lang/crates.io-index" 2618 + checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 2619 + 2620 + [[package]] 2621 + name = "glow" 2622 + version = "0.16.0" 2623 + source = "registry+https://github.com/rust-lang/crates.io-index" 2624 + checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" 2625 + dependencies = [ 2626 + "js-sys", 2627 + "slotmap", 2628 + "wasm-bindgen", 2629 + "web-sys", 2630 + ] 2631 + 2632 + [[package]] 2633 + name = "gltf" 2634 + version = "1.4.1" 2635 + source = "registry+https://github.com/rust-lang/crates.io-index" 2636 + checksum = "e3ce1918195723ce6ac74e80542c5a96a40c2b26162c1957a5cd70799b8cacf7" 2637 + dependencies = [ 2638 + "byteorder", 2639 + "gltf-json", 2640 + "lazy_static", 2641 + "serde_json", 2642 + ] 2643 + 2644 + [[package]] 2645 + name = "gltf-derive" 2646 + version = "1.4.1" 2647 + source = "registry+https://github.com/rust-lang/crates.io-index" 2648 + checksum = "14070e711538afba5d6c807edb74bcb84e5dbb9211a3bf5dea0dfab5b24f4c51" 2649 + dependencies = [ 2650 + "inflections", 2651 + "proc-macro2", 2652 + "quote", 2653 + "syn", 2654 + ] 2655 + 2656 + [[package]] 2657 + name = "gltf-json" 2658 + version = "1.4.1" 2659 + source = "registry+https://github.com/rust-lang/crates.io-index" 2660 + checksum = "e6176f9d60a7eab0a877e8e96548605dedbde9190a7ae1e80bbcc1c9af03ab14" 2661 + dependencies = [ 2662 + "gltf-derive", 2663 + "serde", 2664 + "serde_derive", 2665 + "serde_json", 2666 + ] 2667 + 2668 + [[package]] 2669 + name = "glutin_wgl_sys" 2670 + version = "0.6.1" 2671 + source = "registry+https://github.com/rust-lang/crates.io-index" 2672 + checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" 2673 + dependencies = [ 2674 + "gl_generator", 2675 + ] 2676 + 2677 + [[package]] 2678 + name = "gpu-alloc" 2679 + version = "0.6.0" 2680 + source = "registry+https://github.com/rust-lang/crates.io-index" 2681 + checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" 2682 + dependencies = [ 2683 + "bitflags 2.9.1", 2684 + "gpu-alloc-types", 2685 + ] 2686 + 2687 + [[package]] 2688 + name = "gpu-alloc-types" 2689 + version = "0.3.0" 2690 + source = "registry+https://github.com/rust-lang/crates.io-index" 2691 + checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" 2692 + dependencies = [ 2693 + "bitflags 2.9.1", 2694 + ] 2695 + 2696 + [[package]] 2697 + name = "gpu-allocator" 2698 + version = "0.27.0" 2699 + source = "registry+https://github.com/rust-lang/crates.io-index" 2700 + checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" 2701 + dependencies = [ 2702 + "log", 2703 + "presser", 2704 + "thiserror 1.0.69", 2705 + "windows 0.58.0", 2706 + ] 2707 + 2708 + [[package]] 2709 + name = "gpu-descriptor" 2710 + version = "0.3.2" 2711 + source = "registry+https://github.com/rust-lang/crates.io-index" 2712 + checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" 2713 + dependencies = [ 2714 + "bitflags 2.9.1", 2715 + "gpu-descriptor-types", 2716 + "hashbrown", 2717 + ] 2718 + 2719 + [[package]] 2720 + name = "gpu-descriptor-types" 2721 + version = "0.2.0" 2722 + source = "registry+https://github.com/rust-lang/crates.io-index" 2723 + checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" 2724 + dependencies = [ 2725 + "bitflags 2.9.1", 2726 + ] 2727 + 2728 + [[package]] 2729 + name = "grid" 2730 + version = "0.15.0" 2731 + source = "registry+https://github.com/rust-lang/crates.io-index" 2732 + checksum = "36119f3a540b086b4e436bb2b588cf98a68863470e0e880f4d0842f112a3183a" 2733 + 2734 + [[package]] 2735 + name = "guillotiere" 2736 + version = "0.6.2" 2737 + source = "registry+https://github.com/rust-lang/crates.io-index" 2738 + checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" 2739 + dependencies = [ 2740 + "euclid", 2741 + "svg_fmt", 2742 + ] 2743 + 2744 + [[package]] 2745 + name = "half" 2746 + version = "2.6.0" 2747 + source = "registry+https://github.com/rust-lang/crates.io-index" 2748 + checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" 2749 + dependencies = [ 2750 + "cfg-if", 2751 + "crunchy", 2752 + ] 2753 + 2754 + [[package]] 2755 + name = "hash32" 2756 + version = "0.3.1" 2757 + source = "registry+https://github.com/rust-lang/crates.io-index" 2758 + checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" 2759 + dependencies = [ 2760 + "byteorder", 2761 + ] 2762 + 2763 + [[package]] 2764 + name = "hashbrown" 2765 + version = "0.15.3" 2766 + source = "registry+https://github.com/rust-lang/crates.io-index" 2767 + checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" 2768 + dependencies = [ 2769 + "equivalent", 2770 + "foldhash", 2771 + "serde", 2772 + ] 2773 + 2774 + [[package]] 2775 + name = "heapless" 2776 + version = "0.8.0" 2777 + source = "registry+https://github.com/rust-lang/crates.io-index" 2778 + checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" 2779 + dependencies = [ 2780 + "hash32", 2781 + "portable-atomic", 2782 + "stable_deref_trait", 2783 + ] 2784 + 2785 + [[package]] 2786 + name = "heck" 2787 + version = "0.5.0" 2788 + source = "registry+https://github.com/rust-lang/crates.io-index" 2789 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 2790 + 2791 + [[package]] 2792 + name = "hermit-abi" 2793 + version = "0.5.1" 2794 + source = "registry+https://github.com/rust-lang/crates.io-index" 2795 + checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" 2796 + 2797 + [[package]] 2798 + name = "hexasphere" 2799 + version = "15.1.0" 2800 + source = "registry+https://github.com/rust-lang/crates.io-index" 2801 + checksum = "d9c9e718d32b6e6b2b32354e1b0367025efdd0b11d6a740b905ddf5db1074679" 2802 + dependencies = [ 2803 + "constgebra", 2804 + "glam", 2805 + "tinyvec", 2806 + ] 2807 + 2808 + [[package]] 2809 + name = "hexf-parse" 2810 + version = "0.2.1" 2811 + source = "registry+https://github.com/rust-lang/crates.io-index" 2812 + checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 2813 + 2814 + [[package]] 2815 + name = "home" 2816 + version = "0.5.11" 2817 + source = "registry+https://github.com/rust-lang/crates.io-index" 2818 + checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 2819 + dependencies = [ 2820 + "windows-sys 0.59.0", 2821 + ] 2822 + 2823 + [[package]] 2824 + name = "icu_collections" 2825 + version = "2.0.0" 2826 + source = "registry+https://github.com/rust-lang/crates.io-index" 2827 + checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 2828 + dependencies = [ 2829 + "displaydoc", 2830 + "potential_utf", 2831 + "yoke", 2832 + "zerofrom", 2833 + "zerovec", 2834 + ] 2835 + 2836 + [[package]] 2837 + name = "icu_locale_core" 2838 + version = "2.0.0" 2839 + source = "registry+https://github.com/rust-lang/crates.io-index" 2840 + checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 2841 + dependencies = [ 2842 + "displaydoc", 2843 + "litemap", 2844 + "tinystr", 2845 + "writeable", 2846 + "zerovec", 2847 + ] 2848 + 2849 + [[package]] 2850 + name = "icu_normalizer" 2851 + version = "2.0.0" 2852 + source = "registry+https://github.com/rust-lang/crates.io-index" 2853 + checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 2854 + dependencies = [ 2855 + "displaydoc", 2856 + "icu_collections", 2857 + "icu_normalizer_data", 2858 + "icu_properties", 2859 + "icu_provider", 2860 + "smallvec", 2861 + "zerovec", 2862 + ] 2863 + 2864 + [[package]] 2865 + name = "icu_normalizer_data" 2866 + version = "2.0.0" 2867 + source = "registry+https://github.com/rust-lang/crates.io-index" 2868 + checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 2869 + 2870 + [[package]] 2871 + name = "icu_properties" 2872 + version = "2.0.1" 2873 + source = "registry+https://github.com/rust-lang/crates.io-index" 2874 + checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 2875 + dependencies = [ 2876 + "displaydoc", 2877 + "icu_collections", 2878 + "icu_locale_core", 2879 + "icu_properties_data", 2880 + "icu_provider", 2881 + "potential_utf", 2882 + "zerotrie", 2883 + "zerovec", 2884 + ] 2885 + 2886 + [[package]] 2887 + name = "icu_properties_data" 2888 + version = "2.0.1" 2889 + source = "registry+https://github.com/rust-lang/crates.io-index" 2890 + checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 2891 + 2892 + [[package]] 2893 + name = "icu_provider" 2894 + version = "2.0.0" 2895 + source = "registry+https://github.com/rust-lang/crates.io-index" 2896 + checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 2897 + dependencies = [ 2898 + "displaydoc", 2899 + "icu_locale_core", 2900 + "stable_deref_trait", 2901 + "tinystr", 2902 + "writeable", 2903 + "yoke", 2904 + "zerofrom", 2905 + "zerotrie", 2906 + "zerovec", 2907 + ] 2908 + 2909 + [[package]] 2910 + name = "idna" 2911 + version = "1.0.3" 2912 + source = "registry+https://github.com/rust-lang/crates.io-index" 2913 + checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 2914 + dependencies = [ 2915 + "idna_adapter", 2916 + "smallvec", 2917 + "utf8_iter", 2918 + ] 2919 + 2920 + [[package]] 2921 + name = "idna_adapter" 2922 + version = "1.2.1" 2923 + source = "registry+https://github.com/rust-lang/crates.io-index" 2924 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 2925 + dependencies = [ 2926 + "icu_normalizer", 2927 + "icu_properties", 2928 + ] 2929 + 2930 + [[package]] 2931 + name = "image" 2932 + version = "0.25.6" 2933 + source = "registry+https://github.com/rust-lang/crates.io-index" 2934 + checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" 2935 + dependencies = [ 2936 + "bytemuck", 2937 + "byteorder-lite", 2938 + "color_quant", 2939 + "exr", 2940 + "gif", 2941 + "image-webp", 2942 + "num-traits", 2943 + "png", 2944 + "qoi", 2945 + "ravif", 2946 + "rayon", 2947 + "rgb", 2948 + "tiff", 2949 + "zune-core", 2950 + "zune-jpeg", 2951 + ] 2952 + 2953 + [[package]] 2954 + name = "image-webp" 2955 + version = "0.2.1" 2956 + source = "registry+https://github.com/rust-lang/crates.io-index" 2957 + checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f" 2958 + dependencies = [ 2959 + "byteorder-lite", 2960 + "quick-error", 2961 + ] 2962 + 2963 + [[package]] 2964 + name = "imgref" 2965 + version = "1.11.0" 2966 + source = "registry+https://github.com/rust-lang/crates.io-index" 2967 + checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" 2968 + 2969 + [[package]] 2970 + name = "immutable-chunkmap" 2971 + version = "2.0.6" 2972 + source = "registry+https://github.com/rust-lang/crates.io-index" 2973 + checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" 2974 + dependencies = [ 2975 + "arrayvec", 2976 + ] 2977 + 2978 + [[package]] 2979 + name = "indexmap" 2980 + version = "2.9.0" 2981 + source = "registry+https://github.com/rust-lang/crates.io-index" 2982 + checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" 2983 + dependencies = [ 2984 + "equivalent", 2985 + "hashbrown", 2986 + "serde", 2987 + ] 2988 + 2989 + [[package]] 2990 + name = "inflections" 2991 + version = "1.1.1" 2992 + source = "registry+https://github.com/rust-lang/crates.io-index" 2993 + checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" 2994 + 2995 + [[package]] 2996 + name = "inotify" 2997 + version = "0.11.0" 2998 + source = "registry+https://github.com/rust-lang/crates.io-index" 2999 + checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" 3000 + dependencies = [ 3001 + "bitflags 2.9.1", 3002 + "inotify-sys", 3003 + "libc", 3004 + ] 3005 + 3006 + [[package]] 3007 + name = "inotify-sys" 3008 + version = "0.1.5" 3009 + source = "registry+https://github.com/rust-lang/crates.io-index" 3010 + checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" 3011 + dependencies = [ 3012 + "libc", 3013 + ] 3014 + 3015 + [[package]] 3016 + name = "interpolate_name" 3017 + version = "0.2.4" 3018 + source = "registry+https://github.com/rust-lang/crates.io-index" 3019 + checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" 3020 + dependencies = [ 3021 + "proc-macro2", 3022 + "quote", 3023 + "syn", 3024 + ] 3025 + 3026 + [[package]] 3027 + name = "io-kit-sys" 3028 + version = "0.4.1" 3029 + source = "registry+https://github.com/rust-lang/crates.io-index" 3030 + checksum = "617ee6cf8e3f66f3b4ea67a4058564628cde41901316e19f559e14c7c72c5e7b" 3031 + dependencies = [ 3032 + "core-foundation-sys", 3033 + "mach2", 3034 + ] 3035 + 3036 + [[package]] 3037 + name = "itertools" 3038 + version = "0.12.1" 3039 + source = "registry+https://github.com/rust-lang/crates.io-index" 3040 + checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 3041 + dependencies = [ 3042 + "either", 3043 + ] 3044 + 3045 + [[package]] 3046 + name = "itertools" 3047 + version = "0.13.0" 3048 + source = "registry+https://github.com/rust-lang/crates.io-index" 3049 + checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 3050 + dependencies = [ 3051 + "either", 3052 + ] 3053 + 3054 + [[package]] 3055 + name = "itertools" 3056 + version = "0.14.0" 3057 + source = "registry+https://github.com/rust-lang/crates.io-index" 3058 + checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 3059 + dependencies = [ 3060 + "either", 3061 + ] 3062 + 3063 + [[package]] 3064 + name = "itoa" 3065 + version = "1.0.15" 3066 + source = "registry+https://github.com/rust-lang/crates.io-index" 3067 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 3068 + 3069 + [[package]] 3070 + name = "jni" 3071 + version = "0.21.1" 3072 + source = "registry+https://github.com/rust-lang/crates.io-index" 3073 + checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 3074 + dependencies = [ 3075 + "cesu8", 3076 + "cfg-if", 3077 + "combine", 3078 + "jni-sys", 3079 + "log", 3080 + "thiserror 1.0.69", 3081 + "walkdir", 3082 + "windows-sys 0.45.0", 3083 + ] 3084 + 3085 + [[package]] 3086 + name = "jni-sys" 3087 + version = "0.3.0" 3088 + source = "registry+https://github.com/rust-lang/crates.io-index" 3089 + checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 3090 + 3091 + [[package]] 3092 + name = "jobserver" 3093 + version = "0.1.33" 3094 + source = "registry+https://github.com/rust-lang/crates.io-index" 3095 + checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" 3096 + dependencies = [ 3097 + "getrandom 0.3.3", 3098 + "libc", 3099 + ] 3100 + 3101 + [[package]] 3102 + name = "jpeg-decoder" 3103 + version = "0.3.1" 3104 + source = "registry+https://github.com/rust-lang/crates.io-index" 3105 + checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" 3106 + 3107 + [[package]] 3108 + name = "js-sys" 3109 + version = "0.3.77" 3110 + source = "registry+https://github.com/rust-lang/crates.io-index" 3111 + checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 3112 + dependencies = [ 3113 + "once_cell", 3114 + "wasm-bindgen", 3115 + ] 3116 + 3117 + [[package]] 3118 + name = "khronos-egl" 3119 + version = "6.0.0" 3120 + source = "registry+https://github.com/rust-lang/crates.io-index" 3121 + checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" 3122 + dependencies = [ 3123 + "libc", 3124 + "libloading", 3125 + "pkg-config", 3126 + ] 3127 + 3128 + [[package]] 3129 + name = "khronos_api" 3130 + version = "3.1.0" 3131 + source = "registry+https://github.com/rust-lang/crates.io-index" 3132 + checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 3133 + 3134 + [[package]] 3135 + name = "kqueue" 3136 + version = "1.1.1" 3137 + source = "registry+https://github.com/rust-lang/crates.io-index" 3138 + checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" 3139 + dependencies = [ 3140 + "kqueue-sys", 3141 + "libc", 3142 + ] 3143 + 3144 + [[package]] 3145 + name = "kqueue-sys" 3146 + version = "1.0.4" 3147 + source = "registry+https://github.com/rust-lang/crates.io-index" 3148 + checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" 3149 + dependencies = [ 3150 + "bitflags 1.3.2", 3151 + "libc", 3152 + ] 3153 + 3154 + [[package]] 3155 + name = "ktx2" 3156 + version = "0.3.0" 3157 + source = "registry+https://github.com/rust-lang/crates.io-index" 3158 + checksum = "87d65e08a9ec02e409d27a0139eaa6b9756b4d81fe7cde71f6941a83730ce838" 3159 + dependencies = [ 3160 + "bitflags 1.3.2", 3161 + ] 3162 + 3163 + [[package]] 3164 + name = "lazy_static" 3165 + version = "1.5.0" 3166 + source = "registry+https://github.com/rust-lang/crates.io-index" 3167 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 3168 + 3169 + [[package]] 3170 + name = "lebe" 3171 + version = "0.5.2" 3172 + source = "registry+https://github.com/rust-lang/crates.io-index" 3173 + checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" 3174 + 3175 + [[package]] 3176 + name = "lewton" 3177 + version = "0.10.2" 3178 + source = "registry+https://github.com/rust-lang/crates.io-index" 3179 + checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" 3180 + dependencies = [ 3181 + "byteorder", 3182 + "ogg", 3183 + "tinyvec", 3184 + ] 3185 + 3186 + [[package]] 3187 + name = "libc" 3188 + version = "0.2.172" 3189 + source = "registry+https://github.com/rust-lang/crates.io-index" 3190 + checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 3191 + 3192 + [[package]] 3193 + name = "libfuzzer-sys" 3194 + version = "0.4.9" 3195 + source = "registry+https://github.com/rust-lang/crates.io-index" 3196 + checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" 3197 + dependencies = [ 3198 + "arbitrary", 3199 + "cc", 3200 + ] 3201 + 3202 + [[package]] 3203 + name = "libloading" 3204 + version = "0.8.8" 3205 + source = "registry+https://github.com/rust-lang/crates.io-index" 3206 + checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" 3207 + dependencies = [ 3208 + "cfg-if", 3209 + "windows-targets 0.53.0", 3210 + ] 3211 + 3212 + [[package]] 3213 + name = "libm" 3214 + version = "0.2.15" 3215 + source = "registry+https://github.com/rust-lang/crates.io-index" 3216 + checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 3217 + 3218 + [[package]] 3219 + name = "libredox" 3220 + version = "0.1.3" 3221 + source = "registry+https://github.com/rust-lang/crates.io-index" 3222 + checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 3223 + dependencies = [ 3224 + "bitflags 2.9.1", 3225 + "libc", 3226 + "redox_syscall 0.5.12", 3227 + ] 3228 + 3229 + [[package]] 3230 + name = "libudev-sys" 3231 + version = "0.1.4" 3232 + source = "registry+https://github.com/rust-lang/crates.io-index" 3233 + checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" 3234 + dependencies = [ 3235 + "libc", 3236 + "pkg-config", 3237 + ] 3238 + 3239 + [[package]] 3240 + name = "linux-raw-sys" 3241 + version = "0.4.15" 3242 + source = "registry+https://github.com/rust-lang/crates.io-index" 3243 + checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 3244 + 3245 + [[package]] 3246 + name = "linux-raw-sys" 3247 + version = "0.9.4" 3248 + source = "registry+https://github.com/rust-lang/crates.io-index" 3249 + checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 3250 + 3251 + [[package]] 3252 + name = "litemap" 3253 + version = "0.8.0" 3254 + source = "registry+https://github.com/rust-lang/crates.io-index" 3255 + checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 3256 + 3257 + [[package]] 3258 + name = "litrs" 3259 + version = "0.4.1" 3260 + source = "registry+https://github.com/rust-lang/crates.io-index" 3261 + checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" 3262 + 3263 + [[package]] 3264 + name = "lock_api" 3265 + version = "0.4.12" 3266 + source = "registry+https://github.com/rust-lang/crates.io-index" 3267 + checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 3268 + dependencies = [ 3269 + "autocfg", 3270 + "scopeguard", 3271 + ] 3272 + 3273 + [[package]] 3274 + name = "log" 3275 + version = "0.4.27" 3276 + source = "registry+https://github.com/rust-lang/crates.io-index" 3277 + checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 3278 + 3279 + [[package]] 3280 + name = "loop9" 3281 + version = "0.1.5" 3282 + source = "registry+https://github.com/rust-lang/crates.io-index" 3283 + checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" 3284 + dependencies = [ 3285 + "imgref", 3286 + ] 3287 + 3288 + [[package]] 3289 + name = "mach2" 3290 + version = "0.4.2" 3291 + source = "registry+https://github.com/rust-lang/crates.io-index" 3292 + checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" 3293 + dependencies = [ 3294 + "libc", 3295 + ] 3296 + 3297 + [[package]] 3298 + name = "malloc_buf" 3299 + version = "0.0.6" 3300 + source = "registry+https://github.com/rust-lang/crates.io-index" 3301 + checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 3302 + dependencies = [ 3303 + "libc", 3304 + ] 3305 + 3306 + [[package]] 3307 + name = "matchers" 3308 + version = "0.1.0" 3309 + source = "registry+https://github.com/rust-lang/crates.io-index" 3310 + checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 3311 + dependencies = [ 3312 + "regex-automata 0.1.10", 3313 + ] 3314 + 3315 + [[package]] 3316 + name = "maybe-rayon" 3317 + version = "0.1.1" 3318 + source = "registry+https://github.com/rust-lang/crates.io-index" 3319 + checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" 3320 + dependencies = [ 3321 + "cfg-if", 3322 + "rayon", 3323 + ] 3324 + 3325 + [[package]] 3326 + name = "memchr" 3327 + version = "2.7.4" 3328 + source = "registry+https://github.com/rust-lang/crates.io-index" 3329 + checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 3330 + 3331 + [[package]] 3332 + name = "memmap2" 3333 + version = "0.9.5" 3334 + source = "registry+https://github.com/rust-lang/crates.io-index" 3335 + checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" 3336 + dependencies = [ 3337 + "libc", 3338 + ] 3339 + 3340 + [[package]] 3341 + name = "metal" 3342 + version = "0.31.0" 3343 + source = "registry+https://github.com/rust-lang/crates.io-index" 3344 + checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" 3345 + dependencies = [ 3346 + "bitflags 2.9.1", 3347 + "block", 3348 + "core-graphics-types", 3349 + "foreign-types", 3350 + "log", 3351 + "objc", 3352 + "paste", 3353 + ] 3354 + 3355 + [[package]] 3356 + name = "minimal-lexical" 3357 + version = "0.2.1" 3358 + source = "registry+https://github.com/rust-lang/crates.io-index" 3359 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 3360 + 3361 + [[package]] 3362 + name = "miniz_oxide" 3363 + version = "0.8.8" 3364 + source = "registry+https://github.com/rust-lang/crates.io-index" 3365 + checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" 3366 + dependencies = [ 3367 + "adler2", 3368 + "simd-adler32", 3369 + ] 3370 + 3371 + [[package]] 3372 + name = "mio" 3373 + version = "1.0.4" 3374 + source = "registry+https://github.com/rust-lang/crates.io-index" 3375 + checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 3376 + dependencies = [ 3377 + "libc", 3378 + "log", 3379 + "wasi 0.11.0+wasi-snapshot-preview1", 3380 + "windows-sys 0.59.0", 3381 + ] 3382 + 3383 + [[package]] 3384 + name = "naga" 3385 + version = "24.0.0" 3386 + source = "registry+https://github.com/rust-lang/crates.io-index" 3387 + checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" 3388 + dependencies = [ 3389 + "arrayvec", 3390 + "bit-set 0.8.0", 3391 + "bitflags 2.9.1", 3392 + "cfg_aliases", 3393 + "codespan-reporting", 3394 + "hexf-parse", 3395 + "indexmap", 3396 + "log", 3397 + "pp-rs", 3398 + "rustc-hash", 3399 + "spirv", 3400 + "strum", 3401 + "termcolor", 3402 + "thiserror 2.0.12", 3403 + "unicode-xid", 3404 + ] 3405 + 3406 + [[package]] 3407 + name = "naga_oil" 3408 + version = "0.17.1" 3409 + source = "registry+https://github.com/rust-lang/crates.io-index" 3410 + checksum = "f2464f7395decfd16bb4c33fb0cb3b2c645cc60d051bc7fb652d3720bfb20f18" 3411 + dependencies = [ 3412 + "bit-set 0.5.3", 3413 + "codespan-reporting", 3414 + "data-encoding", 3415 + "indexmap", 3416 + "naga", 3417 + "once_cell", 3418 + "regex", 3419 + "regex-syntax 0.8.5", 3420 + "rustc-hash", 3421 + "thiserror 1.0.69", 3422 + "tracing", 3423 + "unicode-ident", 3424 + ] 3425 + 3426 + [[package]] 3427 + name = "ndk" 3428 + version = "0.8.0" 3429 + source = "registry+https://github.com/rust-lang/crates.io-index" 3430 + checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" 3431 + dependencies = [ 3432 + "bitflags 2.9.1", 3433 + "jni-sys", 3434 + "log", 3435 + "ndk-sys 0.5.0+25.2.9519653", 3436 + "num_enum", 3437 + "thiserror 1.0.69", 3438 + ] 3439 + 3440 + [[package]] 3441 + name = "ndk" 3442 + version = "0.9.0" 3443 + source = "registry+https://github.com/rust-lang/crates.io-index" 3444 + checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 3445 + dependencies = [ 3446 + "bitflags 2.9.1", 3447 + "jni-sys", 3448 + "log", 3449 + "ndk-sys 0.6.0+11769913", 3450 + "num_enum", 3451 + "raw-window-handle", 3452 + "thiserror 1.0.69", 3453 + ] 3454 + 3455 + [[package]] 3456 + name = "ndk-context" 3457 + version = "0.1.1" 3458 + source = "registry+https://github.com/rust-lang/crates.io-index" 3459 + checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 3460 + 3461 + [[package]] 3462 + name = "ndk-sys" 3463 + version = "0.5.0+25.2.9519653" 3464 + source = "registry+https://github.com/rust-lang/crates.io-index" 3465 + checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" 3466 + dependencies = [ 3467 + "jni-sys", 3468 + ] 3469 + 3470 + [[package]] 3471 + name = "ndk-sys" 3472 + version = "0.6.0+11769913" 3473 + source = "registry+https://github.com/rust-lang/crates.io-index" 3474 + checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" 3475 + dependencies = [ 3476 + "jni-sys", 3477 + ] 3478 + 3479 + [[package]] 3480 + name = "new_debug_unreachable" 3481 + version = "1.0.6" 3482 + source = "registry+https://github.com/rust-lang/crates.io-index" 3483 + checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 3484 + 3485 + [[package]] 3486 + name = "nix" 3487 + version = "0.29.0" 3488 + source = "registry+https://github.com/rust-lang/crates.io-index" 3489 + checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 3490 + dependencies = [ 3491 + "bitflags 2.9.1", 3492 + "cfg-if", 3493 + "cfg_aliases", 3494 + "libc", 3495 + ] 3496 + 3497 + [[package]] 3498 + name = "nix" 3499 + version = "0.30.1" 3500 + source = "registry+https://github.com/rust-lang/crates.io-index" 3501 + checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 3502 + dependencies = [ 3503 + "bitflags 2.9.1", 3504 + "cfg-if", 3505 + "cfg_aliases", 3506 + "libc", 3507 + ] 3508 + 3509 + [[package]] 3510 + name = "nohash-hasher" 3511 + version = "0.2.0" 3512 + source = "registry+https://github.com/rust-lang/crates.io-index" 3513 + checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 3514 + 3515 + [[package]] 3516 + name = "nom" 3517 + version = "7.1.3" 3518 + source = "registry+https://github.com/rust-lang/crates.io-index" 3519 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 3520 + dependencies = [ 3521 + "memchr", 3522 + "minimal-lexical", 3523 + ] 3524 + 3525 + [[package]] 3526 + name = "nonmax" 3527 + version = "0.5.5" 3528 + source = "registry+https://github.com/rust-lang/crates.io-index" 3529 + checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" 3530 + 3531 + [[package]] 3532 + name = "noop_proc_macro" 3533 + version = "0.3.0" 3534 + source = "registry+https://github.com/rust-lang/crates.io-index" 3535 + checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" 3536 + 3537 + [[package]] 3538 + name = "notify" 3539 + version = "8.0.0" 3540 + source = "registry+https://github.com/rust-lang/crates.io-index" 3541 + checksum = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943" 3542 + dependencies = [ 3543 + "bitflags 2.9.1", 3544 + "filetime", 3545 + "fsevent-sys", 3546 + "inotify", 3547 + "kqueue", 3548 + "libc", 3549 + "log", 3550 + "mio", 3551 + "notify-types", 3552 + "walkdir", 3553 + "windows-sys 0.59.0", 3554 + ] 3555 + 3556 + [[package]] 3557 + name = "notify-debouncer-full" 3558 + version = "0.5.0" 3559 + source = "registry+https://github.com/rust-lang/crates.io-index" 3560 + checksum = "d2d88b1a7538054351c8258338df7c931a590513fb3745e8c15eb9ff4199b8d1" 3561 + dependencies = [ 3562 + "file-id", 3563 + "log", 3564 + "notify", 3565 + "notify-types", 3566 + "walkdir", 3567 + ] 3568 + 3569 + [[package]] 3570 + name = "notify-types" 3571 + version = "2.0.0" 3572 + source = "registry+https://github.com/rust-lang/crates.io-index" 3573 + checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" 3574 + 3575 + [[package]] 3576 + name = "ntapi" 3577 + version = "0.4.1" 3578 + source = "registry+https://github.com/rust-lang/crates.io-index" 3579 + checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" 3580 + dependencies = [ 3581 + "winapi", 3582 + ] 3583 + 3584 + [[package]] 3585 + name = "nu-ansi-term" 3586 + version = "0.46.0" 3587 + source = "registry+https://github.com/rust-lang/crates.io-index" 3588 + checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 3589 + dependencies = [ 3590 + "overload", 3591 + "winapi", 3592 + ] 3593 + 3594 + [[package]] 3595 + name = "num-bigint" 3596 + version = "0.4.6" 3597 + source = "registry+https://github.com/rust-lang/crates.io-index" 3598 + checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 3599 + dependencies = [ 3600 + "num-integer", 3601 + "num-traits", 3602 + ] 3603 + 3604 + [[package]] 3605 + name = "num-derive" 3606 + version = "0.4.2" 3607 + source = "registry+https://github.com/rust-lang/crates.io-index" 3608 + checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" 3609 + dependencies = [ 3610 + "proc-macro2", 3611 + "quote", 3612 + "syn", 3613 + ] 3614 + 3615 + [[package]] 3616 + name = "num-integer" 3617 + version = "0.1.46" 3618 + source = "registry+https://github.com/rust-lang/crates.io-index" 3619 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 3620 + dependencies = [ 3621 + "num-traits", 3622 + ] 3623 + 3624 + [[package]] 3625 + name = "num-rational" 3626 + version = "0.4.2" 3627 + source = "registry+https://github.com/rust-lang/crates.io-index" 3628 + checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" 3629 + dependencies = [ 3630 + "num-bigint", 3631 + "num-integer", 3632 + "num-traits", 3633 + ] 3634 + 3635 + [[package]] 3636 + name = "num-traits" 3637 + version = "0.2.19" 3638 + source = "registry+https://github.com/rust-lang/crates.io-index" 3639 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 3640 + dependencies = [ 3641 + "autocfg", 3642 + "libm", 3643 + ] 3644 + 3645 + [[package]] 3646 + name = "num_enum" 3647 + version = "0.7.3" 3648 + source = "registry+https://github.com/rust-lang/crates.io-index" 3649 + checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" 3650 + dependencies = [ 3651 + "num_enum_derive", 3652 + ] 3653 + 3654 + [[package]] 3655 + name = "num_enum_derive" 3656 + version = "0.7.3" 3657 + source = "registry+https://github.com/rust-lang/crates.io-index" 3658 + checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" 3659 + dependencies = [ 3660 + "proc-macro-crate", 3661 + "proc-macro2", 3662 + "quote", 3663 + "syn", 3664 + ] 3665 + 3666 + [[package]] 3667 + name = "objc" 3668 + version = "0.2.7" 3669 + source = "registry+https://github.com/rust-lang/crates.io-index" 3670 + checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 3671 + dependencies = [ 3672 + "malloc_buf", 3673 + ] 3674 + 3675 + [[package]] 3676 + name = "objc-sys" 3677 + version = "0.3.5" 3678 + source = "registry+https://github.com/rust-lang/crates.io-index" 3679 + checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 3680 + 3681 + [[package]] 3682 + name = "objc2" 3683 + version = "0.5.2" 3684 + source = "registry+https://github.com/rust-lang/crates.io-index" 3685 + checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 3686 + dependencies = [ 3687 + "objc-sys", 3688 + "objc2-encode", 3689 + ] 3690 + 3691 + [[package]] 3692 + name = "objc2" 3693 + version = "0.6.1" 3694 + source = "registry+https://github.com/rust-lang/crates.io-index" 3695 + checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" 3696 + dependencies = [ 3697 + "objc2-encode", 3698 + ] 3699 + 3700 + [[package]] 3701 + name = "objc2-app-kit" 3702 + version = "0.2.2" 3703 + source = "registry+https://github.com/rust-lang/crates.io-index" 3704 + checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" 3705 + dependencies = [ 3706 + "bitflags 2.9.1", 3707 + "block2", 3708 + "libc", 3709 + "objc2 0.5.2", 3710 + "objc2-core-data", 3711 + "objc2-core-image", 3712 + "objc2-foundation 0.2.2", 3713 + "objc2-quartz-core", 3714 + ] 3715 + 3716 + [[package]] 3717 + name = "objc2-app-kit" 3718 + version = "0.3.1" 3719 + source = "registry+https://github.com/rust-lang/crates.io-index" 3720 + checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" 3721 + dependencies = [ 3722 + "bitflags 2.9.1", 3723 + "objc2 0.6.1", 3724 + "objc2-core-graphics", 3725 + "objc2-foundation 0.3.1", 3726 + ] 3727 + 3728 + [[package]] 3729 + name = "objc2-cloud-kit" 3730 + version = "0.2.2" 3731 + source = "registry+https://github.com/rust-lang/crates.io-index" 3732 + checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" 3733 + dependencies = [ 3734 + "bitflags 2.9.1", 3735 + "block2", 3736 + "objc2 0.5.2", 3737 + "objc2-core-location", 3738 + "objc2-foundation 0.2.2", 3739 + ] 3740 + 3741 + [[package]] 3742 + name = "objc2-contacts" 3743 + version = "0.2.2" 3744 + source = "registry+https://github.com/rust-lang/crates.io-index" 3745 + checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" 3746 + dependencies = [ 3747 + "block2", 3748 + "objc2 0.5.2", 3749 + "objc2-foundation 0.2.2", 3750 + ] 3751 + 3752 + [[package]] 3753 + name = "objc2-core-data" 3754 + version = "0.2.2" 3755 + source = "registry+https://github.com/rust-lang/crates.io-index" 3756 + checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" 3757 + dependencies = [ 3758 + "bitflags 2.9.1", 3759 + "block2", 3760 + "objc2 0.5.2", 3761 + "objc2-foundation 0.2.2", 3762 + ] 3763 + 3764 + [[package]] 3765 + name = "objc2-core-foundation" 3766 + version = "0.3.1" 3767 + source = "registry+https://github.com/rust-lang/crates.io-index" 3768 + checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" 3769 + dependencies = [ 3770 + "bitflags 2.9.1", 3771 + "dispatch2", 3772 + "objc2 0.6.1", 3773 + ] 3774 + 3775 + [[package]] 3776 + name = "objc2-core-graphics" 3777 + version = "0.3.1" 3778 + source = "registry+https://github.com/rust-lang/crates.io-index" 3779 + checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" 3780 + dependencies = [ 3781 + "bitflags 2.9.1", 3782 + "dispatch2", 3783 + "objc2 0.6.1", 3784 + "objc2-core-foundation", 3785 + "objc2-io-surface", 3786 + ] 3787 + 3788 + [[package]] 3789 + name = "objc2-core-image" 3790 + version = "0.2.2" 3791 + source = "registry+https://github.com/rust-lang/crates.io-index" 3792 + checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" 3793 + dependencies = [ 3794 + "block2", 3795 + "objc2 0.5.2", 3796 + "objc2-foundation 0.2.2", 3797 + "objc2-metal", 3798 + ] 3799 + 3800 + [[package]] 3801 + name = "objc2-core-location" 3802 + version = "0.2.2" 3803 + source = "registry+https://github.com/rust-lang/crates.io-index" 3804 + checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" 3805 + dependencies = [ 3806 + "block2", 3807 + "objc2 0.5.2", 3808 + "objc2-contacts", 3809 + "objc2-foundation 0.2.2", 3810 + ] 3811 + 3812 + [[package]] 3813 + name = "objc2-encode" 3814 + version = "4.1.0" 3815 + source = "registry+https://github.com/rust-lang/crates.io-index" 3816 + checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 3817 + 3818 + [[package]] 3819 + name = "objc2-foundation" 3820 + version = "0.2.2" 3821 + source = "registry+https://github.com/rust-lang/crates.io-index" 3822 + checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 3823 + dependencies = [ 3824 + "bitflags 2.9.1", 3825 + "block2", 3826 + "dispatch", 3827 + "libc", 3828 + "objc2 0.5.2", 3829 + ] 3830 + 3831 + [[package]] 3832 + name = "objc2-foundation" 3833 + version = "0.3.1" 3834 + source = "registry+https://github.com/rust-lang/crates.io-index" 3835 + checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" 3836 + dependencies = [ 3837 + "bitflags 2.9.1", 3838 + "objc2 0.6.1", 3839 + "objc2-core-foundation", 3840 + ] 3841 + 3842 + [[package]] 3843 + name = "objc2-io-surface" 3844 + version = "0.3.1" 3845 + source = "registry+https://github.com/rust-lang/crates.io-index" 3846 + checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" 3847 + dependencies = [ 3848 + "bitflags 2.9.1", 3849 + "objc2 0.6.1", 3850 + "objc2-core-foundation", 3851 + ] 3852 + 3853 + [[package]] 3854 + name = "objc2-link-presentation" 3855 + version = "0.2.2" 3856 + source = "registry+https://github.com/rust-lang/crates.io-index" 3857 + checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" 3858 + dependencies = [ 3859 + "block2", 3860 + "objc2 0.5.2", 3861 + "objc2-app-kit 0.2.2", 3862 + "objc2-foundation 0.2.2", 3863 + ] 3864 + 3865 + [[package]] 3866 + name = "objc2-metal" 3867 + version = "0.2.2" 3868 + source = "registry+https://github.com/rust-lang/crates.io-index" 3869 + checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 3870 + dependencies = [ 3871 + "bitflags 2.9.1", 3872 + "block2", 3873 + "objc2 0.5.2", 3874 + "objc2-foundation 0.2.2", 3875 + ] 3876 + 3877 + [[package]] 3878 + name = "objc2-quartz-core" 3879 + version = "0.2.2" 3880 + source = "registry+https://github.com/rust-lang/crates.io-index" 3881 + checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 3882 + dependencies = [ 3883 + "bitflags 2.9.1", 3884 + "block2", 3885 + "objc2 0.5.2", 3886 + "objc2-foundation 0.2.2", 3887 + "objc2-metal", 3888 + ] 3889 + 3890 + [[package]] 3891 + name = "objc2-symbols" 3892 + version = "0.2.2" 3893 + source = "registry+https://github.com/rust-lang/crates.io-index" 3894 + checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" 3895 + dependencies = [ 3896 + "objc2 0.5.2", 3897 + "objc2-foundation 0.2.2", 3898 + ] 3899 + 3900 + [[package]] 3901 + name = "objc2-ui-kit" 3902 + version = "0.2.2" 3903 + source = "registry+https://github.com/rust-lang/crates.io-index" 3904 + checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" 3905 + dependencies = [ 3906 + "bitflags 2.9.1", 3907 + "block2", 3908 + "objc2 0.5.2", 3909 + "objc2-cloud-kit", 3910 + "objc2-core-data", 3911 + "objc2-core-image", 3912 + "objc2-core-location", 3913 + "objc2-foundation 0.2.2", 3914 + "objc2-link-presentation", 3915 + "objc2-quartz-core", 3916 + "objc2-symbols", 3917 + "objc2-uniform-type-identifiers", 3918 + "objc2-user-notifications", 3919 + ] 3920 + 3921 + [[package]] 3922 + name = "objc2-uniform-type-identifiers" 3923 + version = "0.2.2" 3924 + source = "registry+https://github.com/rust-lang/crates.io-index" 3925 + checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" 3926 + dependencies = [ 3927 + "block2", 3928 + "objc2 0.5.2", 3929 + "objc2-foundation 0.2.2", 3930 + ] 3931 + 3932 + [[package]] 3933 + name = "objc2-user-notifications" 3934 + version = "0.2.2" 3935 + source = "registry+https://github.com/rust-lang/crates.io-index" 3936 + checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" 3937 + dependencies = [ 3938 + "bitflags 2.9.1", 3939 + "block2", 3940 + "objc2 0.5.2", 3941 + "objc2-core-location", 3942 + "objc2-foundation 0.2.2", 3943 + ] 3944 + 3945 + [[package]] 3946 + name = "oboe" 3947 + version = "0.6.1" 3948 + source = "registry+https://github.com/rust-lang/crates.io-index" 3949 + checksum = "e8b61bebd49e5d43f5f8cc7ee2891c16e0f41ec7954d36bcb6c14c5e0de867fb" 3950 + dependencies = [ 3951 + "jni", 3952 + "ndk 0.8.0", 3953 + "ndk-context", 3954 + "num-derive", 3955 + "num-traits", 3956 + "oboe-sys", 3957 + ] 3958 + 3959 + [[package]] 3960 + name = "oboe-sys" 3961 + version = "0.6.1" 3962 + source = "registry+https://github.com/rust-lang/crates.io-index" 3963 + checksum = "6c8bb09a4a2b1d668170cfe0a7d5bc103f8999fb316c98099b6a9939c9f2e79d" 3964 + dependencies = [ 3965 + "cc", 3966 + ] 3967 + 3968 + [[package]] 3969 + name = "offset-allocator" 3970 + version = "0.2.0" 3971 + source = "registry+https://github.com/rust-lang/crates.io-index" 3972 + checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2" 3973 + dependencies = [ 3974 + "log", 3975 + "nonmax", 3976 + ] 3977 + 3978 + [[package]] 3979 + name = "ogg" 3980 + version = "0.8.0" 3981 + source = "registry+https://github.com/rust-lang/crates.io-index" 3982 + checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" 3983 + dependencies = [ 3984 + "byteorder", 3985 + ] 3986 + 3987 + [[package]] 3988 + name = "once_cell" 3989 + version = "1.21.3" 3990 + source = "registry+https://github.com/rust-lang/crates.io-index" 3991 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 3992 + 3993 + [[package]] 3994 + name = "orbclient" 3995 + version = "0.3.48" 3996 + source = "registry+https://github.com/rust-lang/crates.io-index" 3997 + checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" 3998 + dependencies = [ 3999 + "libredox", 4000 + ] 4001 + 4002 + [[package]] 4003 + name = "ordered-float" 4004 + version = "4.6.0" 4005 + source = "registry+https://github.com/rust-lang/crates.io-index" 4006 + checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" 4007 + dependencies = [ 4008 + "num-traits", 4009 + ] 4010 + 4011 + [[package]] 4012 + name = "overload" 4013 + version = "0.1.1" 4014 + source = "registry+https://github.com/rust-lang/crates.io-index" 4015 + checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 4016 + 4017 + [[package]] 4018 + name = "owned_ttf_parser" 4019 + version = "0.25.0" 4020 + source = "registry+https://github.com/rust-lang/crates.io-index" 4021 + checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" 4022 + dependencies = [ 4023 + "ttf-parser 0.25.1", 4024 + ] 4025 + 4026 + [[package]] 4027 + name = "parking" 4028 + version = "2.2.1" 4029 + source = "registry+https://github.com/rust-lang/crates.io-index" 4030 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 4031 + 4032 + [[package]] 4033 + name = "parking_lot" 4034 + version = "0.12.3" 4035 + source = "registry+https://github.com/rust-lang/crates.io-index" 4036 + checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 4037 + dependencies = [ 4038 + "lock_api", 4039 + "parking_lot_core", 4040 + ] 4041 + 4042 + [[package]] 4043 + name = "parking_lot_core" 4044 + version = "0.9.10" 4045 + source = "registry+https://github.com/rust-lang/crates.io-index" 4046 + checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 4047 + dependencies = [ 4048 + "cfg-if", 4049 + "libc", 4050 + "redox_syscall 0.5.12", 4051 + "smallvec", 4052 + "windows-targets 0.52.6", 4053 + ] 4054 + 4055 + [[package]] 4056 + name = "parylord" 4057 + version = "0.1.0" 4058 + dependencies = [ 4059 + "bevy", 4060 + "bevy-inspector-egui", 4061 + "bevy_egui", 4062 + "log", 4063 + "rand", 4064 + "tracing", 4065 + ] 4066 + 4067 + [[package]] 4068 + name = "paste" 4069 + version = "1.0.15" 4070 + source = "registry+https://github.com/rust-lang/crates.io-index" 4071 + checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 4072 + 4073 + [[package]] 4074 + name = "percent-encoding" 4075 + version = "2.3.1" 4076 + source = "registry+https://github.com/rust-lang/crates.io-index" 4077 + checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 4078 + 4079 + [[package]] 4080 + name = "petgraph" 4081 + version = "0.7.1" 4082 + source = "registry+https://github.com/rust-lang/crates.io-index" 4083 + checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" 4084 + dependencies = [ 4085 + "fixedbitset", 4086 + "indexmap", 4087 + "serde", 4088 + "serde_derive", 4089 + ] 4090 + 4091 + [[package]] 4092 + name = "pin-project" 4093 + version = "1.1.10" 4094 + source = "registry+https://github.com/rust-lang/crates.io-index" 4095 + checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 4096 + dependencies = [ 4097 + "pin-project-internal", 4098 + ] 4099 + 4100 + [[package]] 4101 + name = "pin-project-internal" 4102 + version = "1.1.10" 4103 + source = "registry+https://github.com/rust-lang/crates.io-index" 4104 + checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 4105 + dependencies = [ 4106 + "proc-macro2", 4107 + "quote", 4108 + "syn", 4109 + ] 4110 + 4111 + [[package]] 4112 + name = "pin-project-lite" 4113 + version = "0.2.16" 4114 + source = "registry+https://github.com/rust-lang/crates.io-index" 4115 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 4116 + 4117 + [[package]] 4118 + name = "piper" 4119 + version = "0.2.4" 4120 + source = "registry+https://github.com/rust-lang/crates.io-index" 4121 + checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 4122 + dependencies = [ 4123 + "atomic-waker", 4124 + "fastrand", 4125 + "futures-io", 4126 + ] 4127 + 4128 + [[package]] 4129 + name = "pkg-config" 4130 + version = "0.3.32" 4131 + source = "registry+https://github.com/rust-lang/crates.io-index" 4132 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 4133 + 4134 + [[package]] 4135 + name = "png" 4136 + version = "0.17.16" 4137 + source = "registry+https://github.com/rust-lang/crates.io-index" 4138 + checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" 4139 + dependencies = [ 4140 + "bitflags 1.3.2", 4141 + "crc32fast", 4142 + "fdeflate", 4143 + "flate2", 4144 + "miniz_oxide", 4145 + ] 4146 + 4147 + [[package]] 4148 + name = "polling" 4149 + version = "3.8.0" 4150 + source = "registry+https://github.com/rust-lang/crates.io-index" 4151 + checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" 4152 + dependencies = [ 4153 + "cfg-if", 4154 + "concurrent-queue", 4155 + "hermit-abi", 4156 + "pin-project-lite", 4157 + "rustix 1.0.7", 4158 + "tracing", 4159 + "windows-sys 0.59.0", 4160 + ] 4161 + 4162 + [[package]] 4163 + name = "portable-atomic" 4164 + version = "1.11.0" 4165 + source = "registry+https://github.com/rust-lang/crates.io-index" 4166 + checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" 4167 + 4168 + [[package]] 4169 + name = "portable-atomic-util" 4170 + version = "0.2.4" 4171 + source = "registry+https://github.com/rust-lang/crates.io-index" 4172 + checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 4173 + dependencies = [ 4174 + "portable-atomic", 4175 + ] 4176 + 4177 + [[package]] 4178 + name = "potential_utf" 4179 + version = "0.1.2" 4180 + source = "registry+https://github.com/rust-lang/crates.io-index" 4181 + checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 4182 + dependencies = [ 4183 + "zerovec", 4184 + ] 4185 + 4186 + [[package]] 4187 + name = "pp-rs" 4188 + version = "0.2.1" 4189 + source = "registry+https://github.com/rust-lang/crates.io-index" 4190 + checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee" 4191 + dependencies = [ 4192 + "unicode-xid", 4193 + ] 4194 + 4195 + [[package]] 4196 + name = "ppv-lite86" 4197 + version = "0.2.21" 4198 + source = "registry+https://github.com/rust-lang/crates.io-index" 4199 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 4200 + dependencies = [ 4201 + "zerocopy", 4202 + ] 4203 + 4204 + [[package]] 4205 + name = "presser" 4206 + version = "0.3.1" 4207 + source = "registry+https://github.com/rust-lang/crates.io-index" 4208 + checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" 4209 + 4210 + [[package]] 4211 + name = "prettyplease" 4212 + version = "0.2.32" 4213 + source = "registry+https://github.com/rust-lang/crates.io-index" 4214 + checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" 4215 + dependencies = [ 4216 + "proc-macro2", 4217 + "syn", 4218 + ] 4219 + 4220 + [[package]] 4221 + name = "proc-macro-crate" 4222 + version = "3.3.0" 4223 + source = "registry+https://github.com/rust-lang/crates.io-index" 4224 + checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" 4225 + dependencies = [ 4226 + "toml_edit", 4227 + ] 4228 + 4229 + [[package]] 4230 + name = "proc-macro2" 4231 + version = "1.0.95" 4232 + source = "registry+https://github.com/rust-lang/crates.io-index" 4233 + checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 4234 + dependencies = [ 4235 + "unicode-ident", 4236 + ] 4237 + 4238 + [[package]] 4239 + name = "profiling" 4240 + version = "1.0.16" 4241 + source = "registry+https://github.com/rust-lang/crates.io-index" 4242 + checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" 4243 + dependencies = [ 4244 + "profiling-procmacros", 4245 + ] 4246 + 4247 + [[package]] 4248 + name = "profiling-procmacros" 4249 + version = "1.0.16" 4250 + source = "registry+https://github.com/rust-lang/crates.io-index" 4251 + checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" 4252 + dependencies = [ 4253 + "quote", 4254 + "syn", 4255 + ] 4256 + 4257 + [[package]] 4258 + name = "qoi" 4259 + version = "0.4.1" 4260 + source = "registry+https://github.com/rust-lang/crates.io-index" 4261 + checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" 4262 + dependencies = [ 4263 + "bytemuck", 4264 + ] 4265 + 4266 + [[package]] 4267 + name = "quick-error" 4268 + version = "2.0.1" 4269 + source = "registry+https://github.com/rust-lang/crates.io-index" 4270 + checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" 4271 + 4272 + [[package]] 4273 + name = "quick-xml" 4274 + version = "0.37.5" 4275 + source = "registry+https://github.com/rust-lang/crates.io-index" 4276 + checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" 4277 + dependencies = [ 4278 + "memchr", 4279 + ] 4280 + 4281 + [[package]] 4282 + name = "quote" 4283 + version = "1.0.40" 4284 + source = "registry+https://github.com/rust-lang/crates.io-index" 4285 + checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 4286 + dependencies = [ 4287 + "proc-macro2", 4288 + ] 4289 + 4290 + [[package]] 4291 + name = "r-efi" 4292 + version = "5.2.0" 4293 + source = "registry+https://github.com/rust-lang/crates.io-index" 4294 + checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 4295 + 4296 + [[package]] 4297 + name = "radsort" 4298 + version = "0.1.1" 4299 + source = "registry+https://github.com/rust-lang/crates.io-index" 4300 + checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22" 4301 + 4302 + [[package]] 4303 + name = "rand" 4304 + version = "0.8.5" 4305 + source = "registry+https://github.com/rust-lang/crates.io-index" 4306 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 4307 + dependencies = [ 4308 + "libc", 4309 + "rand_chacha", 4310 + "rand_core", 4311 + ] 4312 + 4313 + [[package]] 4314 + name = "rand_chacha" 4315 + version = "0.3.1" 4316 + source = "registry+https://github.com/rust-lang/crates.io-index" 4317 + checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 4318 + dependencies = [ 4319 + "ppv-lite86", 4320 + "rand_core", 4321 + ] 4322 + 4323 + [[package]] 4324 + name = "rand_core" 4325 + version = "0.6.4" 4326 + source = "registry+https://github.com/rust-lang/crates.io-index" 4327 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 4328 + dependencies = [ 4329 + "getrandom 0.2.16", 4330 + ] 4331 + 4332 + [[package]] 4333 + name = "rand_distr" 4334 + version = "0.4.3" 4335 + source = "registry+https://github.com/rust-lang/crates.io-index" 4336 + checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" 4337 + dependencies = [ 4338 + "num-traits", 4339 + "rand", 4340 + ] 4341 + 4342 + [[package]] 4343 + name = "range-alloc" 4344 + version = "0.1.4" 4345 + source = "registry+https://github.com/rust-lang/crates.io-index" 4346 + checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" 4347 + 4348 + [[package]] 4349 + name = "rangemap" 4350 + version = "1.5.1" 4351 + source = "registry+https://github.com/rust-lang/crates.io-index" 4352 + checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684" 4353 + 4354 + [[package]] 4355 + name = "rav1e" 4356 + version = "0.7.1" 4357 + source = "registry+https://github.com/rust-lang/crates.io-index" 4358 + checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" 4359 + dependencies = [ 4360 + "arbitrary", 4361 + "arg_enum_proc_macro", 4362 + "arrayvec", 4363 + "av1-grain", 4364 + "bitstream-io", 4365 + "built", 4366 + "cfg-if", 4367 + "interpolate_name", 4368 + "itertools 0.12.1", 4369 + "libc", 4370 + "libfuzzer-sys", 4371 + "log", 4372 + "maybe-rayon", 4373 + "new_debug_unreachable", 4374 + "noop_proc_macro", 4375 + "num-derive", 4376 + "num-traits", 4377 + "once_cell", 4378 + "paste", 4379 + "profiling", 4380 + "rand", 4381 + "rand_chacha", 4382 + "simd_helpers", 4383 + "system-deps", 4384 + "thiserror 1.0.69", 4385 + "v_frame", 4386 + "wasm-bindgen", 4387 + ] 4388 + 4389 + [[package]] 4390 + name = "ravif" 4391 + version = "0.11.12" 4392 + source = "registry+https://github.com/rust-lang/crates.io-index" 4393 + checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6" 4394 + dependencies = [ 4395 + "avif-serialize", 4396 + "imgref", 4397 + "loop9", 4398 + "quick-error", 4399 + "rav1e", 4400 + "rayon", 4401 + "rgb", 4402 + ] 4403 + 4404 + [[package]] 4405 + name = "raw-window-handle" 4406 + version = "0.6.2" 4407 + source = "registry+https://github.com/rust-lang/crates.io-index" 4408 + checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" 4409 + 4410 + [[package]] 4411 + name = "rayon" 4412 + version = "1.10.0" 4413 + source = "registry+https://github.com/rust-lang/crates.io-index" 4414 + checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 4415 + dependencies = [ 4416 + "either", 4417 + "rayon-core", 4418 + ] 4419 + 4420 + [[package]] 4421 + name = "rayon-core" 4422 + version = "1.12.1" 4423 + source = "registry+https://github.com/rust-lang/crates.io-index" 4424 + checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 4425 + dependencies = [ 4426 + "crossbeam-deque", 4427 + "crossbeam-utils", 4428 + ] 4429 + 4430 + [[package]] 4431 + name = "read-fonts" 4432 + version = "0.29.2" 4433 + source = "registry+https://github.com/rust-lang/crates.io-index" 4434 + checksum = "6f96bfbb7df43d34a2b7b8582fcbcb676ba02a763265cb90bc8aabfd62b57d64" 4435 + dependencies = [ 4436 + "bytemuck", 4437 + "font-types", 4438 + ] 4439 + 4440 + [[package]] 4441 + name = "rectangle-pack" 4442 + version = "0.4.2" 4443 + source = "registry+https://github.com/rust-lang/crates.io-index" 4444 + checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" 4445 + 4446 + [[package]] 4447 + name = "redox_syscall" 4448 + version = "0.4.1" 4449 + source = "registry+https://github.com/rust-lang/crates.io-index" 4450 + checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 4451 + dependencies = [ 4452 + "bitflags 1.3.2", 4453 + ] 4454 + 4455 + [[package]] 4456 + name = "redox_syscall" 4457 + version = "0.5.12" 4458 + source = "registry+https://github.com/rust-lang/crates.io-index" 4459 + checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" 4460 + dependencies = [ 4461 + "bitflags 2.9.1", 4462 + ] 4463 + 4464 + [[package]] 4465 + name = "regex" 4466 + version = "1.11.1" 4467 + source = "registry+https://github.com/rust-lang/crates.io-index" 4468 + checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 4469 + dependencies = [ 4470 + "aho-corasick", 4471 + "memchr", 4472 + "regex-automata 0.4.9", 4473 + "regex-syntax 0.8.5", 4474 + ] 4475 + 4476 + [[package]] 4477 + name = "regex-automata" 4478 + version = "0.1.10" 4479 + source = "registry+https://github.com/rust-lang/crates.io-index" 4480 + checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 4481 + dependencies = [ 4482 + "regex-syntax 0.6.29", 4483 + ] 4484 + 4485 + [[package]] 4486 + name = "regex-automata" 4487 + version = "0.4.9" 4488 + source = "registry+https://github.com/rust-lang/crates.io-index" 4489 + checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 4490 + dependencies = [ 4491 + "aho-corasick", 4492 + "memchr", 4493 + "regex-syntax 0.8.5", 4494 + ] 4495 + 4496 + [[package]] 4497 + name = "regex-syntax" 4498 + version = "0.6.29" 4499 + source = "registry+https://github.com/rust-lang/crates.io-index" 4500 + checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 4501 + 4502 + [[package]] 4503 + name = "regex-syntax" 4504 + version = "0.8.5" 4505 + source = "registry+https://github.com/rust-lang/crates.io-index" 4506 + checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 4507 + 4508 + [[package]] 4509 + name = "renderdoc-sys" 4510 + version = "1.1.0" 4511 + source = "registry+https://github.com/rust-lang/crates.io-index" 4512 + checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 4513 + 4514 + [[package]] 4515 + name = "rgb" 4516 + version = "0.8.50" 4517 + source = "registry+https://github.com/rust-lang/crates.io-index" 4518 + checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" 4519 + 4520 + [[package]] 4521 + name = "rodio" 4522 + version = "0.20.1" 4523 + source = "registry+https://github.com/rust-lang/crates.io-index" 4524 + checksum = "e7ceb6607dd738c99bc8cb28eff249b7cd5c8ec88b9db96c0608c1480d140fb1" 4525 + dependencies = [ 4526 + "cpal", 4527 + "lewton", 4528 + ] 4529 + 4530 + [[package]] 4531 + name = "ron" 4532 + version = "0.8.1" 4533 + source = "registry+https://github.com/rust-lang/crates.io-index" 4534 + checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" 4535 + dependencies = [ 4536 + "base64 0.21.7", 4537 + "bitflags 2.9.1", 4538 + "serde", 4539 + "serde_derive", 4540 + ] 4541 + 4542 + [[package]] 4543 + name = "roxmltree" 4544 + version = "0.20.0" 4545 + source = "registry+https://github.com/rust-lang/crates.io-index" 4546 + checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" 4547 + 4548 + [[package]] 4549 + name = "rustc-hash" 4550 + version = "1.1.0" 4551 + source = "registry+https://github.com/rust-lang/crates.io-index" 4552 + checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 4553 + 4554 + [[package]] 4555 + name = "rustix" 4556 + version = "0.38.44" 4557 + source = "registry+https://github.com/rust-lang/crates.io-index" 4558 + checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 4559 + dependencies = [ 4560 + "bitflags 2.9.1", 4561 + "errno", 4562 + "libc", 4563 + "linux-raw-sys 0.4.15", 4564 + "windows-sys 0.59.0", 4565 + ] 4566 + 4567 + [[package]] 4568 + name = "rustix" 4569 + version = "1.0.7" 4570 + source = "registry+https://github.com/rust-lang/crates.io-index" 4571 + checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" 4572 + dependencies = [ 4573 + "bitflags 2.9.1", 4574 + "errno", 4575 + "libc", 4576 + "linux-raw-sys 0.9.4", 4577 + "windows-sys 0.59.0", 4578 + ] 4579 + 4580 + [[package]] 4581 + name = "rustversion" 4582 + version = "1.0.21" 4583 + source = "registry+https://github.com/rust-lang/crates.io-index" 4584 + checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 4585 + 4586 + [[package]] 4587 + name = "rustybuzz" 4588 + version = "0.14.1" 4589 + source = "registry+https://github.com/rust-lang/crates.io-index" 4590 + checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" 4591 + dependencies = [ 4592 + "bitflags 2.9.1", 4593 + "bytemuck", 4594 + "libm", 4595 + "smallvec", 4596 + "ttf-parser 0.21.1", 4597 + "unicode-bidi-mirroring", 4598 + "unicode-ccc", 4599 + "unicode-properties", 4600 + "unicode-script", 4601 + ] 4602 + 4603 + [[package]] 4604 + name = "ruzstd" 4605 + version = "0.8.1" 4606 + source = "registry+https://github.com/rust-lang/crates.io-index" 4607 + checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c" 4608 + dependencies = [ 4609 + "twox-hash", 4610 + ] 4611 + 4612 + [[package]] 4613 + name = "ryu" 4614 + version = "1.0.20" 4615 + source = "registry+https://github.com/rust-lang/crates.io-index" 4616 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 4617 + 4618 + [[package]] 4619 + name = "same-file" 4620 + version = "1.0.6" 4621 + source = "registry+https://github.com/rust-lang/crates.io-index" 4622 + checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 4623 + dependencies = [ 4624 + "winapi-util", 4625 + ] 4626 + 4627 + [[package]] 4628 + name = "scoped-tls" 4629 + version = "1.0.1" 4630 + source = "registry+https://github.com/rust-lang/crates.io-index" 4631 + checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 4632 + 4633 + [[package]] 4634 + name = "scopeguard" 4635 + version = "1.2.0" 4636 + source = "registry+https://github.com/rust-lang/crates.io-index" 4637 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 4638 + 4639 + [[package]] 4640 + name = "sctk-adwaita" 4641 + version = "0.10.1" 4642 + source = "registry+https://github.com/rust-lang/crates.io-index" 4643 + checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" 4644 + dependencies = [ 4645 + "ab_glyph", 4646 + "log", 4647 + "memmap2", 4648 + "smithay-client-toolkit", 4649 + "tiny-skia", 4650 + ] 4651 + 4652 + [[package]] 4653 + name = "self_cell" 4654 + version = "1.2.0" 4655 + source = "registry+https://github.com/rust-lang/crates.io-index" 4656 + checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" 4657 + 4658 + [[package]] 4659 + name = "send_wrapper" 4660 + version = "0.6.0" 4661 + source = "registry+https://github.com/rust-lang/crates.io-index" 4662 + checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 4663 + 4664 + [[package]] 4665 + name = "serde" 4666 + version = "1.0.219" 4667 + source = "registry+https://github.com/rust-lang/crates.io-index" 4668 + checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 4669 + dependencies = [ 4670 + "serde_derive", 4671 + ] 4672 + 4673 + [[package]] 4674 + name = "serde_derive" 4675 + version = "1.0.219" 4676 + source = "registry+https://github.com/rust-lang/crates.io-index" 4677 + checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 4678 + dependencies = [ 4679 + "proc-macro2", 4680 + "quote", 4681 + "syn", 4682 + ] 4683 + 4684 + [[package]] 4685 + name = "serde_json" 4686 + version = "1.0.140" 4687 + source = "registry+https://github.com/rust-lang/crates.io-index" 4688 + checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 4689 + dependencies = [ 4690 + "itoa", 4691 + "memchr", 4692 + "ryu", 4693 + "serde", 4694 + ] 4695 + 4696 + [[package]] 4697 + name = "serde_spanned" 4698 + version = "0.6.8" 4699 + source = "registry+https://github.com/rust-lang/crates.io-index" 4700 + checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" 4701 + dependencies = [ 4702 + "serde", 4703 + ] 4704 + 4705 + [[package]] 4706 + name = "sharded-slab" 4707 + version = "0.1.7" 4708 + source = "registry+https://github.com/rust-lang/crates.io-index" 4709 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 4710 + dependencies = [ 4711 + "lazy_static", 4712 + ] 4713 + 4714 + [[package]] 4715 + name = "shlex" 4716 + version = "1.3.0" 4717 + source = "registry+https://github.com/rust-lang/crates.io-index" 4718 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 4719 + 4720 + [[package]] 4721 + name = "simd-adler32" 4722 + version = "0.3.7" 4723 + source = "registry+https://github.com/rust-lang/crates.io-index" 4724 + checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 4725 + 4726 + [[package]] 4727 + name = "simd_helpers" 4728 + version = "0.1.0" 4729 + source = "registry+https://github.com/rust-lang/crates.io-index" 4730 + checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" 4731 + dependencies = [ 4732 + "quote", 4733 + ] 4734 + 4735 + [[package]] 4736 + name = "skrifa" 4737 + version = "0.31.2" 4738 + source = "registry+https://github.com/rust-lang/crates.io-index" 4739 + checksum = "9903381b30b598fe22f137ce95664208fb149f3102981a40154088e2794449bc" 4740 + dependencies = [ 4741 + "bytemuck", 4742 + "read-fonts", 4743 + ] 4744 + 4745 + [[package]] 4746 + name = "slab" 4747 + version = "0.4.9" 4748 + source = "registry+https://github.com/rust-lang/crates.io-index" 4749 + checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 4750 + dependencies = [ 4751 + "autocfg", 4752 + ] 4753 + 4754 + [[package]] 4755 + name = "slotmap" 4756 + version = "1.0.7" 4757 + source = "registry+https://github.com/rust-lang/crates.io-index" 4758 + checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 4759 + dependencies = [ 4760 + "version_check", 4761 + ] 4762 + 4763 + [[package]] 4764 + name = "smallvec" 4765 + version = "1.15.0" 4766 + source = "registry+https://github.com/rust-lang/crates.io-index" 4767 + checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" 4768 + 4769 + [[package]] 4770 + name = "smithay-client-toolkit" 4771 + version = "0.19.2" 4772 + source = "registry+https://github.com/rust-lang/crates.io-index" 4773 + checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" 4774 + dependencies = [ 4775 + "bitflags 2.9.1", 4776 + "calloop", 4777 + "calloop-wayland-source", 4778 + "cursor-icon", 4779 + "libc", 4780 + "log", 4781 + "memmap2", 4782 + "rustix 0.38.44", 4783 + "thiserror 1.0.69", 4784 + "wayland-backend", 4785 + "wayland-client", 4786 + "wayland-csd-frame", 4787 + "wayland-cursor", 4788 + "wayland-protocols", 4789 + "wayland-protocols-wlr", 4790 + "wayland-scanner", 4791 + "xkeysym", 4792 + ] 4793 + 4794 + [[package]] 4795 + name = "smol_str" 4796 + version = "0.2.2" 4797 + source = "registry+https://github.com/rust-lang/crates.io-index" 4798 + checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" 4799 + dependencies = [ 4800 + "serde", 4801 + ] 4802 + 4803 + [[package]] 4804 + name = "spin" 4805 + version = "0.9.8" 4806 + source = "registry+https://github.com/rust-lang/crates.io-index" 4807 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 4808 + dependencies = [ 4809 + "portable-atomic", 4810 + ] 4811 + 4812 + [[package]] 4813 + name = "spirv" 4814 + version = "0.3.0+sdk-1.3.268.0" 4815 + source = "registry+https://github.com/rust-lang/crates.io-index" 4816 + checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" 4817 + dependencies = [ 4818 + "bitflags 2.9.1", 4819 + ] 4820 + 4821 + [[package]] 4822 + name = "stable_deref_trait" 4823 + version = "1.2.0" 4824 + source = "registry+https://github.com/rust-lang/crates.io-index" 4825 + checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 4826 + 4827 + [[package]] 4828 + name = "stackfuture" 4829 + version = "0.3.0" 4830 + source = "registry+https://github.com/rust-lang/crates.io-index" 4831 + checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2" 4832 + 4833 + [[package]] 4834 + name = "static_assertions" 4835 + version = "1.1.0" 4836 + source = "registry+https://github.com/rust-lang/crates.io-index" 4837 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 4838 + 4839 + [[package]] 4840 + name = "strict-num" 4841 + version = "0.1.1" 4842 + source = "registry+https://github.com/rust-lang/crates.io-index" 4843 + checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" 4844 + 4845 + [[package]] 4846 + name = "strum" 4847 + version = "0.26.3" 4848 + source = "registry+https://github.com/rust-lang/crates.io-index" 4849 + checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 4850 + dependencies = [ 4851 + "strum_macros", 4852 + ] 4853 + 4854 + [[package]] 4855 + name = "strum_macros" 4856 + version = "0.26.4" 4857 + source = "registry+https://github.com/rust-lang/crates.io-index" 4858 + checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 4859 + dependencies = [ 4860 + "heck", 4861 + "proc-macro2", 4862 + "quote", 4863 + "rustversion", 4864 + "syn", 4865 + ] 4866 + 4867 + [[package]] 4868 + name = "svg_fmt" 4869 + version = "0.4.5" 4870 + source = "registry+https://github.com/rust-lang/crates.io-index" 4871 + checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" 4872 + 4873 + [[package]] 4874 + name = "swash" 4875 + version = "0.2.5" 4876 + source = "registry+https://github.com/rust-lang/crates.io-index" 4877 + checksum = "f745de914febc7c9ab4388dfaf94bbc87e69f57bb41133a9b0c84d4be49856f3" 4878 + dependencies = [ 4879 + "skrifa", 4880 + "yazi", 4881 + "zeno", 4882 + ] 4883 + 4884 + [[package]] 4885 + name = "syn" 4886 + version = "2.0.101" 4887 + source = "registry+https://github.com/rust-lang/crates.io-index" 4888 + checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 4889 + dependencies = [ 4890 + "proc-macro2", 4891 + "quote", 4892 + "unicode-ident", 4893 + ] 4894 + 4895 + [[package]] 4896 + name = "synstructure" 4897 + version = "0.13.2" 4898 + source = "registry+https://github.com/rust-lang/crates.io-index" 4899 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 4900 + dependencies = [ 4901 + "proc-macro2", 4902 + "quote", 4903 + "syn", 4904 + ] 4905 + 4906 + [[package]] 4907 + name = "sys-locale" 4908 + version = "0.3.2" 4909 + source = "registry+https://github.com/rust-lang/crates.io-index" 4910 + checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" 4911 + dependencies = [ 4912 + "libc", 4913 + ] 4914 + 4915 + [[package]] 4916 + name = "sysinfo" 4917 + version = "0.34.2" 4918 + source = "registry+https://github.com/rust-lang/crates.io-index" 4919 + checksum = "a4b93974b3d3aeaa036504b8eefd4c039dced109171c1ae973f1dc63b2c7e4b2" 4920 + dependencies = [ 4921 + "libc", 4922 + "memchr", 4923 + "ntapi", 4924 + "objc2-core-foundation", 4925 + "windows 0.57.0", 4926 + ] 4927 + 4928 + [[package]] 4929 + name = "system-deps" 4930 + version = "6.2.2" 4931 + source = "registry+https://github.com/rust-lang/crates.io-index" 4932 + checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" 4933 + dependencies = [ 4934 + "cfg-expr", 4935 + "heck", 4936 + "pkg-config", 4937 + "toml", 4938 + "version-compare", 4939 + ] 4940 + 4941 + [[package]] 4942 + name = "taffy" 4943 + version = "0.7.7" 4944 + source = "registry+https://github.com/rust-lang/crates.io-index" 4945 + checksum = "ab4f4d046dd956a47a7e1a2947083d7ac3e6aa3cfaaead36173ceaa5ab11878c" 4946 + dependencies = [ 4947 + "arrayvec", 4948 + "grid", 4949 + "serde", 4950 + "slotmap", 4951 + ] 4952 + 4953 + [[package]] 4954 + name = "target-lexicon" 4955 + version = "0.12.16" 4956 + source = "registry+https://github.com/rust-lang/crates.io-index" 4957 + checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" 4958 + 4959 + [[package]] 4960 + name = "termcolor" 4961 + version = "1.4.1" 4962 + source = "registry+https://github.com/rust-lang/crates.io-index" 4963 + checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 4964 + dependencies = [ 4965 + "winapi-util", 4966 + ] 4967 + 4968 + [[package]] 4969 + name = "thiserror" 4970 + version = "1.0.69" 4971 + source = "registry+https://github.com/rust-lang/crates.io-index" 4972 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 4973 + dependencies = [ 4974 + "thiserror-impl 1.0.69", 4975 + ] 4976 + 4977 + [[package]] 4978 + name = "thiserror" 4979 + version = "2.0.12" 4980 + source = "registry+https://github.com/rust-lang/crates.io-index" 4981 + checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 4982 + dependencies = [ 4983 + "thiserror-impl 2.0.12", 4984 + ] 4985 + 4986 + [[package]] 4987 + name = "thiserror-impl" 4988 + version = "1.0.69" 4989 + source = "registry+https://github.com/rust-lang/crates.io-index" 4990 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 4991 + dependencies = [ 4992 + "proc-macro2", 4993 + "quote", 4994 + "syn", 4995 + ] 4996 + 4997 + [[package]] 4998 + name = "thiserror-impl" 4999 + version = "2.0.12" 5000 + source = "registry+https://github.com/rust-lang/crates.io-index" 5001 + checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 5002 + dependencies = [ 5003 + "proc-macro2", 5004 + "quote", 5005 + "syn", 5006 + ] 5007 + 5008 + [[package]] 5009 + name = "thread_local" 5010 + version = "1.1.8" 5011 + source = "registry+https://github.com/rust-lang/crates.io-index" 5012 + checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 5013 + dependencies = [ 5014 + "cfg-if", 5015 + "once_cell", 5016 + ] 5017 + 5018 + [[package]] 5019 + name = "tiff" 5020 + version = "0.9.1" 5021 + source = "registry+https://github.com/rust-lang/crates.io-index" 5022 + checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 5023 + dependencies = [ 5024 + "flate2", 5025 + "jpeg-decoder", 5026 + "weezl", 5027 + ] 5028 + 5029 + [[package]] 5030 + name = "tiny-skia" 5031 + version = "0.11.4" 5032 + source = "registry+https://github.com/rust-lang/crates.io-index" 5033 + checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" 5034 + dependencies = [ 5035 + "arrayref", 5036 + "arrayvec", 5037 + "bytemuck", 5038 + "cfg-if", 5039 + "log", 5040 + "tiny-skia-path", 5041 + ] 5042 + 5043 + [[package]] 5044 + name = "tiny-skia-path" 5045 + version = "0.11.4" 5046 + source = "registry+https://github.com/rust-lang/crates.io-index" 5047 + checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" 5048 + dependencies = [ 5049 + "arrayref", 5050 + "bytemuck", 5051 + "strict-num", 5052 + ] 5053 + 5054 + [[package]] 5055 + name = "tinystr" 5056 + version = "0.8.1" 5057 + source = "registry+https://github.com/rust-lang/crates.io-index" 5058 + checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 5059 + dependencies = [ 5060 + "displaydoc", 5061 + "zerovec", 5062 + ] 5063 + 5064 + [[package]] 5065 + name = "tinyvec" 5066 + version = "1.9.0" 5067 + source = "registry+https://github.com/rust-lang/crates.io-index" 5068 + checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 5069 + dependencies = [ 5070 + "tinyvec_macros", 5071 + ] 5072 + 5073 + [[package]] 5074 + name = "tinyvec_macros" 5075 + version = "0.1.1" 5076 + source = "registry+https://github.com/rust-lang/crates.io-index" 5077 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 5078 + 5079 + [[package]] 5080 + name = "toml" 5081 + version = "0.8.22" 5082 + source = "registry+https://github.com/rust-lang/crates.io-index" 5083 + checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" 5084 + dependencies = [ 5085 + "serde", 5086 + "serde_spanned", 5087 + "toml_datetime", 5088 + "toml_edit", 5089 + ] 5090 + 5091 + [[package]] 5092 + name = "toml_datetime" 5093 + version = "0.6.9" 5094 + source = "registry+https://github.com/rust-lang/crates.io-index" 5095 + checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" 5096 + dependencies = [ 5097 + "serde", 5098 + ] 5099 + 5100 + [[package]] 5101 + name = "toml_edit" 5102 + version = "0.22.26" 5103 + source = "registry+https://github.com/rust-lang/crates.io-index" 5104 + checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" 5105 + dependencies = [ 5106 + "indexmap", 5107 + "serde", 5108 + "serde_spanned", 5109 + "toml_datetime", 5110 + "winnow", 5111 + ] 5112 + 5113 + [[package]] 5114 + name = "tracing" 5115 + version = "0.1.41" 5116 + source = "registry+https://github.com/rust-lang/crates.io-index" 5117 + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 5118 + dependencies = [ 5119 + "pin-project-lite", 5120 + "tracing-attributes", 5121 + "tracing-core", 5122 + ] 5123 + 5124 + [[package]] 5125 + name = "tracing-attributes" 5126 + version = "0.1.28" 5127 + source = "registry+https://github.com/rust-lang/crates.io-index" 5128 + checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" 5129 + dependencies = [ 5130 + "proc-macro2", 5131 + "quote", 5132 + "syn", 5133 + ] 5134 + 5135 + [[package]] 5136 + name = "tracing-core" 5137 + version = "0.1.33" 5138 + source = "registry+https://github.com/rust-lang/crates.io-index" 5139 + checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 5140 + dependencies = [ 5141 + "once_cell", 5142 + "valuable", 5143 + ] 5144 + 5145 + [[package]] 5146 + name = "tracing-log" 5147 + version = "0.2.0" 5148 + source = "registry+https://github.com/rust-lang/crates.io-index" 5149 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 5150 + dependencies = [ 5151 + "log", 5152 + "once_cell", 5153 + "tracing-core", 5154 + ] 5155 + 5156 + [[package]] 5157 + name = "tracing-oslog" 5158 + version = "0.2.0" 5159 + source = "registry+https://github.com/rust-lang/crates.io-index" 5160 + checksum = "528bdd1f0e27b5dd9a4ededf154e824b0532731e4af73bb531de46276e0aab1e" 5161 + dependencies = [ 5162 + "bindgen", 5163 + "cc", 5164 + "cfg-if", 5165 + "once_cell", 5166 + "parking_lot", 5167 + "tracing-core", 5168 + "tracing-subscriber", 5169 + ] 5170 + 5171 + [[package]] 5172 + name = "tracing-subscriber" 5173 + version = "0.3.19" 5174 + source = "registry+https://github.com/rust-lang/crates.io-index" 5175 + checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 5176 + dependencies = [ 5177 + "matchers", 5178 + "nu-ansi-term", 5179 + "once_cell", 5180 + "regex", 5181 + "sharded-slab", 5182 + "smallvec", 5183 + "thread_local", 5184 + "tracing", 5185 + "tracing-core", 5186 + "tracing-log", 5187 + ] 5188 + 5189 + [[package]] 5190 + name = "tracing-wasm" 5191 + version = "0.2.1" 5192 + source = "registry+https://github.com/rust-lang/crates.io-index" 5193 + checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" 5194 + dependencies = [ 5195 + "tracing", 5196 + "tracing-subscriber", 5197 + "wasm-bindgen", 5198 + ] 5199 + 5200 + [[package]] 5201 + name = "ttf-parser" 5202 + version = "0.20.0" 5203 + source = "registry+https://github.com/rust-lang/crates.io-index" 5204 + checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" 5205 + 5206 + [[package]] 5207 + name = "ttf-parser" 5208 + version = "0.21.1" 5209 + source = "registry+https://github.com/rust-lang/crates.io-index" 5210 + checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" 5211 + 5212 + [[package]] 5213 + name = "ttf-parser" 5214 + version = "0.25.1" 5215 + source = "registry+https://github.com/rust-lang/crates.io-index" 5216 + checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" 5217 + 5218 + [[package]] 5219 + name = "twox-hash" 5220 + version = "2.1.0" 5221 + source = "registry+https://github.com/rust-lang/crates.io-index" 5222 + checksum = "e7b17f197b3050ba473acf9181f7b1d3b66d1cf7356c6cc57886662276e65908" 5223 + 5224 + [[package]] 5225 + name = "typeid" 5226 + version = "1.0.3" 5227 + source = "registry+https://github.com/rust-lang/crates.io-index" 5228 + checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" 5229 + 5230 + [[package]] 5231 + name = "unicode-bidi" 5232 + version = "0.3.18" 5233 + source = "registry+https://github.com/rust-lang/crates.io-index" 5234 + checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" 5235 + 5236 + [[package]] 5237 + name = "unicode-bidi-mirroring" 5238 + version = "0.2.0" 5239 + source = "registry+https://github.com/rust-lang/crates.io-index" 5240 + checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" 5241 + 5242 + [[package]] 5243 + name = "unicode-ccc" 5244 + version = "0.2.0" 5245 + source = "registry+https://github.com/rust-lang/crates.io-index" 5246 + checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" 5247 + 5248 + [[package]] 5249 + name = "unicode-ident" 5250 + version = "1.0.18" 5251 + source = "registry+https://github.com/rust-lang/crates.io-index" 5252 + checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 5253 + 5254 + [[package]] 5255 + name = "unicode-linebreak" 5256 + version = "0.1.5" 5257 + source = "registry+https://github.com/rust-lang/crates.io-index" 5258 + checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 5259 + 5260 + [[package]] 5261 + name = "unicode-properties" 5262 + version = "0.1.3" 5263 + source = "registry+https://github.com/rust-lang/crates.io-index" 5264 + checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 5265 + 5266 + [[package]] 5267 + name = "unicode-script" 5268 + version = "0.5.7" 5269 + source = "registry+https://github.com/rust-lang/crates.io-index" 5270 + checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" 5271 + 5272 + [[package]] 5273 + name = "unicode-segmentation" 5274 + version = "1.12.0" 5275 + source = "registry+https://github.com/rust-lang/crates.io-index" 5276 + checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 5277 + 5278 + [[package]] 5279 + name = "unicode-width" 5280 + version = "0.1.14" 5281 + source = "registry+https://github.com/rust-lang/crates.io-index" 5282 + checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 5283 + 5284 + [[package]] 5285 + name = "unicode-xid" 5286 + version = "0.2.6" 5287 + source = "registry+https://github.com/rust-lang/crates.io-index" 5288 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 5289 + 5290 + [[package]] 5291 + name = "url" 5292 + version = "2.5.4" 5293 + source = "registry+https://github.com/rust-lang/crates.io-index" 5294 + checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 5295 + dependencies = [ 5296 + "form_urlencoded", 5297 + "idna", 5298 + "percent-encoding", 5299 + ] 5300 + 5301 + [[package]] 5302 + name = "utf8_iter" 5303 + version = "1.0.4" 5304 + source = "registry+https://github.com/rust-lang/crates.io-index" 5305 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 5306 + 5307 + [[package]] 5308 + name = "uuid" 5309 + version = "1.17.0" 5310 + source = "registry+https://github.com/rust-lang/crates.io-index" 5311 + checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" 5312 + dependencies = [ 5313 + "getrandom 0.3.3", 5314 + "js-sys", 5315 + "serde", 5316 + "wasm-bindgen", 5317 + ] 5318 + 5319 + [[package]] 5320 + name = "v_frame" 5321 + version = "0.3.8" 5322 + source = "registry+https://github.com/rust-lang/crates.io-index" 5323 + checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" 5324 + dependencies = [ 5325 + "aligned-vec", 5326 + "num-traits", 5327 + "wasm-bindgen", 5328 + ] 5329 + 5330 + [[package]] 5331 + name = "valuable" 5332 + version = "0.1.1" 5333 + source = "registry+https://github.com/rust-lang/crates.io-index" 5334 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 5335 + 5336 + [[package]] 5337 + name = "variadics_please" 5338 + version = "1.1.0" 5339 + source = "registry+https://github.com/rust-lang/crates.io-index" 5340 + checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" 5341 + dependencies = [ 5342 + "proc-macro2", 5343 + "quote", 5344 + "syn", 5345 + ] 5346 + 5347 + [[package]] 5348 + name = "vec_map" 5349 + version = "0.8.2" 5350 + source = "registry+https://github.com/rust-lang/crates.io-index" 5351 + checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 5352 + 5353 + [[package]] 5354 + name = "version-compare" 5355 + version = "0.2.0" 5356 + source = "registry+https://github.com/rust-lang/crates.io-index" 5357 + checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" 5358 + 5359 + [[package]] 5360 + name = "version_check" 5361 + version = "0.9.5" 5362 + source = "registry+https://github.com/rust-lang/crates.io-index" 5363 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 5364 + 5365 + [[package]] 5366 + name = "walkdir" 5367 + version = "2.5.0" 5368 + source = "registry+https://github.com/rust-lang/crates.io-index" 5369 + checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 5370 + dependencies = [ 5371 + "same-file", 5372 + "winapi-util", 5373 + ] 5374 + 5375 + [[package]] 5376 + name = "wasi" 5377 + version = "0.11.0+wasi-snapshot-preview1" 5378 + source = "registry+https://github.com/rust-lang/crates.io-index" 5379 + checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 5380 + 5381 + [[package]] 5382 + name = "wasi" 5383 + version = "0.14.2+wasi-0.2.4" 5384 + source = "registry+https://github.com/rust-lang/crates.io-index" 5385 + checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 5386 + dependencies = [ 5387 + "wit-bindgen-rt", 5388 + ] 5389 + 5390 + [[package]] 5391 + name = "wasm-bindgen" 5392 + version = "0.2.100" 5393 + source = "registry+https://github.com/rust-lang/crates.io-index" 5394 + checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 5395 + dependencies = [ 5396 + "cfg-if", 5397 + "once_cell", 5398 + "rustversion", 5399 + "wasm-bindgen-macro", 5400 + ] 5401 + 5402 + [[package]] 5403 + name = "wasm-bindgen-backend" 5404 + version = "0.2.100" 5405 + source = "registry+https://github.com/rust-lang/crates.io-index" 5406 + checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 5407 + dependencies = [ 5408 + "bumpalo", 5409 + "log", 5410 + "proc-macro2", 5411 + "quote", 5412 + "syn", 5413 + "wasm-bindgen-shared", 5414 + ] 5415 + 5416 + [[package]] 5417 + name = "wasm-bindgen-futures" 5418 + version = "0.4.50" 5419 + source = "registry+https://github.com/rust-lang/crates.io-index" 5420 + checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 5421 + dependencies = [ 5422 + "cfg-if", 5423 + "js-sys", 5424 + "once_cell", 5425 + "wasm-bindgen", 5426 + "web-sys", 5427 + ] 5428 + 5429 + [[package]] 5430 + name = "wasm-bindgen-macro" 5431 + version = "0.2.100" 5432 + source = "registry+https://github.com/rust-lang/crates.io-index" 5433 + checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 5434 + dependencies = [ 5435 + "quote", 5436 + "wasm-bindgen-macro-support", 5437 + ] 5438 + 5439 + [[package]] 5440 + name = "wasm-bindgen-macro-support" 5441 + version = "0.2.100" 5442 + source = "registry+https://github.com/rust-lang/crates.io-index" 5443 + checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 5444 + dependencies = [ 5445 + "proc-macro2", 5446 + "quote", 5447 + "syn", 5448 + "wasm-bindgen-backend", 5449 + "wasm-bindgen-shared", 5450 + ] 5451 + 5452 + [[package]] 5453 + name = "wasm-bindgen-shared" 5454 + version = "0.2.100" 5455 + source = "registry+https://github.com/rust-lang/crates.io-index" 5456 + checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 5457 + dependencies = [ 5458 + "unicode-ident", 5459 + ] 5460 + 5461 + [[package]] 5462 + name = "wayland-backend" 5463 + version = "0.3.10" 5464 + source = "registry+https://github.com/rust-lang/crates.io-index" 5465 + checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" 5466 + dependencies = [ 5467 + "cc", 5468 + "downcast-rs 1.2.1", 5469 + "rustix 0.38.44", 5470 + "scoped-tls", 5471 + "smallvec", 5472 + "wayland-sys", 5473 + ] 5474 + 5475 + [[package]] 5476 + name = "wayland-client" 5477 + version = "0.31.10" 5478 + source = "registry+https://github.com/rust-lang/crates.io-index" 5479 + checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" 5480 + dependencies = [ 5481 + "bitflags 2.9.1", 5482 + "rustix 0.38.44", 5483 + "wayland-backend", 5484 + "wayland-scanner", 5485 + ] 5486 + 5487 + [[package]] 5488 + name = "wayland-csd-frame" 5489 + version = "0.3.0" 5490 + source = "registry+https://github.com/rust-lang/crates.io-index" 5491 + checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" 5492 + dependencies = [ 5493 + "bitflags 2.9.1", 5494 + "cursor-icon", 5495 + "wayland-backend", 5496 + ] 5497 + 5498 + [[package]] 5499 + name = "wayland-cursor" 5500 + version = "0.31.10" 5501 + source = "registry+https://github.com/rust-lang/crates.io-index" 5502 + checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182" 5503 + dependencies = [ 5504 + "rustix 0.38.44", 5505 + "wayland-client", 5506 + "xcursor", 5507 + ] 5508 + 5509 + [[package]] 5510 + name = "wayland-protocols" 5511 + version = "0.32.8" 5512 + source = "registry+https://github.com/rust-lang/crates.io-index" 5513 + checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" 5514 + dependencies = [ 5515 + "bitflags 2.9.1", 5516 + "wayland-backend", 5517 + "wayland-client", 5518 + "wayland-scanner", 5519 + ] 5520 + 5521 + [[package]] 5522 + name = "wayland-protocols-plasma" 5523 + version = "0.3.8" 5524 + source = "registry+https://github.com/rust-lang/crates.io-index" 5525 + checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175" 5526 + dependencies = [ 5527 + "bitflags 2.9.1", 5528 + "wayland-backend", 5529 + "wayland-client", 5530 + "wayland-protocols", 5531 + "wayland-scanner", 5532 + ] 5533 + 5534 + [[package]] 5535 + name = "wayland-protocols-wlr" 5536 + version = "0.3.8" 5537 + source = "registry+https://github.com/rust-lang/crates.io-index" 5538 + checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" 5539 + dependencies = [ 5540 + "bitflags 2.9.1", 5541 + "wayland-backend", 5542 + "wayland-client", 5543 + "wayland-protocols", 5544 + "wayland-scanner", 5545 + ] 5546 + 5547 + [[package]] 5548 + name = "wayland-scanner" 5549 + version = "0.31.6" 5550 + source = "registry+https://github.com/rust-lang/crates.io-index" 5551 + checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" 5552 + dependencies = [ 5553 + "proc-macro2", 5554 + "quick-xml", 5555 + "quote", 5556 + ] 5557 + 5558 + [[package]] 5559 + name = "wayland-sys" 5560 + version = "0.31.6" 5561 + source = "registry+https://github.com/rust-lang/crates.io-index" 5562 + checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" 5563 + dependencies = [ 5564 + "dlib", 5565 + "log", 5566 + "once_cell", 5567 + "pkg-config", 5568 + ] 5569 + 5570 + [[package]] 5571 + name = "web-sys" 5572 + version = "0.3.77" 5573 + source = "registry+https://github.com/rust-lang/crates.io-index" 5574 + checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 5575 + dependencies = [ 5576 + "js-sys", 5577 + "wasm-bindgen", 5578 + ] 5579 + 5580 + [[package]] 5581 + name = "web-time" 5582 + version = "1.1.0" 5583 + source = "registry+https://github.com/rust-lang/crates.io-index" 5584 + checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 5585 + dependencies = [ 5586 + "js-sys", 5587 + "wasm-bindgen", 5588 + ] 5589 + 5590 + [[package]] 5591 + name = "webbrowser" 5592 + version = "1.0.4" 5593 + source = "registry+https://github.com/rust-lang/crates.io-index" 5594 + checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e" 5595 + dependencies = [ 5596 + "core-foundation 0.10.1", 5597 + "home", 5598 + "jni", 5599 + "log", 5600 + "ndk-context", 5601 + "objc2 0.6.1", 5602 + "objc2-foundation 0.3.1", 5603 + "url", 5604 + "web-sys", 5605 + ] 5606 + 5607 + [[package]] 5608 + name = "weezl" 5609 + version = "0.1.10" 5610 + source = "registry+https://github.com/rust-lang/crates.io-index" 5611 + checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" 5612 + 5613 + [[package]] 5614 + name = "wgpu" 5615 + version = "24.0.5" 5616 + source = "registry+https://github.com/rust-lang/crates.io-index" 5617 + checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" 5618 + dependencies = [ 5619 + "arrayvec", 5620 + "bitflags 2.9.1", 5621 + "cfg_aliases", 5622 + "document-features", 5623 + "js-sys", 5624 + "log", 5625 + "naga", 5626 + "parking_lot", 5627 + "profiling", 5628 + "raw-window-handle", 5629 + "smallvec", 5630 + "static_assertions", 5631 + "wasm-bindgen", 5632 + "wasm-bindgen-futures", 5633 + "web-sys", 5634 + "wgpu-core", 5635 + "wgpu-hal", 5636 + "wgpu-types", 5637 + ] 5638 + 5639 + [[package]] 5640 + name = "wgpu-core" 5641 + version = "24.0.5" 5642 + source = "registry+https://github.com/rust-lang/crates.io-index" 5643 + checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" 5644 + dependencies = [ 5645 + "arrayvec", 5646 + "bit-vec 0.8.0", 5647 + "bitflags 2.9.1", 5648 + "cfg_aliases", 5649 + "document-features", 5650 + "indexmap", 5651 + "log", 5652 + "naga", 5653 + "once_cell", 5654 + "parking_lot", 5655 + "profiling", 5656 + "raw-window-handle", 5657 + "rustc-hash", 5658 + "smallvec", 5659 + "thiserror 2.0.12", 5660 + "wgpu-hal", 5661 + "wgpu-types", 5662 + ] 5663 + 5664 + [[package]] 5665 + name = "wgpu-hal" 5666 + version = "24.0.4" 5667 + source = "registry+https://github.com/rust-lang/crates.io-index" 5668 + checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" 5669 + dependencies = [ 5670 + "android_system_properties", 5671 + "arrayvec", 5672 + "ash", 5673 + "bit-set 0.8.0", 5674 + "bitflags 2.9.1", 5675 + "block", 5676 + "bytemuck", 5677 + "cfg_aliases", 5678 + "core-graphics-types", 5679 + "glow", 5680 + "glutin_wgl_sys", 5681 + "gpu-alloc", 5682 + "gpu-allocator", 5683 + "gpu-descriptor", 5684 + "js-sys", 5685 + "khronos-egl", 5686 + "libc", 5687 + "libloading", 5688 + "log", 5689 + "metal", 5690 + "naga", 5691 + "ndk-sys 0.5.0+25.2.9519653", 5692 + "objc", 5693 + "once_cell", 5694 + "ordered-float", 5695 + "parking_lot", 5696 + "profiling", 5697 + "range-alloc", 5698 + "raw-window-handle", 5699 + "renderdoc-sys", 5700 + "rustc-hash", 5701 + "smallvec", 5702 + "thiserror 2.0.12", 5703 + "wasm-bindgen", 5704 + "web-sys", 5705 + "wgpu-types", 5706 + "windows 0.58.0", 5707 + "windows-core 0.58.0", 5708 + ] 5709 + 5710 + [[package]] 5711 + name = "wgpu-types" 5712 + version = "24.0.0" 5713 + source = "registry+https://github.com/rust-lang/crates.io-index" 5714 + checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" 5715 + dependencies = [ 5716 + "bitflags 2.9.1", 5717 + "js-sys", 5718 + "log", 5719 + "serde", 5720 + "web-sys", 5721 + ] 5722 + 5723 + [[package]] 5724 + name = "winapi" 5725 + version = "0.3.9" 5726 + source = "registry+https://github.com/rust-lang/crates.io-index" 5727 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 5728 + dependencies = [ 5729 + "winapi-i686-pc-windows-gnu", 5730 + "winapi-x86_64-pc-windows-gnu", 5731 + ] 5732 + 5733 + [[package]] 5734 + name = "winapi-i686-pc-windows-gnu" 5735 + version = "0.4.0" 5736 + source = "registry+https://github.com/rust-lang/crates.io-index" 5737 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 5738 + 5739 + [[package]] 5740 + name = "winapi-util" 5741 + version = "0.1.9" 5742 + source = "registry+https://github.com/rust-lang/crates.io-index" 5743 + checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 5744 + dependencies = [ 5745 + "windows-sys 0.59.0", 5746 + ] 5747 + 5748 + [[package]] 5749 + name = "winapi-x86_64-pc-windows-gnu" 5750 + version = "0.4.0" 5751 + source = "registry+https://github.com/rust-lang/crates.io-index" 5752 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 5753 + 5754 + [[package]] 5755 + name = "windows" 5756 + version = "0.54.0" 5757 + source = "registry+https://github.com/rust-lang/crates.io-index" 5758 + checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" 5759 + dependencies = [ 5760 + "windows-core 0.54.0", 5761 + "windows-targets 0.52.6", 5762 + ] 5763 + 5764 + [[package]] 5765 + name = "windows" 5766 + version = "0.57.0" 5767 + source = "registry+https://github.com/rust-lang/crates.io-index" 5768 + checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" 5769 + dependencies = [ 5770 + "windows-core 0.57.0", 5771 + "windows-targets 0.52.6", 5772 + ] 5773 + 5774 + [[package]] 5775 + name = "windows" 5776 + version = "0.58.0" 5777 + source = "registry+https://github.com/rust-lang/crates.io-index" 5778 + checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 5779 + dependencies = [ 5780 + "windows-core 0.58.0", 5781 + "windows-targets 0.52.6", 5782 + ] 5783 + 5784 + [[package]] 5785 + name = "windows" 5786 + version = "0.61.1" 5787 + source = "registry+https://github.com/rust-lang/crates.io-index" 5788 + checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419" 5789 + dependencies = [ 5790 + "windows-collections", 5791 + "windows-core 0.61.2", 5792 + "windows-future", 5793 + "windows-link", 5794 + "windows-numerics", 5795 + ] 5796 + 5797 + [[package]] 5798 + name = "windows-collections" 5799 + version = "0.2.0" 5800 + source = "registry+https://github.com/rust-lang/crates.io-index" 5801 + checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 5802 + dependencies = [ 5803 + "windows-core 0.61.2", 5804 + ] 5805 + 5806 + [[package]] 5807 + name = "windows-core" 5808 + version = "0.54.0" 5809 + source = "registry+https://github.com/rust-lang/crates.io-index" 5810 + checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" 5811 + dependencies = [ 5812 + "windows-result 0.1.2", 5813 + "windows-targets 0.52.6", 5814 + ] 5815 + 5816 + [[package]] 5817 + name = "windows-core" 5818 + version = "0.57.0" 5819 + source = "registry+https://github.com/rust-lang/crates.io-index" 5820 + checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" 5821 + dependencies = [ 5822 + "windows-implement 0.57.0", 5823 + "windows-interface 0.57.0", 5824 + "windows-result 0.1.2", 5825 + "windows-targets 0.52.6", 5826 + ] 5827 + 5828 + [[package]] 5829 + name = "windows-core" 5830 + version = "0.58.0" 5831 + source = "registry+https://github.com/rust-lang/crates.io-index" 5832 + checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 5833 + dependencies = [ 5834 + "windows-implement 0.58.0", 5835 + "windows-interface 0.58.0", 5836 + "windows-result 0.2.0", 5837 + "windows-strings 0.1.0", 5838 + "windows-targets 0.52.6", 5839 + ] 5840 + 5841 + [[package]] 5842 + name = "windows-core" 5843 + version = "0.61.2" 5844 + source = "registry+https://github.com/rust-lang/crates.io-index" 5845 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 5846 + dependencies = [ 5847 + "windows-implement 0.60.0", 5848 + "windows-interface 0.59.1", 5849 + "windows-link", 5850 + "windows-result 0.3.4", 5851 + "windows-strings 0.4.2", 5852 + ] 5853 + 5854 + [[package]] 5855 + name = "windows-future" 5856 + version = "0.2.1" 5857 + source = "registry+https://github.com/rust-lang/crates.io-index" 5858 + checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 5859 + dependencies = [ 5860 + "windows-core 0.61.2", 5861 + "windows-link", 5862 + "windows-threading", 5863 + ] 5864 + 5865 + [[package]] 5866 + name = "windows-implement" 5867 + version = "0.57.0" 5868 + source = "registry+https://github.com/rust-lang/crates.io-index" 5869 + checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" 5870 + dependencies = [ 5871 + "proc-macro2", 5872 + "quote", 5873 + "syn", 5874 + ] 5875 + 5876 + [[package]] 5877 + name = "windows-implement" 5878 + version = "0.58.0" 5879 + source = "registry+https://github.com/rust-lang/crates.io-index" 5880 + checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 5881 + dependencies = [ 5882 + "proc-macro2", 5883 + "quote", 5884 + "syn", 5885 + ] 5886 + 5887 + [[package]] 5888 + name = "windows-implement" 5889 + version = "0.60.0" 5890 + source = "registry+https://github.com/rust-lang/crates.io-index" 5891 + checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 5892 + dependencies = [ 5893 + "proc-macro2", 5894 + "quote", 5895 + "syn", 5896 + ] 5897 + 5898 + [[package]] 5899 + name = "windows-interface" 5900 + version = "0.57.0" 5901 + source = "registry+https://github.com/rust-lang/crates.io-index" 5902 + checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" 5903 + dependencies = [ 5904 + "proc-macro2", 5905 + "quote", 5906 + "syn", 5907 + ] 5908 + 5909 + [[package]] 5910 + name = "windows-interface" 5911 + version = "0.58.0" 5912 + source = "registry+https://github.com/rust-lang/crates.io-index" 5913 + checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 5914 + dependencies = [ 5915 + "proc-macro2", 5916 + "quote", 5917 + "syn", 5918 + ] 5919 + 5920 + [[package]] 5921 + name = "windows-interface" 5922 + version = "0.59.1" 5923 + source = "registry+https://github.com/rust-lang/crates.io-index" 5924 + checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 5925 + dependencies = [ 5926 + "proc-macro2", 5927 + "quote", 5928 + "syn", 5929 + ] 5930 + 5931 + [[package]] 5932 + name = "windows-link" 5933 + version = "0.1.1" 5934 + source = "registry+https://github.com/rust-lang/crates.io-index" 5935 + checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" 5936 + 5937 + [[package]] 5938 + name = "windows-numerics" 5939 + version = "0.2.0" 5940 + source = "registry+https://github.com/rust-lang/crates.io-index" 5941 + checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 5942 + dependencies = [ 5943 + "windows-core 0.61.2", 5944 + "windows-link", 5945 + ] 5946 + 5947 + [[package]] 5948 + name = "windows-result" 5949 + version = "0.1.2" 5950 + source = "registry+https://github.com/rust-lang/crates.io-index" 5951 + checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" 5952 + dependencies = [ 5953 + "windows-targets 0.52.6", 5954 + ] 5955 + 5956 + [[package]] 5957 + name = "windows-result" 5958 + version = "0.2.0" 5959 + source = "registry+https://github.com/rust-lang/crates.io-index" 5960 + checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 5961 + dependencies = [ 5962 + "windows-targets 0.52.6", 5963 + ] 5964 + 5965 + [[package]] 5966 + name = "windows-result" 5967 + version = "0.3.4" 5968 + source = "registry+https://github.com/rust-lang/crates.io-index" 5969 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 5970 + dependencies = [ 5971 + "windows-link", 5972 + ] 5973 + 5974 + [[package]] 5975 + name = "windows-strings" 5976 + version = "0.1.0" 5977 + source = "registry+https://github.com/rust-lang/crates.io-index" 5978 + checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 5979 + dependencies = [ 5980 + "windows-result 0.2.0", 5981 + "windows-targets 0.52.6", 5982 + ] 5983 + 5984 + [[package]] 5985 + name = "windows-strings" 5986 + version = "0.4.2" 5987 + source = "registry+https://github.com/rust-lang/crates.io-index" 5988 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 5989 + dependencies = [ 5990 + "windows-link", 5991 + ] 5992 + 5993 + [[package]] 5994 + name = "windows-sys" 5995 + version = "0.45.0" 5996 + source = "registry+https://github.com/rust-lang/crates.io-index" 5997 + checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 5998 + dependencies = [ 5999 + "windows-targets 0.42.2", 6000 + ] 6001 + 6002 + [[package]] 6003 + name = "windows-sys" 6004 + version = "0.52.0" 6005 + source = "registry+https://github.com/rust-lang/crates.io-index" 6006 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 6007 + dependencies = [ 6008 + "windows-targets 0.52.6", 6009 + ] 6010 + 6011 + [[package]] 6012 + name = "windows-sys" 6013 + version = "0.59.0" 6014 + source = "registry+https://github.com/rust-lang/crates.io-index" 6015 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 6016 + dependencies = [ 6017 + "windows-targets 0.52.6", 6018 + ] 6019 + 6020 + [[package]] 6021 + name = "windows-targets" 6022 + version = "0.42.2" 6023 + source = "registry+https://github.com/rust-lang/crates.io-index" 6024 + checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 6025 + dependencies = [ 6026 + "windows_aarch64_gnullvm 0.42.2", 6027 + "windows_aarch64_msvc 0.42.2", 6028 + "windows_i686_gnu 0.42.2", 6029 + "windows_i686_msvc 0.42.2", 6030 + "windows_x86_64_gnu 0.42.2", 6031 + "windows_x86_64_gnullvm 0.42.2", 6032 + "windows_x86_64_msvc 0.42.2", 6033 + ] 6034 + 6035 + [[package]] 6036 + name = "windows-targets" 6037 + version = "0.48.5" 6038 + source = "registry+https://github.com/rust-lang/crates.io-index" 6039 + checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 6040 + dependencies = [ 6041 + "windows_aarch64_gnullvm 0.48.5", 6042 + "windows_aarch64_msvc 0.48.5", 6043 + "windows_i686_gnu 0.48.5", 6044 + "windows_i686_msvc 0.48.5", 6045 + "windows_x86_64_gnu 0.48.5", 6046 + "windows_x86_64_gnullvm 0.48.5", 6047 + "windows_x86_64_msvc 0.48.5", 6048 + ] 6049 + 6050 + [[package]] 6051 + name = "windows-targets" 6052 + version = "0.52.6" 6053 + source = "registry+https://github.com/rust-lang/crates.io-index" 6054 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 6055 + dependencies = [ 6056 + "windows_aarch64_gnullvm 0.52.6", 6057 + "windows_aarch64_msvc 0.52.6", 6058 + "windows_i686_gnu 0.52.6", 6059 + "windows_i686_gnullvm 0.52.6", 6060 + "windows_i686_msvc 0.52.6", 6061 + "windows_x86_64_gnu 0.52.6", 6062 + "windows_x86_64_gnullvm 0.52.6", 6063 + "windows_x86_64_msvc 0.52.6", 6064 + ] 6065 + 6066 + [[package]] 6067 + name = "windows-targets" 6068 + version = "0.53.0" 6069 + source = "registry+https://github.com/rust-lang/crates.io-index" 6070 + checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" 6071 + dependencies = [ 6072 + "windows_aarch64_gnullvm 0.53.0", 6073 + "windows_aarch64_msvc 0.53.0", 6074 + "windows_i686_gnu 0.53.0", 6075 + "windows_i686_gnullvm 0.53.0", 6076 + "windows_i686_msvc 0.53.0", 6077 + "windows_x86_64_gnu 0.53.0", 6078 + "windows_x86_64_gnullvm 0.53.0", 6079 + "windows_x86_64_msvc 0.53.0", 6080 + ] 6081 + 6082 + [[package]] 6083 + name = "windows-threading" 6084 + version = "0.1.0" 6085 + source = "registry+https://github.com/rust-lang/crates.io-index" 6086 + checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 6087 + dependencies = [ 6088 + "windows-link", 6089 + ] 6090 + 6091 + [[package]] 6092 + name = "windows_aarch64_gnullvm" 6093 + version = "0.42.2" 6094 + source = "registry+https://github.com/rust-lang/crates.io-index" 6095 + checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 6096 + 6097 + [[package]] 6098 + name = "windows_aarch64_gnullvm" 6099 + version = "0.48.5" 6100 + source = "registry+https://github.com/rust-lang/crates.io-index" 6101 + checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 6102 + 6103 + [[package]] 6104 + name = "windows_aarch64_gnullvm" 6105 + version = "0.52.6" 6106 + source = "registry+https://github.com/rust-lang/crates.io-index" 6107 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 6108 + 6109 + [[package]] 6110 + name = "windows_aarch64_gnullvm" 6111 + version = "0.53.0" 6112 + source = "registry+https://github.com/rust-lang/crates.io-index" 6113 + checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 6114 + 6115 + [[package]] 6116 + name = "windows_aarch64_msvc" 6117 + version = "0.42.2" 6118 + source = "registry+https://github.com/rust-lang/crates.io-index" 6119 + checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 6120 + 6121 + [[package]] 6122 + name = "windows_aarch64_msvc" 6123 + version = "0.48.5" 6124 + source = "registry+https://github.com/rust-lang/crates.io-index" 6125 + checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 6126 + 6127 + [[package]] 6128 + name = "windows_aarch64_msvc" 6129 + version = "0.52.6" 6130 + source = "registry+https://github.com/rust-lang/crates.io-index" 6131 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 6132 + 6133 + [[package]] 6134 + name = "windows_aarch64_msvc" 6135 + version = "0.53.0" 6136 + source = "registry+https://github.com/rust-lang/crates.io-index" 6137 + checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 6138 + 6139 + [[package]] 6140 + name = "windows_i686_gnu" 6141 + version = "0.42.2" 6142 + source = "registry+https://github.com/rust-lang/crates.io-index" 6143 + checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 6144 + 6145 + [[package]] 6146 + name = "windows_i686_gnu" 6147 + version = "0.48.5" 6148 + source = "registry+https://github.com/rust-lang/crates.io-index" 6149 + checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 6150 + 6151 + [[package]] 6152 + name = "windows_i686_gnu" 6153 + version = "0.52.6" 6154 + source = "registry+https://github.com/rust-lang/crates.io-index" 6155 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 6156 + 6157 + [[package]] 6158 + name = "windows_i686_gnu" 6159 + version = "0.53.0" 6160 + source = "registry+https://github.com/rust-lang/crates.io-index" 6161 + checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 6162 + 6163 + [[package]] 6164 + name = "windows_i686_gnullvm" 6165 + version = "0.52.6" 6166 + source = "registry+https://github.com/rust-lang/crates.io-index" 6167 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 6168 + 6169 + [[package]] 6170 + name = "windows_i686_gnullvm" 6171 + version = "0.53.0" 6172 + source = "registry+https://github.com/rust-lang/crates.io-index" 6173 + checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 6174 + 6175 + [[package]] 6176 + name = "windows_i686_msvc" 6177 + version = "0.42.2" 6178 + source = "registry+https://github.com/rust-lang/crates.io-index" 6179 + checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 6180 + 6181 + [[package]] 6182 + name = "windows_i686_msvc" 6183 + version = "0.48.5" 6184 + source = "registry+https://github.com/rust-lang/crates.io-index" 6185 + checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 6186 + 6187 + [[package]] 6188 + name = "windows_i686_msvc" 6189 + version = "0.52.6" 6190 + source = "registry+https://github.com/rust-lang/crates.io-index" 6191 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 6192 + 6193 + [[package]] 6194 + name = "windows_i686_msvc" 6195 + version = "0.53.0" 6196 + source = "registry+https://github.com/rust-lang/crates.io-index" 6197 + checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 6198 + 6199 + [[package]] 6200 + name = "windows_x86_64_gnu" 6201 + version = "0.42.2" 6202 + source = "registry+https://github.com/rust-lang/crates.io-index" 6203 + checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 6204 + 6205 + [[package]] 6206 + name = "windows_x86_64_gnu" 6207 + version = "0.48.5" 6208 + source = "registry+https://github.com/rust-lang/crates.io-index" 6209 + checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 6210 + 6211 + [[package]] 6212 + name = "windows_x86_64_gnu" 6213 + version = "0.52.6" 6214 + source = "registry+https://github.com/rust-lang/crates.io-index" 6215 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 6216 + 6217 + [[package]] 6218 + name = "windows_x86_64_gnu" 6219 + version = "0.53.0" 6220 + source = "registry+https://github.com/rust-lang/crates.io-index" 6221 + checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 6222 + 6223 + [[package]] 6224 + name = "windows_x86_64_gnullvm" 6225 + version = "0.42.2" 6226 + source = "registry+https://github.com/rust-lang/crates.io-index" 6227 + checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 6228 + 6229 + [[package]] 6230 + name = "windows_x86_64_gnullvm" 6231 + version = "0.48.5" 6232 + source = "registry+https://github.com/rust-lang/crates.io-index" 6233 + checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 6234 + 6235 + [[package]] 6236 + name = "windows_x86_64_gnullvm" 6237 + version = "0.52.6" 6238 + source = "registry+https://github.com/rust-lang/crates.io-index" 6239 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 6240 + 6241 + [[package]] 6242 + name = "windows_x86_64_gnullvm" 6243 + version = "0.53.0" 6244 + source = "registry+https://github.com/rust-lang/crates.io-index" 6245 + checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 6246 + 6247 + [[package]] 6248 + name = "windows_x86_64_msvc" 6249 + version = "0.42.2" 6250 + source = "registry+https://github.com/rust-lang/crates.io-index" 6251 + checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 6252 + 6253 + [[package]] 6254 + name = "windows_x86_64_msvc" 6255 + version = "0.48.5" 6256 + source = "registry+https://github.com/rust-lang/crates.io-index" 6257 + checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 6258 + 6259 + [[package]] 6260 + name = "windows_x86_64_msvc" 6261 + version = "0.52.6" 6262 + source = "registry+https://github.com/rust-lang/crates.io-index" 6263 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 6264 + 6265 + [[package]] 6266 + name = "windows_x86_64_msvc" 6267 + version = "0.53.0" 6268 + source = "registry+https://github.com/rust-lang/crates.io-index" 6269 + checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 6270 + 6271 + [[package]] 6272 + name = "winit" 6273 + version = "0.30.11" 6274 + source = "registry+https://github.com/rust-lang/crates.io-index" 6275 + checksum = "a4409c10174df8779dc29a4788cac85ed84024ccbc1743b776b21a520ee1aaf4" 6276 + dependencies = [ 6277 + "ahash", 6278 + "android-activity", 6279 + "atomic-waker", 6280 + "bitflags 2.9.1", 6281 + "block2", 6282 + "bytemuck", 6283 + "calloop", 6284 + "cfg_aliases", 6285 + "concurrent-queue", 6286 + "core-foundation 0.9.4", 6287 + "core-graphics", 6288 + "cursor-icon", 6289 + "dpi", 6290 + "js-sys", 6291 + "libc", 6292 + "memmap2", 6293 + "ndk 0.9.0", 6294 + "objc2 0.5.2", 6295 + "objc2-app-kit 0.2.2", 6296 + "objc2-foundation 0.2.2", 6297 + "objc2-ui-kit", 6298 + "orbclient", 6299 + "percent-encoding", 6300 + "pin-project", 6301 + "raw-window-handle", 6302 + "redox_syscall 0.4.1", 6303 + "rustix 0.38.44", 6304 + "sctk-adwaita", 6305 + "smithay-client-toolkit", 6306 + "smol_str", 6307 + "tracing", 6308 + "unicode-segmentation", 6309 + "wasm-bindgen", 6310 + "wasm-bindgen-futures", 6311 + "wayland-backend", 6312 + "wayland-client", 6313 + "wayland-protocols", 6314 + "wayland-protocols-plasma", 6315 + "web-sys", 6316 + "web-time", 6317 + "windows-sys 0.52.0", 6318 + "x11-dl", 6319 + "x11rb", 6320 + "xkbcommon-dl", 6321 + ] 6322 + 6323 + [[package]] 6324 + name = "winnow" 6325 + version = "0.7.10" 6326 + source = "registry+https://github.com/rust-lang/crates.io-index" 6327 + checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" 6328 + dependencies = [ 6329 + "memchr", 6330 + ] 6331 + 6332 + [[package]] 6333 + name = "wit-bindgen-rt" 6334 + version = "0.39.0" 6335 + source = "registry+https://github.com/rust-lang/crates.io-index" 6336 + checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 6337 + dependencies = [ 6338 + "bitflags 2.9.1", 6339 + ] 6340 + 6341 + [[package]] 6342 + name = "writeable" 6343 + version = "0.6.1" 6344 + source = "registry+https://github.com/rust-lang/crates.io-index" 6345 + checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 6346 + 6347 + [[package]] 6348 + name = "x11-dl" 6349 + version = "2.21.0" 6350 + source = "registry+https://github.com/rust-lang/crates.io-index" 6351 + checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 6352 + dependencies = [ 6353 + "libc", 6354 + "once_cell", 6355 + "pkg-config", 6356 + ] 6357 + 6358 + [[package]] 6359 + name = "x11rb" 6360 + version = "0.13.1" 6361 + source = "registry+https://github.com/rust-lang/crates.io-index" 6362 + checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" 6363 + dependencies = [ 6364 + "as-raw-xcb-connection", 6365 + "gethostname", 6366 + "libc", 6367 + "libloading", 6368 + "once_cell", 6369 + "rustix 0.38.44", 6370 + "x11rb-protocol", 6371 + ] 6372 + 6373 + [[package]] 6374 + name = "x11rb-protocol" 6375 + version = "0.13.1" 6376 + source = "registry+https://github.com/rust-lang/crates.io-index" 6377 + checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" 6378 + 6379 + [[package]] 6380 + name = "xcursor" 6381 + version = "0.3.8" 6382 + source = "registry+https://github.com/rust-lang/crates.io-index" 6383 + checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" 6384 + 6385 + [[package]] 6386 + name = "xkbcommon-dl" 6387 + version = "0.4.2" 6388 + source = "registry+https://github.com/rust-lang/crates.io-index" 6389 + checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" 6390 + dependencies = [ 6391 + "bitflags 2.9.1", 6392 + "dlib", 6393 + "log", 6394 + "once_cell", 6395 + "xkeysym", 6396 + ] 6397 + 6398 + [[package]] 6399 + name = "xkeysym" 6400 + version = "0.2.1" 6401 + source = "registry+https://github.com/rust-lang/crates.io-index" 6402 + checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" 6403 + 6404 + [[package]] 6405 + name = "xml-rs" 6406 + version = "0.8.26" 6407 + source = "registry+https://github.com/rust-lang/crates.io-index" 6408 + checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" 6409 + 6410 + [[package]] 6411 + name = "yazi" 6412 + version = "0.2.1" 6413 + source = "registry+https://github.com/rust-lang/crates.io-index" 6414 + checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" 6415 + 6416 + [[package]] 6417 + name = "yoke" 6418 + version = "0.8.0" 6419 + source = "registry+https://github.com/rust-lang/crates.io-index" 6420 + checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 6421 + dependencies = [ 6422 + "serde", 6423 + "stable_deref_trait", 6424 + "yoke-derive", 6425 + "zerofrom", 6426 + ] 6427 + 6428 + [[package]] 6429 + name = "yoke-derive" 6430 + version = "0.8.0" 6431 + source = "registry+https://github.com/rust-lang/crates.io-index" 6432 + checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 6433 + dependencies = [ 6434 + "proc-macro2", 6435 + "quote", 6436 + "syn", 6437 + "synstructure", 6438 + ] 6439 + 6440 + [[package]] 6441 + name = "zeno" 6442 + version = "0.3.3" 6443 + source = "registry+https://github.com/rust-lang/crates.io-index" 6444 + checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" 6445 + 6446 + [[package]] 6447 + name = "zerocopy" 6448 + version = "0.8.25" 6449 + source = "registry+https://github.com/rust-lang/crates.io-index" 6450 + checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" 6451 + dependencies = [ 6452 + "zerocopy-derive", 6453 + ] 6454 + 6455 + [[package]] 6456 + name = "zerocopy-derive" 6457 + version = "0.8.25" 6458 + source = "registry+https://github.com/rust-lang/crates.io-index" 6459 + checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" 6460 + dependencies = [ 6461 + "proc-macro2", 6462 + "quote", 6463 + "syn", 6464 + ] 6465 + 6466 + [[package]] 6467 + name = "zerofrom" 6468 + version = "0.1.6" 6469 + source = "registry+https://github.com/rust-lang/crates.io-index" 6470 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 6471 + dependencies = [ 6472 + "zerofrom-derive", 6473 + ] 6474 + 6475 + [[package]] 6476 + name = "zerofrom-derive" 6477 + version = "0.1.6" 6478 + source = "registry+https://github.com/rust-lang/crates.io-index" 6479 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 6480 + dependencies = [ 6481 + "proc-macro2", 6482 + "quote", 6483 + "syn", 6484 + "synstructure", 6485 + ] 6486 + 6487 + [[package]] 6488 + name = "zerotrie" 6489 + version = "0.2.2" 6490 + source = "registry+https://github.com/rust-lang/crates.io-index" 6491 + checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 6492 + dependencies = [ 6493 + "displaydoc", 6494 + "yoke", 6495 + "zerofrom", 6496 + ] 6497 + 6498 + [[package]] 6499 + name = "zerovec" 6500 + version = "0.11.2" 6501 + source = "registry+https://github.com/rust-lang/crates.io-index" 6502 + checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 6503 + dependencies = [ 6504 + "yoke", 6505 + "zerofrom", 6506 + "zerovec-derive", 6507 + ] 6508 + 6509 + [[package]] 6510 + name = "zerovec-derive" 6511 + version = "0.11.1" 6512 + source = "registry+https://github.com/rust-lang/crates.io-index" 6513 + checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 6514 + dependencies = [ 6515 + "proc-macro2", 6516 + "quote", 6517 + "syn", 6518 + ] 6519 + 6520 + [[package]] 6521 + name = "zune-core" 6522 + version = "0.4.12" 6523 + source = "registry+https://github.com/rust-lang/crates.io-index" 6524 + checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" 6525 + 6526 + [[package]] 6527 + name = "zune-inflate" 6528 + version = "0.2.54" 6529 + source = "registry+https://github.com/rust-lang/crates.io-index" 6530 + checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" 6531 + dependencies = [ 6532 + "simd-adler32", 6533 + ] 6534 + 6535 + [[package]] 6536 + name = "zune-jpeg" 6537 + version = "0.4.14" 6538 + source = "registry+https://github.com/rust-lang/crates.io-index" 6539 + checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" 6540 + dependencies = [ 6541 + "zune-core", 6542 + ]
+128
Cargo.toml
··· 1 + [package] 2 + name = "parylord" 3 + authors = ["pawarherschel <pawarherschel@gmail.com>"] 4 + version = "0.1.0" 5 + edition = "2024" 6 + 7 + [dependencies] 8 + bevy = { version = "0.16", features = ["wayland"] } 9 + rand = "0.8" 10 + # Compile low-severity logs out of native builds for performance. 11 + log = { version = "0.4", features = [ 12 + "max_level_debug", 13 + "release_max_level_warn", 14 + ] } 15 + # Compile low-severity logs out of web builds for performance. 16 + tracing = { version = "0.1", features = [ 17 + "max_level_debug", 18 + "release_max_level_warn", 19 + ] } 20 + bevy-inspector-egui = "0.31.0" 21 + bevy_egui = "0.34.1" 22 + 23 + # Your web builds will start failing if you add a dependency that pulls in `getrandom` v0.3+. 24 + # To fix this, you should tell `getrandom` to use the `wasm_js` backend on Wasm. 25 + # See: <https://docs.rs/getrandom/0.3.3/getrandom/#webassembly-support>. 26 + #[target.wasm32-unknown-unknown.dependencies] 27 + #getrandom = { version = "0.3", features = ["wasm_js"] } 28 + # In addition to enabling the `wasm_js` feature, you need to include `--cfg 'getrandom_backend="wasm_js"'` 29 + # in your rustflags for both local and CI/CD web builds, taking into account that rustflags specified in 30 + # multiple places are NOT combined (see <https://github.com/rust-lang/cargo/issues/5376>). 31 + # Alternatively, you can opt out of the rustflags check with this patch: 32 + #[patch.crates-io] 33 + #getrandom = { git = "https://github.com/benfrankel/getrandom" } 34 + 35 + [features] 36 + # Default to a native dev build. 37 + default = ["dev_native"] 38 + dev = [ 39 + # Improve compile times for dev builds by linking Bevy as a dynamic library. 40 + "bevy/dynamic_linking", 41 + "bevy/bevy_dev_tools", 42 + "bevy/bevy_ui_debug", 43 + # Improve error messages coming from Bevy 44 + "bevy/track_location", 45 + ] 46 + dev_native = [ 47 + "dev", 48 + # Enable asset hot reloading for native dev builds. 49 + "bevy/file_watcher", 50 + # Enable embedded asset hot reloading for native dev builds. 51 + "bevy/embedded_watcher", 52 + ] 53 + 54 + 55 + [package.metadata.bevy_cli.release] 56 + # Disable dev features for release builds. 57 + default-features = false 58 + 59 + [package.metadata.bevy_cli.web] 60 + # Disable native features for web builds. 61 + default-features = false 62 + 63 + [package.metadata.bevy_cli.web.dev] 64 + features = ["dev"] 65 + 66 + 67 + [lints.rust] 68 + # Mark `bevy_lint` as a valid `cfg`, as it is set when the Bevy linter runs. 69 + unexpected_cfgs = { level = "warn", check-cfg = ["cfg(bevy_lint)"] } 70 + 71 + [lints.clippy] 72 + # Bevy supplies arguments to systems via dependency injection, so it's natural for systems to 73 + # request more than 7 arguments, which would undesirably trigger this lint. 74 + too_many_arguments = "allow" 75 + # Queries may access many components, which would undesirably trigger this lint. 76 + type_complexity = "allow" 77 + # Make sure macros use their standard braces, such as `[]` for `bevy_ecs::children!`. 78 + nonstandard_macro_braces = "warn" 79 + 80 + # You can configure the warning levels of Bevy lints here. For a list of all lints, see: 81 + # <https://thebevyflock.github.io/bevy_cli/bevy_lint/lints/> 82 + [package.metadata.bevy_lint] 83 + # panicking_methods = "deny" 84 + # pedantic = "warn" 85 + 86 + 87 + # Compile with Performance Optimizations: 88 + # <https://bevyengine.org/learn/quick-start/getting-started/setup/#compile-with-performance-optimizations> 89 + 90 + # Enable a small amount of optimization in the dev profile. 91 + [profile.dev] 92 + opt-level = 1 93 + 94 + # Enable a large amount of optimization in the dev profile for dependencies. 95 + [profile.dev.package."*"] 96 + opt-level = 3 97 + 98 + # Remove expensive debug assertions due to <https://github.com/bevyengine/bevy/issues/14291> 99 + [profile.dev.package.wgpu-types] 100 + debug-assertions = false 101 + 102 + [profile.release] 103 + # Compile the entire crate as one unit. 104 + # Slows compile times, marginal improvements. 105 + codegen-units = 1 106 + # Do a second optimization pass over the entire program, including dependencies. 107 + # Slows compile times, marginal improvements. 108 + lto = "thin" 109 + 110 + # This profile will be used by `bevy run web` automatically. 111 + [profile.web-release] 112 + # Default to release profile values. 113 + inherits = "release" 114 + # Optimize with size in mind (also try "z", sometimes it is better). 115 + # Slightly slows compile times, great improvements to file size and runtime performance. 116 + opt-level = "s" 117 + # Strip all debugging information from the binary to slightly reduce file size. 118 + strip = "debuginfo" 119 + 120 + # Optimize for build time in CI. 121 + [profile.ci] 122 + inherits = "dev" 123 + opt-level = 0 124 + debug = "line-tables-only" 125 + codegen-units = 4 126 + 127 + [profile.ci.package."*"] 128 + opt-level = 0
+4
README.md
··· 1 + # Parylord 2 + 3 + This project was generated using the [Bevy New 2D](https://github.com/TheBevyFlock/bevy_new_2d) template. 4 + Check out the [documentation](https://github.com/TheBevyFlock/bevy_new_2d/blob/main/README.md) to get started!
assets/images/bg.png

This is a binary file and will not be displayed.

assets/images/pink/attack_indicator.png

This is a binary file and will not be displayed.

assets/images/pink/climb1.png

This is a binary file and will not be displayed.

assets/images/pink/climb2.png

This is a binary file and will not be displayed.

assets/images/pink/duck.png

This is a binary file and will not be displayed.

assets/images/pink/front.png

This is a binary file and will not be displayed.

assets/images/pink/hit.png

This is a binary file and will not be displayed.

assets/images/pink/jump.png

This is a binary file and will not be displayed.

assets/images/pink/stand.png

This is a binary file and will not be displayed.

assets/images/pink/swim1.png

This is a binary file and will not be displayed.

assets/images/pink/swim2.png

This is a binary file and will not be displayed.

assets/images/pink/walk1.png

This is a binary file and will not be displayed.

assets/images/pink/walk2.png

This is a binary file and will not be displayed.

+2
clippy.toml
··· 1 + # Require `bevy_ecs::children!` to use `[]` braces, instead of `()` or `{}`. 2 + standard-macro-braces = [{ name = "children", brace = "[" }]
+2
rust-toolchain.toml
··· 1 + [toolchain] 2 + channel = "nightly-2025-05-30"
+71
src/asset_tracking.rs
··· 1 + //! A high-level way to load collections of asset handles as resources. 2 + 3 + use std::collections::VecDeque; 4 + 5 + use bevy::prelude::*; 6 + 7 + pub(super) fn plugin(app: &mut App) { 8 + app.init_resource::<ResourceHandles>(); 9 + app.add_systems(PreUpdate, load_resource_assets); 10 + } 11 + 12 + pub trait LoadResource { 13 + /// This will load the [`Resource`] as an [`Asset`]. When all of its asset dependencies 14 + /// have been loaded, it will be inserted as a resource. This ensures that the resource only 15 + /// exists when the assets are ready. 16 + fn load_resource<T: Resource + Asset + Clone + FromWorld>(&mut self) -> &mut Self; 17 + } 18 + 19 + impl LoadResource for App { 20 + fn load_resource<T: Resource + Asset + Clone + FromWorld>(&mut self) -> &mut Self { 21 + self.init_asset::<T>(); 22 + let world = self.world_mut(); 23 + let value = T::from_world(world); 24 + let assets = world.resource::<AssetServer>(); 25 + let handle = assets.add(value); 26 + let mut handles = world.resource_mut::<ResourceHandles>(); 27 + handles 28 + .waiting 29 + .push_back((handle.untyped(), |world, handle| { 30 + let assets = world.resource::<Assets<T>>(); 31 + if let Some(value) = assets.get(handle.id().typed::<T>()) { 32 + world.insert_resource(value.clone()); 33 + } 34 + })); 35 + self 36 + } 37 + } 38 + 39 + /// A function that inserts a loaded resource. 40 + type InsertLoadedResource = fn(&mut World, &UntypedHandle); 41 + 42 + #[derive(Resource, Default)] 43 + pub struct ResourceHandles { 44 + // Use a queue for waiting assets so they can be cycled through and moved to 45 + // `finished` one at a time. 46 + waiting: VecDeque<(UntypedHandle, InsertLoadedResource)>, 47 + finished: Vec<UntypedHandle>, 48 + } 49 + 50 + impl ResourceHandles { 51 + /// Returns true if all requested [`Asset`]s have finished loading and are available as [`Resource`]s. 52 + pub fn is_all_done(&self) -> bool { 53 + self.waiting.is_empty() 54 + } 55 + } 56 + 57 + fn load_resource_assets(world: &mut World) { 58 + world.resource_scope(|world, mut resource_handles: Mut<ResourceHandles>| { 59 + world.resource_scope(|world, assets: Mut<AssetServer>| { 60 + for _ in 0..resource_handles.waiting.len() { 61 + let (handle, insert_fn) = resource_handles.waiting.pop_front().unwrap(); 62 + if assets.is_loaded_with_dependencies(&handle) { 63 + insert_fn(world, &handle); 64 + resource_handles.finished.push(handle); 65 + } else { 66 + resource_handles.waiting.push_back((handle, insert_fn)); 67 + } 68 + } 69 + }); 70 + }); 71 + }
+47
src/audio.rs
··· 1 + use bevy::prelude::*; 2 + 3 + pub(super) fn plugin(app: &mut App) { 4 + app.register_type::<Music>(); 5 + app.register_type::<SoundEffect>(); 6 + 7 + app.add_systems( 8 + Update, 9 + apply_global_volume.run_if(resource_changed::<GlobalVolume>), 10 + ); 11 + } 12 + 13 + /// An organizational marker component that should be added to a spawned [`AudioPlayer`] if it's in the 14 + /// general "music" category (e.g. global background music, soundtrack). 15 + /// 16 + /// This can then be used to query for and operate on sounds in that category. 17 + #[derive(Component, Reflect, Default)] 18 + #[reflect(Component)] 19 + pub struct Music; 20 + 21 + /// A music audio instance. 22 + pub fn music(handle: Handle<AudioSource>) -> impl Bundle { 23 + (AudioPlayer(handle), PlaybackSettings::LOOP, Music) 24 + } 25 + 26 + /// An organizational marker component that should be added to a spawned [`AudioPlayer`] if it's in the 27 + /// general "sound effect" category (e.g. footsteps, the sound of a magic spell, a door opening). 28 + /// 29 + /// This can then be used to query for and operate on sounds in that category. 30 + #[derive(Component, Reflect, Default)] 31 + #[reflect(Component)] 32 + pub struct SoundEffect; 33 + 34 + /// A sound effect audio instance. 35 + pub fn sound_effect(handle: Handle<AudioSource>) -> impl Bundle { 36 + (AudioPlayer(handle), PlaybackSettings::DESPAWN, SoundEffect) 37 + } 38 + 39 + /// [`GlobalVolume`] doesn't apply to already-running audio entities, so this system will update them. 40 + fn apply_global_volume( 41 + global_volume: Res<GlobalVolume>, 42 + mut audio_query: Query<(&PlaybackSettings, &mut AudioSink)>, 43 + ) { 44 + for (playback, mut sink) in &mut audio_query { 45 + sink.set_volume(global_volume.volume * playback.volume); 46 + } 47 + }
+175
src/demo/animation.rs
··· 1 + //! Player sprite animation. 2 + //! This is based on multiple examples and may be very different for your game. 3 + //! - [Sprite flipping](https://github.com/bevyengine/bevy/blob/latest/examples/2d/sprite_flipping.rs) 4 + //! - [Sprite animation](https://github.com/bevyengine/bevy/blob/latest/examples/2d/sprite_animation.rs) 5 + //! - [Timers](https://github.com/bevyengine/bevy/blob/latest/examples/time/timers.rs) 6 + 7 + use bevy::prelude::*; 8 + use rand::prelude::*; 9 + use std::time::Duration; 10 + 11 + use crate::{ 12 + AppSystems, PausableSystems, 13 + audio::sound_effect, 14 + demo::{movement::MovementController, player::PlayerAssets}, 15 + }; 16 + 17 + pub(super) fn plugin(app: &mut App) { 18 + // Animate and play sound effects based on controls. 19 + app.register_type::<PlayerAnimation>(); 20 + app.add_systems( 21 + Update, 22 + ( 23 + update_animation_timer.in_set(AppSystems::TickTimers), 24 + ( 25 + update_animation_movement, 26 + update_animation_atlas, 27 + trigger_step_sound_effect, 28 + ) 29 + .chain() 30 + .run_if(resource_exists::<PlayerAssets>) 31 + .in_set(AppSystems::Update), 32 + ) 33 + .in_set(PausableSystems), 34 + ); 35 + } 36 + 37 + /// Update the sprite direction and animation state (idling/walking). 38 + fn update_animation_movement( 39 + mut player_query: Query<(&MovementController, &mut Sprite, &mut PlayerAnimation)>, 40 + ) { 41 + for (controller, mut sprite, mut animation) in &mut player_query { 42 + let dx = controller.intent.x; 43 + if dx != 0.0 { 44 + sprite.flip_x = dx < 0.0; 45 + } 46 + 47 + let animation_state = if controller.intent == Vec2::ZERO { 48 + PlayerAnimationState::Idling 49 + } else { 50 + PlayerAnimationState::Walking 51 + }; 52 + animation.update_state(animation_state); 53 + } 54 + } 55 + 56 + /// Update the animation timer. 57 + fn update_animation_timer(time: Res<Time>, mut query: Query<&mut PlayerAnimation>) { 58 + for mut animation in &mut query { 59 + animation.update_timer(time.delta()); 60 + } 61 + } 62 + 63 + /// Update the texture atlas to reflect changes in the animation. 64 + fn update_animation_atlas(mut query: Query<(&PlayerAnimation, &mut Sprite)>) { 65 + for (animation, mut sprite) in &mut query { 66 + let Some(atlas) = sprite.texture_atlas.as_mut() else { 67 + continue; 68 + }; 69 + if animation.changed() { 70 + atlas.index = animation.get_atlas_index(); 71 + } 72 + } 73 + } 74 + 75 + /// If the player is moving, play a step sound effect synchronized with the 76 + /// animation. 77 + fn trigger_step_sound_effect( 78 + mut commands: Commands, 79 + player_assets: Res<PlayerAssets>, 80 + mut step_query: Query<&PlayerAnimation>, 81 + ) { 82 + for animation in &mut step_query { 83 + if animation.state == PlayerAnimationState::Walking 84 + && animation.changed() 85 + && (animation.frame == 2 || animation.frame == 5) 86 + { 87 + let rng = &mut rand::thread_rng(); 88 + let random_step = player_assets.steps.choose(rng).unwrap().clone(); 89 + commands.spawn(sound_effect(random_step)); 90 + } 91 + } 92 + } 93 + 94 + /// Component that tracks player's animation state. 95 + /// It is tightly bound to the texture atlas we use. 96 + #[derive(Component, Reflect)] 97 + #[reflect(Component)] 98 + pub struct PlayerAnimation { 99 + timer: Timer, 100 + frame: usize, 101 + state: PlayerAnimationState, 102 + } 103 + 104 + #[derive(Reflect, PartialEq)] 105 + pub enum PlayerAnimationState { 106 + Idling, 107 + Walking, 108 + } 109 + 110 + impl PlayerAnimation { 111 + /// The number of idle frames. 112 + const IDLE_FRAMES: usize = 2; 113 + /// The duration of each idle frame. 114 + const IDLE_INTERVAL: Duration = Duration::from_millis(500); 115 + /// The number of walking frames. 116 + const WALKING_FRAMES: usize = 6; 117 + /// The duration of each walking frame. 118 + const WALKING_INTERVAL: Duration = Duration::from_millis(50); 119 + 120 + fn idling() -> Self { 121 + Self { 122 + timer: Timer::new(Self::IDLE_INTERVAL, TimerMode::Repeating), 123 + frame: 0, 124 + state: PlayerAnimationState::Idling, 125 + } 126 + } 127 + 128 + fn walking() -> Self { 129 + Self { 130 + timer: Timer::new(Self::WALKING_INTERVAL, TimerMode::Repeating), 131 + frame: 0, 132 + state: PlayerAnimationState::Walking, 133 + } 134 + } 135 + 136 + pub fn new() -> Self { 137 + Self::idling() 138 + } 139 + 140 + /// Update animation timers. 141 + pub fn update_timer(&mut self, delta: Duration) { 142 + self.timer.tick(delta); 143 + if !self.timer.finished() { 144 + return; 145 + } 146 + self.frame = (self.frame + 1) 147 + % match self.state { 148 + PlayerAnimationState::Idling => Self::IDLE_FRAMES, 149 + PlayerAnimationState::Walking => Self::WALKING_FRAMES, 150 + }; 151 + } 152 + 153 + /// Update animation state if it changes. 154 + pub fn update_state(&mut self, state: PlayerAnimationState) { 155 + if self.state != state { 156 + match state { 157 + PlayerAnimationState::Idling => *self = Self::idling(), 158 + PlayerAnimationState::Walking => *self = Self::walking(), 159 + } 160 + } 161 + } 162 + 163 + /// Whether animation changed this tick. 164 + pub fn changed(&self) -> bool { 165 + self.timer.finished() 166 + } 167 + 168 + /// Return sprite index in the atlas. 169 + pub fn get_atlas_index(&self) -> usize { 170 + match self.state { 171 + PlayerAnimationState::Idling => self.frame, 172 + PlayerAnimationState::Walking => 6 + self.frame, 173 + } 174 + } 175 + }
+53
src/demo/level.rs
··· 1 + //! Spawn the main level. 2 + 3 + use bevy::prelude::*; 4 + 5 + use crate::{ 6 + asset_tracking::LoadResource, 7 + audio::music, 8 + demo::player::{PlayerAssets, player}, 9 + screens::Screen, 10 + }; 11 + 12 + pub(super) fn plugin(app: &mut App) { 13 + app.register_type::<LevelAssets>(); 14 + app.load_resource::<LevelAssets>(); 15 + } 16 + 17 + #[derive(Resource, Asset, Clone, Reflect)] 18 + #[reflect(Resource)] 19 + pub struct LevelAssets { 20 + #[dependency] 21 + music: Handle<AudioSource>, 22 + } 23 + 24 + impl FromWorld for LevelAssets { 25 + fn from_world(world: &mut World) -> Self { 26 + let assets = world.resource::<AssetServer>(); 27 + Self { 28 + music: assets.load("audio/music/Fluffing A Duck.ogg"), 29 + } 30 + } 31 + } 32 + 33 + /// A system that spawns the main level. 34 + pub fn spawn_level( 35 + mut commands: Commands, 36 + level_assets: Res<LevelAssets>, 37 + player_assets: Res<PlayerAssets>, 38 + mut texture_atlas_layouts: ResMut<Assets<TextureAtlasLayout>>, 39 + ) { 40 + commands.spawn(( 41 + Name::new("Level"), 42 + Transform::default(), 43 + Visibility::default(), 44 + StateScoped(Screen::Gameplay), 45 + children![ 46 + player(400.0, &player_assets, &mut texture_atlas_layouts), 47 + ( 48 + Name::new("Gameplay Music"), 49 + music(level_assets.music.clone()) 50 + ) 51 + ], 52 + )); 53 + }
+20
src/demo/mod.rs
··· 1 + //! Demo gameplay. All of these modules are only intended for demonstration 2 + //! purposes and should be replaced with your own game logic. 3 + //! Feel free to change the logic found here if you feel like tinkering around 4 + //! to get a feeling for the template. 5 + 6 + use bevy::prelude::*; 7 + 8 + mod animation; 9 + pub mod level; 10 + mod movement; 11 + pub mod player; 12 + 13 + pub(super) fn plugin(app: &mut App) { 14 + app.add_plugins(( 15 + animation::plugin, 16 + level::plugin, 17 + movement::plugin, 18 + player::plugin, 19 + )); 20 + }
+82
src/demo/movement.rs
··· 1 + //! Handle player input and translate it into movement through a character 2 + //! controller. A character controller is the collection of systems that govern 3 + //! the movement of characters. 4 + //! 5 + //! In our case, the character controller has the following logic: 6 + //! - Set [`MovementController`] intent based on directional keyboard input. 7 + //! This is done in the `player` module, as it is specific to the player 8 + //! character. 9 + //! - Apply movement based on [`MovementController`] intent and maximum speed. 10 + //! - Wrap the character within the window. 11 + //! 12 + //! Note that the implementation used here is limited for demonstration 13 + //! purposes. If you want to move the player in a smoother way, 14 + //! consider using a [fixed timestep](https://github.com/bevyengine/bevy/blob/main/examples/movement/physics_in_fixed_timestep.rs). 15 + 16 + use bevy::{prelude::*, window::PrimaryWindow}; 17 + 18 + use crate::{AppSystems, PausableSystems}; 19 + 20 + pub(super) fn plugin(app: &mut App) { 21 + app.register_type::<MovementController>(); 22 + app.register_type::<ScreenWrap>(); 23 + 24 + app.add_systems( 25 + Update, 26 + (apply_movement, apply_screen_wrap) 27 + .chain() 28 + .in_set(AppSystems::Update) 29 + .in_set(PausableSystems), 30 + ); 31 + } 32 + 33 + /// These are the movement parameters for our character controller. 34 + /// For now, this is only used for a single player, but it could power NPCs or 35 + /// other players as well. 36 + #[derive(Component, Reflect)] 37 + #[reflect(Component)] 38 + pub struct MovementController { 39 + /// The direction the character wants to move in. 40 + pub intent: Vec2, 41 + 42 + /// Maximum speed in world units per second. 43 + /// 1 world unit = 1 pixel when using the default 2D camera and no physics engine. 44 + pub max_speed: f32, 45 + } 46 + 47 + impl Default for MovementController { 48 + fn default() -> Self { 49 + Self { 50 + intent: Vec2::ZERO, 51 + // 400 pixels per second is a nice default, but we can still vary this per character. 52 + max_speed: 400.0, 53 + } 54 + } 55 + } 56 + 57 + fn apply_movement( 58 + time: Res<Time>, 59 + mut movement_query: Query<(&MovementController, &mut Transform)>, 60 + ) { 61 + for (controller, mut transform) in &mut movement_query { 62 + let velocity = controller.max_speed * controller.intent; 63 + transform.translation += velocity.extend(0.0) * time.delta_secs(); 64 + } 65 + } 66 + 67 + #[derive(Component, Reflect)] 68 + #[reflect(Component)] 69 + pub struct ScreenWrap; 70 + 71 + fn apply_screen_wrap( 72 + window: Single<&Window, With<PrimaryWindow>>, 73 + mut wrap_query: Query<&mut Transform, With<ScreenWrap>>, 74 + ) { 75 + let size = window.size() + 256.0; 76 + let half_size = size / 2.0; 77 + for mut transform in &mut wrap_query { 78 + let position = transform.translation.xy(); 79 + let wrapped = (position + half_size).rem_euclid(size) - half_size; 80 + transform.translation = wrapped.extend(transform.translation.z); 81 + } 82 + }
+126
src/demo/player.rs
··· 1 + //! Player-specific behavior. 2 + 3 + use bevy::{ 4 + image::{ImageLoaderSettings, ImageSampler}, 5 + prelude::*, 6 + }; 7 + 8 + use crate::{ 9 + AppSystems, PausableSystems, 10 + asset_tracking::LoadResource, 11 + demo::{ 12 + animation::PlayerAnimation, 13 + movement::{MovementController, ScreenWrap}, 14 + }, 15 + }; 16 + 17 + pub(super) fn plugin(app: &mut App) { 18 + app.register_type::<Player>(); 19 + 20 + app.register_type::<PlayerAssets>(); 21 + app.load_resource::<PlayerAssets>(); 22 + 23 + // Record directional input as movement controls. 24 + app.add_systems( 25 + Update, 26 + record_player_directional_input 27 + .in_set(AppSystems::RecordInput) 28 + .in_set(PausableSystems), 29 + ); 30 + } 31 + 32 + /// The player character. 33 + pub fn player( 34 + max_speed: f32, 35 + player_assets: &PlayerAssets, 36 + texture_atlas_layouts: &mut Assets<TextureAtlasLayout>, 37 + ) -> impl Bundle { 38 + // A texture atlas is a way to split a single image into a grid of related images. 39 + // You can learn more in this example: https://github.com/bevyengine/bevy/blob/latest/examples/2d/texture_atlas.rs 40 + let layout = TextureAtlasLayout::from_grid(UVec2::splat(32), 6, 2, Some(UVec2::splat(1)), None); 41 + let texture_atlas_layout = texture_atlas_layouts.add(layout); 42 + let player_animation = PlayerAnimation::new(); 43 + 44 + ( 45 + Name::new("Player"), 46 + Player, 47 + Sprite { 48 + image: player_assets.ducky.clone(), 49 + texture_atlas: Some(TextureAtlas { 50 + layout: texture_atlas_layout, 51 + index: player_animation.get_atlas_index(), 52 + }), 53 + ..default() 54 + }, 55 + Transform::from_scale(Vec2::splat(8.0).extend(1.0)), 56 + MovementController { 57 + max_speed, 58 + ..default() 59 + }, 60 + ScreenWrap, 61 + player_animation, 62 + ) 63 + } 64 + 65 + #[derive(Component, Debug, Clone, Copy, PartialEq, Eq, Default, Reflect)] 66 + #[reflect(Component)] 67 + struct Player; 68 + 69 + fn record_player_directional_input( 70 + input: Res<ButtonInput<KeyCode>>, 71 + mut controller_query: Query<&mut MovementController, With<Player>>, 72 + ) { 73 + // Collect directional input. 74 + let mut intent = Vec2::ZERO; 75 + if input.pressed(KeyCode::KeyW) || input.pressed(KeyCode::ArrowUp) { 76 + intent.y += 1.0; 77 + } 78 + if input.pressed(KeyCode::KeyS) || input.pressed(KeyCode::ArrowDown) { 79 + intent.y -= 1.0; 80 + } 81 + if input.pressed(KeyCode::KeyA) || input.pressed(KeyCode::ArrowLeft) { 82 + intent.x -= 1.0; 83 + } 84 + if input.pressed(KeyCode::KeyD) || input.pressed(KeyCode::ArrowRight) { 85 + intent.x += 1.0; 86 + } 87 + 88 + // Normalize intent so that diagonal movement is the same speed as horizontal / vertical. 89 + // This should be omitted if the input comes from an analog stick instead. 90 + let intent = intent.normalize_or_zero(); 91 + 92 + // Apply movement intent to controllers. 93 + for mut controller in &mut controller_query { 94 + controller.intent = intent; 95 + } 96 + } 97 + 98 + #[derive(Resource, Asset, Clone, Reflect)] 99 + #[reflect(Resource)] 100 + pub struct PlayerAssets { 101 + #[dependency] 102 + ducky: Handle<Image>, 103 + #[dependency] 104 + pub steps: Vec<Handle<AudioSource>>, 105 + } 106 + 107 + impl FromWorld for PlayerAssets { 108 + fn from_world(world: &mut World) -> Self { 109 + let assets = world.resource::<AssetServer>(); 110 + Self { 111 + ducky: assets.load_with_settings( 112 + "images/ducky.png", 113 + |settings: &mut ImageLoaderSettings| { 114 + // Use `nearest` image sampling to preserve pixel art style. 115 + settings.sampler = ImageSampler::nearest(); 116 + }, 117 + ), 118 + steps: vec![ 119 + assets.load("audio/sound_effects/step1.ogg"), 120 + assets.load("audio/sound_effects/step2.ogg"), 121 + assets.load("audio/sound_effects/step3.ogg"), 122 + assets.load("audio/sound_effects/step4.ogg"), 123 + ], 124 + } 125 + } 126 + }
+25
src/dev_tools.rs
··· 1 + //! Development tools for the game. This plugin is only enabled in dev builds. 2 + 3 + use bevy::{ 4 + dev_tools::states::log_transitions, input::common_conditions::input_just_pressed, prelude::*, 5 + ui::UiDebugOptions, 6 + }; 7 + 8 + use crate::screens::Screen; 9 + 10 + pub(super) fn plugin(app: &mut App) { 11 + // Log `Screen` state transitions. 12 + app.add_systems(Update, log_transitions::<Screen>); 13 + 14 + // Toggle the debug overlay for UI. 15 + app.add_systems( 16 + Update, 17 + toggle_debug_ui.run_if(input_just_pressed(TOGGLE_KEY)), 18 + ); 19 + } 20 + 21 + const TOGGLE_KEY: KeyCode = KeyCode::Backquote; 22 + 23 + fn toggle_debug_ui(mut options: ResMut<UiDebugOptions>) { 24 + options.toggle(); 25 + }
+113
src/main.rs
··· 1 + // Support configuring Bevy lints within code. 2 + #![cfg_attr(bevy_lint, feature(register_tool), register_tool(bevy))] 3 + // Disable console on Windows for non-dev builds. 4 + #![cfg_attr(not(feature = "dev"), windows_subsystem = "windows")] 5 + 6 + mod asset_tracking; 7 + mod audio; 8 + // mod demo; 9 + #[cfg(feature = "dev")] 10 + mod dev_tools; 11 + mod menus; 12 + mod parylord; 13 + mod screens; 14 + mod theme; 15 + 16 + use bevy::window::WindowResolution; 17 + use bevy::{asset::AssetMetaCheck, prelude::*}; 18 + use bevy_egui::EguiPlugin; 19 + use bevy_inspector_egui::quick::WorldInspectorPlugin; 20 + 21 + fn main() -> AppExit { 22 + App::new().add_plugins(AppPlugin).run() 23 + } 24 + 25 + pub struct AppPlugin; 26 + 27 + impl Plugin for AppPlugin { 28 + fn build(&self, app: &mut App) { 29 + // Add Bevy plugins. 30 + app.add_plugins( 31 + DefaultPlugins 32 + .set(AssetPlugin { 33 + // Wasm builds will check for meta files (that don't exist) if this isn't set. 34 + // This causes errors and even panics on web build on itch. 35 + // See https://github.com/bevyengine/bevy_github_ci_template/issues/48. 36 + meta_check: AssetMetaCheck::Never, 37 + ..default() 38 + }) 39 + .set(WindowPlugin { 40 + primary_window: Window { 41 + title: "Parylord".to_string(), 42 + fit_canvas_to_parent: true, 43 + resolution: WindowResolution::new(1920.0, 1080.0), 44 + ..default() 45 + } 46 + .into(), 47 + ..default() 48 + }), 49 + ); 50 + 51 + // Add other plugins. 52 + app.add_plugins(( 53 + asset_tracking::plugin, 54 + audio::plugin, 55 + // demo::plugin, 56 + parylord::plugin, 57 + #[cfg(feature = "dev")] 58 + dev_tools::plugin, 59 + menus::plugin, 60 + screens::plugin, 61 + theme::plugin, 62 + )); 63 + 64 + app.add_plugins(EguiPlugin { 65 + enable_multipass_for_primary_context: true, 66 + }) 67 + .add_plugins(WorldInspectorPlugin::default()); 68 + 69 + // Order new `AppSystems` variants by adding them here: 70 + app.configure_sets( 71 + Update, 72 + ( 73 + AppSystems::TickTimers, 74 + AppSystems::RecordInput, 75 + AppSystems::Update, 76 + ) 77 + .chain(), 78 + ); 79 + 80 + // Set up the `Pause` state. 81 + app.init_state::<Pause>(); 82 + app.configure_sets(Update, PausableSystems.run_if(in_state(Pause(false)))); 83 + 84 + // Spawn the main camera. 85 + app.add_systems(Startup, spawn_camera); 86 + } 87 + } 88 + 89 + /// High-level groupings of systems for the app in the `Update` schedule. 90 + /// When adding a new variant, make sure to order it in the `configure_sets` 91 + /// call above. 92 + #[derive(SystemSet, Debug, Clone, Copy, Eq, PartialEq, Hash, PartialOrd, Ord)] 93 + enum AppSystems { 94 + /// Tick timers. 95 + TickTimers, 96 + /// Record player input. 97 + RecordInput, 98 + /// Do everything else (consider splitting this into further variants). 99 + Update, 100 + } 101 + 102 + /// Whether or not the game is paused. 103 + #[derive(States, Copy, Clone, Eq, PartialEq, Hash, Debug, Default)] 104 + #[states(scoped_entities)] 105 + struct Pause(pub bool); 106 + 107 + /// A system set for systems that shouldn't run while the game is paused. 108 + #[derive(SystemSet, Copy, Clone, Eq, PartialEq, Hash, Debug)] 109 + struct PausableSystems; 110 + 111 + fn spawn_camera(mut commands: Commands) { 112 + commands.spawn((Name::new("Camera"), Camera2d)); 113 + }
+113
src/menus/credits.rs
··· 1 + //! The credits menu. 2 + 3 + use bevy::{ 4 + ecs::spawn::SpawnIter, input::common_conditions::input_just_pressed, prelude::*, ui::Val::*, 5 + }; 6 + 7 + use crate::{asset_tracking::LoadResource, audio::music, menus::Menu, theme::prelude::*}; 8 + 9 + pub(super) fn plugin(app: &mut App) { 10 + app.add_systems(OnEnter(Menu::Credits), spawn_credits_menu); 11 + app.add_systems( 12 + Update, 13 + go_back.run_if(in_state(Menu::Credits).and(input_just_pressed(KeyCode::Escape))), 14 + ); 15 + 16 + app.register_type::<CreditsAssets>(); 17 + app.load_resource::<CreditsAssets>(); 18 + app.add_systems(OnEnter(Menu::Credits), start_credits_music); 19 + } 20 + 21 + fn spawn_credits_menu(mut commands: Commands) { 22 + commands.spawn(( 23 + widget::ui_root("Credits Menu"), 24 + GlobalZIndex(2), 25 + StateScoped(Menu::Credits), 26 + children![ 27 + widget::header("Created by"), 28 + created_by(), 29 + widget::header("Assets"), 30 + assets(), 31 + widget::button("Back", go_back_on_click), 32 + ], 33 + )); 34 + } 35 + 36 + fn created_by() -> impl Bundle { 37 + grid(vec![ 38 + ["Joe Shmoe", "Implemented alligator wrestling AI"], 39 + ["Jane Doe", "Made the music for the alien invasion"], 40 + ]) 41 + } 42 + 43 + fn assets() -> impl Bundle { 44 + grid(vec![ 45 + ["Ducky sprite", "CC0 by Caz Creates Games"], 46 + ["Button SFX", "CC0 by Jaszunio15"], 47 + ["Music", "CC BY 3.0 by Kevin MacLeod"], 48 + [ 49 + "Bevy logo", 50 + "All rights reserved by the Bevy Foundation, permission granted for splash screen use when unmodified", 51 + ], 52 + ]) 53 + } 54 + 55 + fn grid(content: Vec<[&'static str; 2]>) -> impl Bundle { 56 + ( 57 + Name::new("Grid"), 58 + Node { 59 + display: Display::Grid, 60 + row_gap: Px(10.0), 61 + column_gap: Px(30.0), 62 + grid_template_columns: RepeatedGridTrack::px(2, 400.0), 63 + ..default() 64 + }, 65 + Children::spawn(SpawnIter(content.into_iter().flatten().enumerate().map( 66 + |(i, text)| { 67 + ( 68 + widget::label(text), 69 + Node { 70 + justify_self: if i % 2 == 0 { 71 + JustifySelf::End 72 + } else { 73 + JustifySelf::Start 74 + }, 75 + ..default() 76 + }, 77 + ) 78 + }, 79 + ))), 80 + ) 81 + } 82 + 83 + fn go_back_on_click(_: Trigger<Pointer<Click>>, mut next_menu: ResMut<NextState<Menu>>) { 84 + next_menu.set(Menu::Main); 85 + } 86 + 87 + fn go_back(mut next_menu: ResMut<NextState<Menu>>) { 88 + next_menu.set(Menu::Main); 89 + } 90 + 91 + #[derive(Resource, Asset, Clone, Reflect)] 92 + #[reflect(Resource)] 93 + struct CreditsAssets { 94 + #[dependency] 95 + music: Handle<AudioSource>, 96 + } 97 + 98 + impl FromWorld for CreditsAssets { 99 + fn from_world(world: &mut World) -> Self { 100 + let assets = world.resource::<AssetServer>(); 101 + Self { 102 + music: assets.load("audio/music/Monkeys Spinning Monkeys.ogg"), 103 + } 104 + } 105 + } 106 + 107 + fn start_credits_music(mut commands: Commands, credits_music: Res<CreditsAssets>) { 108 + commands.spawn(( 109 + Name::new("Credits Music"), 110 + StateScoped(Menu::Credits), 111 + music(credits_music.music.clone()), 112 + )); 113 + }
+55
src/menus/main.rs
··· 1 + //! The main menu (seen on the title screen). 2 + 3 + use bevy::prelude::*; 4 + 5 + use crate::{asset_tracking::ResourceHandles, menus::Menu, screens::Screen, theme::widget}; 6 + 7 + pub(super) fn plugin(app: &mut App) { 8 + app.add_systems(OnEnter(Menu::Main), spawn_main_menu); 9 + } 10 + 11 + fn spawn_main_menu(mut commands: Commands) { 12 + commands.spawn(( 13 + widget::ui_root("Main Menu"), 14 + GlobalZIndex(2), 15 + StateScoped(Menu::Main), 16 + #[cfg(not(target_family = "wasm"))] 17 + children![ 18 + widget::button("Play", enter_loading_or_gameplay_screen), 19 + widget::button("Settings", open_settings_menu), 20 + widget::button("Credits", open_credits_menu), 21 + widget::button("Exit", exit_app), 22 + ], 23 + #[cfg(target_family = "wasm")] 24 + children![ 25 + widget::button("Play", enter_loading_or_gameplay_screen), 26 + widget::button("Settings", open_settings_menu), 27 + widget::button("Credits", open_credits_menu), 28 + ], 29 + )); 30 + } 31 + 32 + fn enter_loading_or_gameplay_screen( 33 + _: Trigger<Pointer<Click>>, 34 + resource_handles: Res<ResourceHandles>, 35 + mut next_screen: ResMut<NextState<Screen>>, 36 + ) { 37 + if resource_handles.is_all_done() { 38 + next_screen.set(Screen::Gameplay); 39 + } else { 40 + next_screen.set(Screen::Loading); 41 + } 42 + } 43 + 44 + fn open_settings_menu(_: Trigger<Pointer<Click>>, mut next_menu: ResMut<NextState<Menu>>) { 45 + next_menu.set(Menu::Settings); 46 + } 47 + 48 + fn open_credits_menu(_: Trigger<Pointer<Click>>, mut next_menu: ResMut<NextState<Menu>>) { 49 + next_menu.set(Menu::Credits); 50 + } 51 + 52 + #[cfg(not(target_family = "wasm"))] 53 + fn exit_app(_: Trigger<Pointer<Click>>, mut app_exit: EventWriter<AppExit>) { 54 + app_exit.write(AppExit::Success); 55 + }
+30
src/menus/mod.rs
··· 1 + //! The game's menus and transitions between them. 2 + 3 + mod credits; 4 + mod main; 5 + mod pause; 6 + mod settings; 7 + 8 + use bevy::prelude::*; 9 + 10 + pub(super) fn plugin(app: &mut App) { 11 + app.init_state::<Menu>(); 12 + 13 + app.add_plugins(( 14 + credits::plugin, 15 + main::plugin, 16 + settings::plugin, 17 + pause::plugin, 18 + )); 19 + } 20 + 21 + #[derive(States, Copy, Clone, Eq, PartialEq, Hash, Debug, Default)] 22 + #[states(scoped_entities)] 23 + pub enum Menu { 24 + #[default] 25 + None, 26 + Main, 27 + Credits, 28 + Settings, 29 + Pause, 30 + }
+43
src/menus/pause.rs
··· 1 + //! The pause menu. 2 + 3 + use bevy::{input::common_conditions::input_just_pressed, prelude::*}; 4 + 5 + use crate::{menus::Menu, screens::Screen, theme::widget}; 6 + 7 + pub(super) fn plugin(app: &mut App) { 8 + app.add_systems(OnEnter(Menu::Pause), spawn_pause_menu); 9 + app.add_systems( 10 + Update, 11 + go_back.run_if(in_state(Menu::Pause).and(input_just_pressed(KeyCode::Escape))), 12 + ); 13 + } 14 + 15 + fn spawn_pause_menu(mut commands: Commands) { 16 + commands.spawn(( 17 + widget::ui_root("Pause Menu"), 18 + GlobalZIndex(2), 19 + StateScoped(Menu::Pause), 20 + children![ 21 + widget::header("Game paused"), 22 + widget::button("Continue", close_menu), 23 + widget::button("Settings", open_settings_menu), 24 + widget::button("Quit to title", quit_to_title), 25 + ], 26 + )); 27 + } 28 + 29 + fn open_settings_menu(_: Trigger<Pointer<Click>>, mut next_menu: ResMut<NextState<Menu>>) { 30 + next_menu.set(Menu::Settings); 31 + } 32 + 33 + fn close_menu(_: Trigger<Pointer<Click>>, mut next_menu: ResMut<NextState<Menu>>) { 34 + next_menu.set(Menu::None); 35 + } 36 + 37 + fn quit_to_title(_: Trigger<Pointer<Click>>, mut next_screen: ResMut<NextState<Screen>>) { 38 + next_screen.set(Screen::Title); 39 + } 40 + 41 + fn go_back(mut next_menu: ResMut<NextState<Menu>>) { 42 + next_menu.set(Menu::None); 43 + }
+125
src/menus/settings.rs
··· 1 + //! The settings menu. 2 + //! 3 + //! Additional settings and accessibility options should go here. 4 + 5 + use bevy::{audio::Volume, input::common_conditions::input_just_pressed, prelude::*, ui::Val::*}; 6 + 7 + use crate::{menus::Menu, screens::Screen, theme::prelude::*}; 8 + 9 + pub(super) fn plugin(app: &mut App) { 10 + app.add_systems(OnEnter(Menu::Settings), spawn_settings_menu); 11 + app.add_systems( 12 + Update, 13 + go_back.run_if(in_state(Menu::Settings).and(input_just_pressed(KeyCode::Escape))), 14 + ); 15 + 16 + app.register_type::<GlobalVolumeLabel>(); 17 + app.add_systems( 18 + Update, 19 + update_global_volume_label.run_if(in_state(Menu::Settings)), 20 + ); 21 + } 22 + 23 + fn spawn_settings_menu(mut commands: Commands) { 24 + commands.spawn(( 25 + widget::ui_root("Settings Menu"), 26 + GlobalZIndex(2), 27 + StateScoped(Menu::Settings), 28 + children![ 29 + widget::header("Settings"), 30 + settings_grid(), 31 + widget::button("Back", go_back_on_click), 32 + ], 33 + )); 34 + } 35 + 36 + fn settings_grid() -> impl Bundle { 37 + ( 38 + Name::new("Settings Grid"), 39 + Node { 40 + display: Display::Grid, 41 + row_gap: Px(10.0), 42 + column_gap: Px(30.0), 43 + grid_template_columns: RepeatedGridTrack::px(2, 400.0), 44 + ..default() 45 + }, 46 + children![ 47 + ( 48 + widget::label("Master Volume"), 49 + Node { 50 + justify_self: JustifySelf::End, 51 + ..default() 52 + } 53 + ), 54 + global_volume_widget(), 55 + ], 56 + ) 57 + } 58 + 59 + fn global_volume_widget() -> impl Bundle { 60 + ( 61 + Name::new("Global Volume Widget"), 62 + Node { 63 + justify_self: JustifySelf::Start, 64 + ..default() 65 + }, 66 + children![ 67 + widget::button_small("-", lower_global_volume), 68 + ( 69 + Name::new("Current Volume"), 70 + Node { 71 + padding: UiRect::horizontal(Px(10.0)), 72 + justify_content: JustifyContent::Center, 73 + ..default() 74 + }, 75 + children![(widget::label(""), GlobalVolumeLabel)], 76 + ), 77 + widget::button_small("+", raise_global_volume), 78 + ], 79 + ) 80 + } 81 + 82 + const MIN_VOLUME: f32 = 0.0; 83 + const MAX_VOLUME: f32 = 3.0; 84 + 85 + fn lower_global_volume(_: Trigger<Pointer<Click>>, mut global_volume: ResMut<GlobalVolume>) { 86 + let linear = (global_volume.volume.to_linear() - 0.1).max(MIN_VOLUME); 87 + global_volume.volume = Volume::Linear(linear); 88 + } 89 + 90 + fn raise_global_volume(_: Trigger<Pointer<Click>>, mut global_volume: ResMut<GlobalVolume>) { 91 + let linear = (global_volume.volume.to_linear() + 0.1).min(MAX_VOLUME); 92 + global_volume.volume = Volume::Linear(linear); 93 + } 94 + 95 + #[derive(Component, Reflect)] 96 + #[reflect(Component)] 97 + struct GlobalVolumeLabel; 98 + 99 + fn update_global_volume_label( 100 + global_volume: Res<GlobalVolume>, 101 + mut label: Single<&mut Text, With<GlobalVolumeLabel>>, 102 + ) { 103 + let percent = 100.0 * global_volume.volume.to_linear(); 104 + label.0 = format!("{percent:3.0}%"); 105 + } 106 + 107 + fn go_back_on_click( 108 + _: Trigger<Pointer<Click>>, 109 + screen: Res<State<Screen>>, 110 + mut next_menu: ResMut<NextState<Menu>>, 111 + ) { 112 + next_menu.set(if screen.get() == &Screen::Title { 113 + Menu::Main 114 + } else { 115 + Menu::Pause 116 + }); 117 + } 118 + 119 + fn go_back(screen: Res<State<Screen>>, mut next_menu: ResMut<NextState<Menu>>) { 120 + next_menu.set(if screen.get() == &Screen::Title { 121 + Menu::Main 122 + } else { 123 + Menu::Pause 124 + }); 125 + }
+50
src/parylord/level.rs
··· 1 + use crate::asset_tracking::LoadResource; 2 + use crate::parylord::player::{player, PlayerAssets}; 3 + use crate::screens::Screen; 4 + use bevy::image::{ImageLoaderSettings, ImageSampler}; 5 + use bevy::prelude::*; 6 + 7 + pub(super) fn plugin(app: &mut App) { 8 + app.register_type::<LevelAssets>(); 9 + app.load_resource::<LevelAssets>(); 10 + } 11 + 12 + #[derive(Resource, Asset, Clone, Reflect)] 13 + #[reflect(Resource)] 14 + pub struct LevelAssets { 15 + #[dependency] 16 + bg: Handle<Image>, 17 + } 18 + 19 + impl FromWorld for LevelAssets { 20 + fn from_world(world: &mut World) -> Self { 21 + let assets = world.resource::<AssetServer>(); 22 + Self { 23 + bg: assets.load("images/bg.png"), 24 + } 25 + } 26 + } 27 + 28 + /// A system that spawns the main level. 29 + pub fn spawn_level( 30 + mut commands: Commands, 31 + level_assets: Res<LevelAssets>, 32 + player_assets: Res<PlayerAssets>, 33 + ) { 34 + commands.spawn(( 35 + Name::new("Level"), 36 + Transform::default(), 37 + Visibility::default(), 38 + StateScoped(Screen::Gameplay), 39 + children![ 40 + player(600.0, &player_assets), 41 + ( 42 + Sprite { 43 + image: level_assets.bg.clone(), 44 + ..default() 45 + }, 46 + Transform::from_xyz(0.0, 0.0, -1000.0) 47 + ) 48 + ], 49 + )); 50 + }
+8
src/parylord/mod.rs
··· 1 + use bevy::prelude::*; 2 + mod player; 3 + mod movement; 4 + pub(crate) mod level; 5 + 6 + pub(super) fn plugin(app: &mut App) { 7 + app.add_plugins((player::plugin, movement::plugin, level::plugin)); 8 + }
+82
src/parylord/movement.rs
··· 1 + //! Handle player input and translate it into movement through a character 2 + //! controller. A character controller is the collection of systems that govern 3 + //! the movement of characters. 4 + //! 5 + //! In our case, the character controller has the following logic: 6 + //! - Set [`MovementController`] intent based on directional keyboard input. 7 + //! This is done in the `player` module, as it is specific to the player 8 + //! character. 9 + //! - Apply movement based on [`MovementController`] intent and maximum speed. 10 + //! - Wrap the character within the window. 11 + //! 12 + //! Note that the implementation used here is limited for demonstration 13 + //! purposes. If you want to move the player in a smoother way, 14 + //! consider using a [fixed timestep](https://github.com/bevyengine/bevy/blob/main/examples/movement/physics_in_fixed_timestep.rs). 15 + 16 + use bevy::{prelude::*, window::PrimaryWindow}; 17 + 18 + use crate::{AppSystems, PausableSystems}; 19 + 20 + pub(super) fn plugin(app: &mut App) { 21 + app.register_type::<MovementController>(); 22 + app.register_type::<ScreenWrap>(); 23 + 24 + app.add_systems( 25 + Update, 26 + (apply_movement, apply_screen_wrap) 27 + .chain() 28 + .in_set(AppSystems::Update) 29 + .in_set(PausableSystems), 30 + ); 31 + } 32 + 33 + /// These are the movement parameters for our character controller. 34 + /// For now, this is only used for a single player, but it could power NPCs or 35 + /// other players as well. 36 + #[derive(Component, Reflect)] 37 + #[reflect(Component)] 38 + pub struct MovementController { 39 + /// The direction the character wants to move in. 40 + pub intent: Vec2, 41 + 42 + /// Maximum speed in world units per second. 43 + /// 1 world unit = 1 pixel when using the default 2D camera and no physics engine. 44 + pub max_speed: f32, 45 + } 46 + 47 + impl Default for MovementController { 48 + fn default() -> Self { 49 + Self { 50 + intent: Vec2::ZERO, 51 + // 400 pixels per second is a nice default, but we can still vary this per character. 52 + max_speed: 800.0, 53 + } 54 + } 55 + } 56 + 57 + fn apply_movement( 58 + time: Res<Time>, 59 + mut movement_query: Query<(&MovementController, &mut Transform)>, 60 + ) { 61 + for (controller, mut transform) in &mut movement_query { 62 + let velocity = controller.max_speed * controller.intent; 63 + transform.translation += velocity.extend(0.0) * time.delta_secs(); 64 + } 65 + } 66 + 67 + #[derive(Component, Reflect)] 68 + #[reflect(Component)] 69 + pub struct ScreenWrap; 70 + 71 + fn apply_screen_wrap( 72 + window: Single<&Window, With<PrimaryWindow>>, 73 + mut wrap_query: Query<&mut Transform, With<ScreenWrap>>, 74 + ) { 75 + let size = window.size() + 256.0; 76 + let half_size = size / 2.0; 77 + for mut transform in &mut wrap_query { 78 + let position = transform.translation.xy(); 79 + let wrapped = (position + half_size).rem_euclid(size) - half_size; 80 + transform.translation = wrapped.extend(transform.translation.z); 81 + } 82 + }
+196
src/parylord/player.rs
··· 1 + use crate::asset_tracking::LoadResource; 2 + use crate::parylord::movement::{MovementController, ScreenWrap}; 3 + use crate::screens::Screen; 4 + use crate::{AppSystems, PausableSystems}; 5 + use bevy::prelude::ops::asin; 6 + use bevy::prelude::*; 7 + use bevy::sprite::Anchor; 8 + use bevy::window::WindowResolution; 9 + pub(super) fn plugin(app: &mut App) { 10 + app.register_type::<Player>(); 11 + app.register_type::<AttackIndicator>(); 12 + 13 + app.register_type::<PlayerAssets>(); 14 + app.load_resource::<PlayerAssets>(); 15 + 16 + // Record directional input as movement controls. 17 + app.add_systems( 18 + Update, 19 + (record_player_directional_input, aim) 20 + .run_if(in_state(Screen::Gameplay)) 21 + .in_set(AppSystems::RecordInput) 22 + .in_set(PausableSystems), 23 + ); 24 + } 25 + 26 + #[derive(Component, Debug, Clone, Copy, PartialEq, Eq, Default, Reflect)] 27 + #[reflect(Component)] 28 + struct Player; 29 + 30 + #[derive(Component, Debug, Clone, Copy, PartialEq, Eq, Default, Reflect)] 31 + #[reflect(Component)] 32 + struct AttackIndicator; 33 + 34 + /// The player character. 35 + pub fn player( 36 + max_speed: f32, 37 + player_assets: &PlayerAssets, 38 + // texture_atlas_layouts: &mut Assets<TextureAtlasLayout>, 39 + ) -> impl Bundle { 40 + // A texture atlas is a way to split a single image into a grid of related images. 41 + // You can learn more in this example: https://github.com/bevyengine/bevy/blob/latest/examples/2d/texture_atlas.rs 42 + // let layout = TextureAtlasLayout::from_grid(UVec2::splat(32), 6, 2, Some(UVec2::splat(1)), None); 43 + // let texture_atlas_layout = texture_atlas_layouts.add(layout); 44 + // let player_animation = PlayerAnimation::new(); 45 + 46 + ( 47 + Name::new("Player"), 48 + Player, 49 + Sprite { 50 + image: player_assets.pink.clone(), 51 + // texture_atlas: Some(TextureAtlas { 52 + // layout: texture_atlas_layout, 53 + // index: player_animation.get_atlas_index(), 54 + // }), 55 + anchor: Anchor::Center, 56 + ..default() 57 + }, 58 + children![( 59 + Name::new("PlayerAttackIndicator"), 60 + Sprite { 61 + image: player_assets.attack_indicator.clone(), 62 + anchor: Anchor::CenterLeft, 63 + ..default() 64 + }, 65 + AttackIndicator, 66 + )], 67 + Transform::from_scale(Vec2::splat(0.5).extend(1.0)), 68 + MovementController { 69 + max_speed, 70 + ..default() 71 + }, 72 + ScreenWrap, 73 + ) 74 + } 75 + fn record_player_directional_input( 76 + input: Res<ButtonInput<KeyCode>>, 77 + mut controller_query: Query<&mut MovementController, With<Player>>, 78 + ) { 79 + // Collect directional input. 80 + let mut intent = Vec2::ZERO; 81 + if input.pressed(KeyCode::KeyW) || input.pressed(KeyCode::ArrowUp) { 82 + intent.y += 1.0; 83 + } 84 + if input.pressed(KeyCode::KeyS) || input.pressed(KeyCode::ArrowDown) { 85 + intent.y -= 1.0; 86 + } 87 + if input.pressed(KeyCode::KeyA) || input.pressed(KeyCode::ArrowLeft) { 88 + intent.x -= 1.0; 89 + } 90 + if input.pressed(KeyCode::KeyD) || input.pressed(KeyCode::ArrowRight) { 91 + intent.x += 1.0; 92 + } 93 + 94 + // Normalize intent so that diagonal movement is the same speed as horizontal / vertical. 95 + // This should be omitted if the input comes from an analog stick instead. 96 + let intent = intent.normalize_or_zero(); 97 + 98 + // Apply movement intent to controllers. 99 + for mut controller in &mut controller_query { 100 + controller.intent = intent; 101 + } 102 + } 103 + 104 + fn aim( 105 + window: Query<&Window>, 106 + mut attack_indicator: Query< 107 + (&mut Transform, &GlobalTransform), 108 + (With<AttackIndicator>, Without<Player>), 109 + >, 110 + camera: Single<(&Camera, &GlobalTransform)>, 111 + ) -> Result { 112 + let Ok(window) = window.single() else { 113 + return Ok(()); 114 + }; 115 + 116 + let Some(mouse) = window.cursor_position() else { 117 + return Ok(()); 118 + }; 119 + 120 + let (mut attack_indicator, gt) = attack_indicator.single_mut()?; 121 + let (camera, camera_transform) = *camera; 122 + 123 + let Ok(pos) = camera.viewport_to_world(camera_transform, mouse) else { 124 + return Ok(()); 125 + }; 126 + let pos = pos.origin.truncate(); 127 + 128 + let vec_to_mouse = (gt.translation() - pos.extend(gt.translation().z)).normalize_or_zero(); 129 + let alpha = asin(vec_to_mouse.y); 130 + let alpha = if pos.x < gt.translation().x { 131 + alpha 132 + } else { 133 + -alpha 134 + }; 135 + 136 + attack_indicator.rotation = Quat::from_axis_angle(attack_indicator.local_z().as_vec3(), alpha); 137 + 138 + if pos.x < gt.translation().x { 139 + attack_indicator.scale.x = -1.0; 140 + attack_indicator.scale.y = -1.0; 141 + attack_indicator.scale.z = -1.0; 142 + } else { 143 + attack_indicator.scale.x = 1.0; 144 + attack_indicator.scale.y = 1.0; 145 + attack_indicator.scale.z = 1.0; 146 + } 147 + 148 + Ok(()) 149 + } 150 + 151 + fn exponential_decay(a: Vec3, b: Vec3, decay: f32, delta: f32) -> Vec3 { 152 + b + (a - b) * f32::exp(-decay * delta) 153 + } 154 + 155 + fn window_to_game(coord: Vec3, window_resolution: WindowResolution) -> Vec3 { 156 + let x = window_resolution.width(); 157 + let y = window_resolution.height(); 158 + 159 + let xy = Vec2::new(x, y); 160 + 161 + let half_xy = xy / 2.0; 162 + 163 + let half_xy = half_xy.extend(coord.z); 164 + // 165 + // if debug { 166 + // log!(Level::Info, "half_xy: {half_xy:?}"); 167 + // } 168 + 169 + let a = coord - half_xy; 170 + 171 + // if debug { 172 + // log!(Level::Info, "coord - half_xy: {:?}", coord - half_xy); 173 + // } 174 + 175 + Vec3::new(a.x, a.y, a.z) 176 + } 177 + 178 + #[derive(Resource, Asset, Clone, Reflect)] 179 + #[reflect(Resource)] 180 + pub struct PlayerAssets { 181 + #[dependency] 182 + pink: Handle<Image>, 183 + #[dependency] 184 + attack_indicator: Handle<Image>, 185 + } 186 + 187 + impl FromWorld for PlayerAssets { 188 + fn from_world(world: &mut World) -> Self { 189 + let assets = world.resource::<AssetServer>(); 190 + Self { 191 + pink: assets.load("images/pink/front.png"), 192 + 193 + attack_indicator: assets.load("images/pink/attack_indicator.png"), 194 + } 195 + } 196 + }
+61
src/screens/gameplay.rs
··· 1 + //! The screen state for the main gameplay. 2 + 3 + use bevy::{input::common_conditions::input_just_pressed, prelude::*, ui::Val::*}; 4 + 5 + use crate::{Pause, parylord::level::spawn_level, menus::Menu, screens::Screen}; 6 + 7 + pub(super) fn plugin(app: &mut App) { 8 + app.add_systems(OnEnter(Screen::Gameplay), spawn_level); 9 + 10 + // Toggle pause on key press. 11 + app.add_systems( 12 + Update, 13 + ( 14 + (pause, spawn_pause_overlay, open_pause_menu).run_if( 15 + in_state(Screen::Gameplay) 16 + .and(in_state(Menu::None)) 17 + .and(input_just_pressed(KeyCode::KeyP).or(input_just_pressed(KeyCode::Escape))), 18 + ), 19 + close_menu.run_if( 20 + in_state(Screen::Gameplay) 21 + .and(not(in_state(Menu::None))) 22 + .and(input_just_pressed(KeyCode::KeyP)), 23 + ), 24 + ), 25 + ); 26 + app.add_systems(OnExit(Screen::Gameplay), (close_menu, unpause)); 27 + app.add_systems( 28 + OnEnter(Menu::None), 29 + unpause.run_if(in_state(Screen::Gameplay)), 30 + ); 31 + } 32 + 33 + fn unpause(mut next_pause: ResMut<NextState<Pause>>) { 34 + next_pause.set(Pause(false)); 35 + } 36 + 37 + fn pause(mut next_pause: ResMut<NextState<Pause>>) { 38 + next_pause.set(Pause(true)); 39 + } 40 + 41 + fn spawn_pause_overlay(mut commands: Commands) { 42 + commands.spawn(( 43 + Name::new("Pause Overlay"), 44 + Node { 45 + width: Percent(100.0), 46 + height: Percent(100.0), 47 + ..default() 48 + }, 49 + GlobalZIndex(1), 50 + BackgroundColor(Color::srgba(0.0, 0.0, 0.0, 0.8)), 51 + StateScoped(Pause(true)), 52 + )); 53 + } 54 + 55 + fn open_pause_menu(mut next_menu: ResMut<NextState<Menu>>) { 56 + next_menu.set(Menu::Pause); 57 + } 58 + 59 + fn close_menu(mut next_menu: ResMut<NextState<Menu>>) { 60 + next_menu.set(Menu::None); 61 + }
+31
src/screens/loading.rs
··· 1 + //! A loading screen during which game assets are loaded if necessary. 2 + //! This reduces stuttering, especially for audio on Wasm. 3 + 4 + use bevy::prelude::*; 5 + 6 + use crate::{asset_tracking::ResourceHandles, screens::Screen, theme::prelude::*}; 7 + 8 + pub(super) fn plugin(app: &mut App) { 9 + app.add_systems(OnEnter(Screen::Loading), spawn_loading_screen); 10 + 11 + app.add_systems( 12 + Update, 13 + enter_gameplay_screen.run_if(in_state(Screen::Loading).and(all_assets_loaded)), 14 + ); 15 + } 16 + 17 + fn spawn_loading_screen(mut commands: Commands) { 18 + commands.spawn(( 19 + widget::ui_root("Loading Screen"), 20 + StateScoped(Screen::Loading), 21 + children![widget::label("Loading...")], 22 + )); 23 + } 24 + 25 + fn enter_gameplay_screen(mut next_screen: ResMut<NextState<Screen>>) { 26 + next_screen.set(Screen::Gameplay); 27 + } 28 + 29 + fn all_assets_loaded(resource_handles: Res<ResourceHandles>) -> bool { 30 + resource_handles.is_all_done() 31 + }
+30
src/screens/mod.rs
··· 1 + //! The game's main screen states and transitions between them. 2 + 3 + mod gameplay; 4 + mod loading; 5 + mod splash; 6 + mod title; 7 + 8 + use bevy::prelude::*; 9 + 10 + pub(super) fn plugin(app: &mut App) { 11 + app.init_state::<Screen>(); 12 + 13 + app.add_plugins(( 14 + gameplay::plugin, 15 + loading::plugin, 16 + splash::plugin, 17 + title::plugin, 18 + )); 19 + } 20 + 21 + /// The game's main screen states. 22 + #[derive(States, Copy, Clone, Eq, PartialEq, Hash, Debug, Default)] 23 + #[states(scoped_entities)] 24 + pub enum Screen { 25 + #[default] 26 + Splash, 27 + Title, 28 + Loading, 29 + Gameplay, 30 + }
+146
src/screens/splash.rs
··· 1 + //! A splash screen that plays briefly at startup. 2 + 3 + use bevy::{ 4 + image::{ImageLoaderSettings, ImageSampler}, 5 + input::common_conditions::input_just_pressed, 6 + prelude::*, 7 + }; 8 + 9 + use crate::{AppSystems, screens::Screen, theme::prelude::*}; 10 + 11 + pub(super) fn plugin(app: &mut App) { 12 + // Spawn splash screen. 13 + app.insert_resource(ClearColor(SPLASH_BACKGROUND_COLOR)); 14 + app.add_systems(OnEnter(Screen::Splash), spawn_splash_screen); 15 + 16 + // Animate splash screen. 17 + app.add_systems( 18 + Update, 19 + ( 20 + tick_fade_in_out.in_set(AppSystems::TickTimers), 21 + apply_fade_in_out.in_set(AppSystems::Update), 22 + ) 23 + .run_if(in_state(Screen::Splash)), 24 + ); 25 + 26 + // Add splash timer. 27 + app.register_type::<SplashTimer>(); 28 + app.add_systems(OnEnter(Screen::Splash), insert_splash_timer); 29 + app.add_systems(OnExit(Screen::Splash), remove_splash_timer); 30 + app.add_systems( 31 + Update, 32 + ( 33 + tick_splash_timer.in_set(AppSystems::TickTimers), 34 + check_splash_timer.in_set(AppSystems::Update), 35 + ) 36 + .run_if(in_state(Screen::Splash)), 37 + ); 38 + 39 + // Exit the splash screen early if the player hits escape. 40 + app.add_systems( 41 + Update, 42 + enter_title_screen 43 + .run_if(input_just_pressed(KeyCode::Escape).and(in_state(Screen::Splash))), 44 + ); 45 + } 46 + 47 + const SPLASH_BACKGROUND_COLOR: Color = Color::srgb(0.157, 0.157, 0.157); 48 + const SPLASH_DURATION_SECS: f32 = 1.8; 49 + const SPLASH_FADE_DURATION_SECS: f32 = 0.6; 50 + 51 + fn spawn_splash_screen(mut commands: Commands, asset_server: Res<AssetServer>) { 52 + commands.spawn(( 53 + widget::ui_root("Splash Screen"), 54 + BackgroundColor(SPLASH_BACKGROUND_COLOR), 55 + StateScoped(Screen::Splash), 56 + children![( 57 + Name::new("Splash image"), 58 + Node { 59 + margin: UiRect::all(Val::Auto), 60 + width: Val::Percent(70.0), 61 + ..default() 62 + }, 63 + ImageNode::new(asset_server.load_with_settings( 64 + // This should be an embedded asset for instant loading, but that is 65 + // currently [broken on Windows Wasm builds](https://github.com/bevyengine/bevy/issues/14246). 66 + "images/splash.png", 67 + |settings: &mut ImageLoaderSettings| { 68 + // Make an exception for the splash image in case 69 + // `ImagePlugin::default_nearest()` is used for pixel art. 70 + settings.sampler = ImageSampler::linear(); 71 + }, 72 + )), 73 + ImageNodeFadeInOut { 74 + total_duration: SPLASH_DURATION_SECS, 75 + fade_duration: SPLASH_FADE_DURATION_SECS, 76 + t: 0.0, 77 + }, 78 + )], 79 + )); 80 + } 81 + 82 + #[derive(Component, Reflect)] 83 + #[reflect(Component)] 84 + struct ImageNodeFadeInOut { 85 + /// Total duration in seconds. 86 + total_duration: f32, 87 + /// Fade duration in seconds. 88 + fade_duration: f32, 89 + /// Current progress in seconds, between 0 and [`Self::total_duration`]. 90 + t: f32, 91 + } 92 + 93 + impl ImageNodeFadeInOut { 94 + fn alpha(&self) -> f32 { 95 + // Normalize by duration. 96 + let t = (self.t / self.total_duration).clamp(0.0, 1.0); 97 + let fade = self.fade_duration / self.total_duration; 98 + 99 + // Regular trapezoid-shaped graph, flat at the top with alpha = 1.0. 100 + ((1.0 - (2.0 * t - 1.0).abs()) / fade).min(1.0) 101 + } 102 + } 103 + 104 + fn tick_fade_in_out(time: Res<Time>, mut animation_query: Query<&mut ImageNodeFadeInOut>) { 105 + for mut anim in &mut animation_query { 106 + anim.t += time.delta_secs(); 107 + } 108 + } 109 + 110 + fn apply_fade_in_out(mut animation_query: Query<(&ImageNodeFadeInOut, &mut ImageNode)>) { 111 + for (anim, mut image) in &mut animation_query { 112 + image.color.set_alpha(anim.alpha()) 113 + } 114 + } 115 + 116 + #[derive(Resource, Debug, Clone, PartialEq, Reflect)] 117 + #[reflect(Resource)] 118 + struct SplashTimer(Timer); 119 + 120 + impl Default for SplashTimer { 121 + fn default() -> Self { 122 + Self(Timer::from_seconds(SPLASH_DURATION_SECS, TimerMode::Once)) 123 + } 124 + } 125 + 126 + fn insert_splash_timer(mut commands: Commands) { 127 + commands.init_resource::<SplashTimer>(); 128 + } 129 + 130 + fn remove_splash_timer(mut commands: Commands) { 131 + commands.remove_resource::<SplashTimer>(); 132 + } 133 + 134 + fn tick_splash_timer(time: Res<Time>, mut timer: ResMut<SplashTimer>) { 135 + timer.0.tick(time.delta()); 136 + } 137 + 138 + fn check_splash_timer(timer: ResMut<SplashTimer>, mut next_screen: ResMut<NextState<Screen>>) { 139 + if timer.0.just_finished() { 140 + next_screen.set(Screen::Title); 141 + } 142 + } 143 + 144 + fn enter_title_screen(mut next_screen: ResMut<NextState<Screen>>) { 145 + next_screen.set(Screen::Title); 146 + }
+18
src/screens/title.rs
··· 1 + //! The title screen that appears after the splash screen. 2 + 3 + use bevy::prelude::*; 4 + 5 + use crate::{menus::Menu, screens::Screen}; 6 + 7 + pub(super) fn plugin(app: &mut App) { 8 + app.add_systems(OnEnter(Screen::Title), open_main_menu); 9 + app.add_systems(OnExit(Screen::Title), close_menu); 10 + } 11 + 12 + fn open_main_menu(mut next_menu: ResMut<NextState<Menu>>) { 13 + next_menu.set(Menu::Main); 14 + } 15 + 16 + fn close_menu(mut next_menu: ResMut<NextState<Menu>>) { 17 + next_menu.set(Menu::None); 18 + }
+89
src/theme/interaction.rs
··· 1 + use bevy::prelude::*; 2 + 3 + use crate::{asset_tracking::LoadResource, audio::sound_effect}; 4 + 5 + pub(super) fn plugin(app: &mut App) { 6 + app.register_type::<InteractionPalette>(); 7 + app.add_systems(Update, apply_interaction_palette); 8 + 9 + app.register_type::<InteractionAssets>(); 10 + app.load_resource::<InteractionAssets>(); 11 + app.add_observer(play_on_hover_sound_effect); 12 + app.add_observer(play_on_click_sound_effect); 13 + } 14 + 15 + /// Palette for widget interactions. Add this to an entity that supports 16 + /// [`Interaction`]s, such as a button, to change its [`BackgroundColor`] based 17 + /// on the current interaction state. 18 + #[derive(Component, Debug, Reflect)] 19 + #[reflect(Component)] 20 + pub struct InteractionPalette { 21 + pub none: Color, 22 + pub hovered: Color, 23 + pub pressed: Color, 24 + } 25 + 26 + fn apply_interaction_palette( 27 + mut palette_query: Query< 28 + (&Interaction, &InteractionPalette, &mut BackgroundColor), 29 + Changed<Interaction>, 30 + >, 31 + ) { 32 + for (interaction, palette, mut background) in &mut palette_query { 33 + *background = match interaction { 34 + Interaction::None => palette.none, 35 + Interaction::Hovered => palette.hovered, 36 + Interaction::Pressed => palette.pressed, 37 + } 38 + .into(); 39 + } 40 + } 41 + 42 + #[derive(Resource, Asset, Clone, Reflect)] 43 + #[reflect(Resource)] 44 + struct InteractionAssets { 45 + #[dependency] 46 + hover: Handle<AudioSource>, 47 + #[dependency] 48 + click: Handle<AudioSource>, 49 + } 50 + 51 + impl FromWorld for InteractionAssets { 52 + fn from_world(world: &mut World) -> Self { 53 + let assets = world.resource::<AssetServer>(); 54 + Self { 55 + hover: assets.load("audio/sound_effects/button_hover.ogg"), 56 + click: assets.load("audio/sound_effects/button_click.ogg"), 57 + } 58 + } 59 + } 60 + 61 + fn play_on_hover_sound_effect( 62 + trigger: Trigger<Pointer<Over>>, 63 + mut commands: Commands, 64 + interaction_assets: Option<Res<InteractionAssets>>, 65 + interaction_query: Query<(), With<Interaction>>, 66 + ) { 67 + let Some(interaction_assets) = interaction_assets else { 68 + return; 69 + }; 70 + 71 + if interaction_query.contains(trigger.target()) { 72 + commands.spawn(sound_effect(interaction_assets.hover.clone())); 73 + } 74 + } 75 + 76 + fn play_on_click_sound_effect( 77 + trigger: Trigger<Pointer<Click>>, 78 + mut commands: Commands, 79 + interaction_assets: Option<Res<InteractionAssets>>, 80 + interaction_query: Query<(), With<Interaction>>, 81 + ) { 82 + let Some(interaction_assets) = interaction_assets else { 83 + return; 84 + }; 85 + 86 + if interaction_query.contains(trigger.target()) { 87 + commands.spawn(sound_effect(interaction_assets.click.clone())); 88 + } 89 + }
+19
src/theme/mod.rs
··· 1 + //! Reusable UI widgets & theming. 2 + 3 + // Unused utilities may trigger this lints undesirably. 4 + #![allow(dead_code)] 5 + 6 + pub mod interaction; 7 + pub mod palette; 8 + pub mod widget; 9 + 10 + #[allow(unused_imports)] 11 + pub mod prelude { 12 + pub use super::{interaction::InteractionPalette, palette as ui_palette, widget}; 13 + } 14 + 15 + use bevy::prelude::*; 16 + 17 + pub(super) fn plugin(app: &mut App) { 18 + app.add_plugins(interaction::plugin); 19 + }
+16
src/theme/palette.rs
··· 1 + use bevy::prelude::*; 2 + 3 + /// #ddd369 4 + pub const LABEL_TEXT: Color = Color::srgb(0.867, 0.827, 0.412); 5 + 6 + /// #fcfbcc 7 + pub const HEADER_TEXT: Color = Color::srgb(0.988, 0.984, 0.800); 8 + 9 + /// #ececec 10 + pub const BUTTON_TEXT: Color = Color::srgb(0.925, 0.925, 0.925); 11 + /// #4666bf 12 + pub const BUTTON_BACKGROUND: Color = Color::srgb(0.275, 0.400, 0.750); 13 + /// #6299d1 14 + pub const BUTTON_HOVERED_BACKGROUND: Color = Color::srgb(0.384, 0.600, 0.820); 15 + /// #3d4999 16 + pub const BUTTON_PRESSED_BACKGROUND: Color = Color::srgb(0.239, 0.286, 0.600);
+135
src/theme/widget.rs
··· 1 + //! Helper functions for creating common widgets. 2 + 3 + use std::borrow::Cow; 4 + 5 + use bevy::{ 6 + ecs::{spawn::SpawnWith, system::IntoObserverSystem}, 7 + prelude::*, 8 + ui::Val::*, 9 + }; 10 + 11 + use crate::theme::{interaction::InteractionPalette, palette::*}; 12 + 13 + /// A root UI node that fills the window and centers its content. 14 + pub fn ui_root(name: impl Into<Cow<'static, str>>) -> impl Bundle { 15 + ( 16 + Name::new(name), 17 + Node { 18 + position_type: PositionType::Absolute, 19 + width: Percent(100.0), 20 + height: Percent(100.0), 21 + align_items: AlignItems::Center, 22 + justify_content: JustifyContent::Center, 23 + flex_direction: FlexDirection::Column, 24 + row_gap: Px(20.0), 25 + ..default() 26 + }, 27 + // Don't block picking events for other UI roots. 28 + Pickable::IGNORE, 29 + ) 30 + } 31 + 32 + /// A simple header label. Bigger than [`label`]. 33 + pub fn header(text: impl Into<String>) -> impl Bundle { 34 + ( 35 + Name::new("Header"), 36 + Text(text.into()), 37 + TextFont::from_font_size(40.0), 38 + TextColor(HEADER_TEXT), 39 + ) 40 + } 41 + 42 + /// A simple text label. 43 + pub fn label(text: impl Into<String>) -> impl Bundle { 44 + ( 45 + Name::new("Label"), 46 + Text(text.into()), 47 + TextFont::from_font_size(24.0), 48 + TextColor(LABEL_TEXT), 49 + ) 50 + } 51 + 52 + /// A large rounded button with text and an action defined as an [`Observer`]. 53 + pub fn button<E, B, M, I>(text: impl Into<String>, action: I) -> impl Bundle 54 + where 55 + E: Event, 56 + B: Bundle, 57 + I: IntoObserverSystem<E, B, M>, 58 + { 59 + button_base( 60 + text, 61 + action, 62 + ( 63 + Node { 64 + width: Px(380.0), 65 + height: Px(80.0), 66 + align_items: AlignItems::Center, 67 + justify_content: JustifyContent::Center, 68 + ..default() 69 + }, 70 + BorderRadius::MAX, 71 + ), 72 + ) 73 + } 74 + 75 + /// A small square button with text and an action defined as an [`Observer`]. 76 + pub fn button_small<E, B, M, I>(text: impl Into<String>, action: I) -> impl Bundle 77 + where 78 + E: Event, 79 + B: Bundle, 80 + I: IntoObserverSystem<E, B, M>, 81 + { 82 + button_base( 83 + text, 84 + action, 85 + Node { 86 + width: Px(30.0), 87 + height: Px(30.0), 88 + align_items: AlignItems::Center, 89 + justify_content: JustifyContent::Center, 90 + ..default() 91 + }, 92 + ) 93 + } 94 + 95 + /// A simple button with text and an action defined as an [`Observer`]. The button's layout is provided by `button_bundle`. 96 + fn button_base<E, B, M, I>( 97 + text: impl Into<String>, 98 + action: I, 99 + button_bundle: impl Bundle, 100 + ) -> impl Bundle 101 + where 102 + E: Event, 103 + B: Bundle, 104 + I: IntoObserverSystem<E, B, M>, 105 + { 106 + let text = text.into(); 107 + let action = IntoObserverSystem::into_system(action); 108 + ( 109 + Name::new("Button"), 110 + Node::default(), 111 + Children::spawn(SpawnWith(|parent: &mut ChildSpawner| { 112 + parent 113 + .spawn(( 114 + Name::new("Button Inner"), 115 + Button, 116 + BackgroundColor(BUTTON_BACKGROUND), 117 + InteractionPalette { 118 + none: BUTTON_BACKGROUND, 119 + hovered: BUTTON_HOVERED_BACKGROUND, 120 + pressed: BUTTON_PRESSED_BACKGROUND, 121 + }, 122 + children![( 123 + Name::new("Button Text"), 124 + Text(text), 125 + TextFont::from_font_size(40.0), 126 + TextColor(BUTTON_TEXT), 127 + // Don't bubble picking events from the text up to the button. 128 + Pickable::IGNORE, 129 + )], 130 + )) 131 + .insert(button_bundle) 132 + .observe(action); 133 + })), 134 + ) 135 + }