[INFO] cloning repository https://github.com/j-lthr/boatygamegame
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/j-lthr/boatygamegame" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fj-lthr%2Fboatygamegame", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fj-lthr%2Fboatygamegame'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 041ad077bbee2fdc65a12d6394765018e02eabf0
[INFO] checking j-lthr/boatygamegame against try#7dabc88a3b6768751847baeb49983f31ac5f20e2 for pr-155945
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fj-lthr%2Fboatygamegame" "/workspace/builds/worker-1-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/j-lthr/boatygamegame
[INFO] finished tweaking git repo https://github.com/j-lthr/boatygamegame
[INFO] tweaked toml for git repo https://github.com/j-lthr/boatygamegame written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/j-lthr/boatygamegame on toolchain 7dabc88a3b6768751847baeb49983f31ac5f20e2
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+7dabc88a3b6768751847baeb49983f31ac5f20e2" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/j-lthr/boatygamegame already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+7dabc88a3b6768751847baeb49983f31ac5f20e2" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+7dabc88a3b6768751847baeb49983f31ac5f20e2" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] e8e8b80af605510e6f43999732f19e0b58fc485c44c1042c129416946c947a7d
[INFO] running `Command { std: "docker" "start" "-a" "e8e8b80af605510e6f43999732f19e0b58fc485c44c1042c129416946c947a7d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e8e8b80af605510e6f43999732f19e0b58fc485c44c1042c129416946c947a7d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e8e8b80af605510e6f43999732f19e0b58fc485c44c1042c129416946c947a7d", kill_on_drop: false }`
[INFO] [stdout] e8e8b80af605510e6f43999732f19e0b58fc485c44c1042c129416946c947a7d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+7dabc88a3b6768751847baeb49983f31ac5f20e2" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] e31c3c888e40adfc5d382bb21164f81797273a00cabb24be4f37253a0d98e1ce
[INFO] running `Command { std: "docker" "start" "-a" "e31c3c888e40adfc5d382bb21164f81797273a00cabb24be4f37253a0d98e1ce", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.101
[INFO] [stderr]    Compiling lock_api v0.4.12
[INFO] [stderr]    Compiling libc v0.2.172
[INFO] [stderr]     Checking foldhash v0.1.5
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling smallvec v1.15.0
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]    Compiling typeid v1.0.3
[INFO] [stderr]     Checking thread_local v1.1.8
[INFO] [stderr]     Checking disqualified v1.0.0
[INFO] [stderr]     Checking bevy_ptr v0.16.0
[INFO] [stderr]     Checking downcast-rs v2.0.1
[INFO] [stderr]    Compiling nix v0.30.1
[INFO] [stderr]     Checking crossbeam-queue v0.3.12
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]     Checking bumpalo v3.17.0
[INFO] [stderr]     Checking tracing-core v0.1.33
[INFO] [stderr]     Checking aho-corasick v1.1.3
[INFO] [stderr]     Checking libloading v0.8.8
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]    Compiling parking_lot_core v0.9.10
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]     Checking tinyvec v1.9.0
[INFO] [stderr]    Compiling uuid v1.17.0
[INFO] [stderr]     Checking rand_distr v0.4.3
[INFO] [stderr]    Compiling blake3 v1.8.2
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]    Compiling naga v24.0.0
[INFO] [stderr]     Checking const_panic v0.2.12
[INFO] [stderr]     Checking atomicow v1.1.0
[INFO] [stderr]     Checking stackfuture v0.3.0
[INFO] [stderr]     Checking ordered-float v4.6.0
[INFO] [stderr]     Checking euclid v0.22.11
[INFO] [stderr]    Compiling wgpu-hal v24.0.4
[INFO] [stderr]     Checking svg_fmt v0.4.5
[INFO] [stderr]     Checking regex-automata v0.4.9
[INFO] [stderr]     Checking twox-hash v2.1.0
[INFO] [stderr]     Checking ruzstd v0.8.1
[INFO] [stderr]     Checking khronos-egl v6.0.0
[INFO] [stderr]     Checking ash v0.38.0+1.3.281
[INFO] [stderr]    Compiling wgpu-core v24.0.5
[INFO] [stderr]    Compiling wgpu v24.0.5
[INFO] [stderr]     Checking bit-vec v0.6.3
[INFO] [stderr]     Checking sysinfo v0.34.2
[INFO] [stderr]     Checking guillotiere v0.6.2
[INFO] [stderr]     Checking bit-set v0.5.3
[INFO] [stderr]     Checking data-encoding v2.9.0
[INFO] [stderr]     Checking offset-allocator v0.2.0
[INFO] [stderr]    Compiling proc-macro-hack v0.5.20+deprecated
[INFO] [stderr]    Compiling rustix v1.0.7
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]     Checking linux-raw-sys v0.9.4
[INFO] [stderr]    Compiling libudev-sys v0.1.4
[INFO] [stderr]    Compiling serde_json v1.0.140
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]     Checking dlib v0.5.2
[INFO] [stderr]     Checking inotify-sys v0.1.5
[INFO] [stderr]    Compiling winit v0.30.11
[INFO] [stderr]     Checking accesskit v0.18.0
[INFO] [stderr]     Checking fontdb v0.16.2
[INFO] [stderr]     Checking x11-dl v2.21.0
[INFO] [stderr]    Compiling gilrs v0.11.0
[INFO] [stderr]     Checking unicode-bidi v0.3.18
[INFO] [stderr]     Checking cursor-icon v1.2.0
[INFO] [stderr]     Checking dpi v0.1.2
[INFO] [stderr]     Checking regex v1.11.1
[INFO] [stderr]     Checking lewton v0.10.2
[INFO] [stderr]     Checking grid v0.15.0
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]     Checking taffy v0.7.7
[INFO] [stderr]    Compiling matrixmultiply v0.3.10
[INFO] [stderr]    Compiling heapless v0.8.0
[INFO] [stderr]    Compiling regex-syntax v0.8.5
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling bstr v1.12.0
[INFO] [stderr]    Compiling bevy_macro_utils v0.16.0
[INFO] [stderr]    Compiling encase_derive_impl v0.10.0
[INFO] [stderr]     Checking type-map v0.5.1
[INFO] [stderr]     Checking hash32 v0.3.1
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking stable_deref_trait v1.2.0
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]     Checking rawpointer v0.2.1
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]     Checking self_cell v0.10.3
[INFO] [stderr]    Compiling proc-macro-error-attr2 v2.0.0
[INFO] [stderr]     Checking robust v1.2.0
[INFO] [stderr]    Compiling flume v0.11.1
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling bytemuck_derive v1.9.3
[INFO] [stderr]    Compiling thiserror-impl v2.0.12
[INFO] [stderr]    Compiling derive_more-impl v1.0.0
[INFO] [stderr]    Compiling variadics_please v1.1.0
[INFO] [stderr]    Compiling assert_type_match v0.1.1
[INFO] [stderr]    Compiling bevy_reflect_derive v0.16.0
[INFO] [stderr]    Compiling bevy_ecs_macros v0.16.0
[INFO] [stderr]     Checking thiserror v2.0.12
[INFO] [stderr]    Compiling bevy_derive v0.16.0
[INFO] [stderr]     Checking bytemuck v1.23.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling tracing-attributes v0.1.28
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling encase_derive v0.10.0
[INFO] [stderr]    Compiling bevy_asset_macros v0.16.0
[INFO] [stderr]     Checking image v0.25.6
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]     Checking tracing-subscriber v0.3.19
[INFO] [stderr]    Compiling bevy_encase_derive v0.16.0
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling bevy_render_macros v0.16.0
[INFO] [stderr]     Checking serde v1.0.219
[INFO] [stderr]     Checking derive_more v1.0.0
[INFO] [stderr]     Checking font-types v0.9.0
[INFO] [stderr]    Compiling tinystr v0.8.1
[INFO] [stderr]     Checking read-fonts v0.29.2
[INFO] [stderr]    Compiling unic-langid-impl v0.9.6
[INFO] [stderr]     Checking symphonia-core v0.5.4
[INFO] [stderr]    Compiling unic-langid-macros-impl v0.9.6
[INFO] [stderr]    Compiling gltf-derive v1.4.1
[INFO] [stderr]    Compiling bevy_gizmos_macros v0.16.0
[INFO] [stderr]     Checking unic-langid-macros v0.9.6
[INFO] [stderr]    Compiling bevy_state_macros v0.16.0
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]     Checking safe_arch v0.7.4
[INFO] [stderr]     Checking unic-langid v0.9.6
[INFO] [stderr]     Checking intl_pluralrules v7.0.2
[INFO] [stderr]     Checking intl-memoizer v0.5.3
[INFO] [stderr]     Checking fluent-langneg v0.13.0
[INFO] [stderr]     Checking fluent-syntax v0.11.1
[INFO] [stderr]    Compiling globset v0.4.16
[INFO] [stderr]     Checking wide v0.7.33
[INFO] [stderr]    Compiling nalgebra-macros v0.2.2
[INFO] [stderr]     Checking symphonia-metadata v0.5.4
[INFO] [stderr]     Checking fluent-bundle v0.15.3
[INFO] [stderr]     Checking symphonia-bundle-mp3 v0.5.4
[INFO] [stderr]    Compiling ignore v0.4.23
[INFO] [stderr]    Compiling proc-macro-error2 v2.0.1
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]     Checking rstar v0.12.2
[INFO] [stderr]     Checking symphonia v0.5.4
[INFO] [stderr]     Checking rayon v1.10.0
[INFO] [stderr]     Checking bitflags v2.9.1
[INFO] [stderr]     Checking hashbrown v0.15.3
[INFO] [stderr]     Checking glam v0.29.3
[INFO] [stderr]     Checking smol_str v0.2.2
[INFO] [stderr]     Checking erased-serde v0.4.6
[INFO] [stderr]     Checking wgpu-types v24.0.0
[INFO] [stderr]     Checking indexmap v2.9.0
[INFO] [stderr]     Checking bevy_platform v0.16.0
[INFO] [stderr]     Checking bevy_utils v0.16.0
[INFO] [stderr]     Checking bevy_tasks v0.16.0
[INFO] [stderr]     Checking petgraph v0.7.1
[INFO] [stderr]     Checking spirv v0.3.0+sdk-1.3.268.0
[INFO] [stderr]     Checking ron v0.8.1
[INFO] [stderr]     Checking gpu-alloc-types v0.3.0
[INFO] [stderr]     Checking gpu-descriptor-types v0.2.0
[INFO] [stderr]     Checking ctrlc v3.4.7
[INFO] [stderr]     Checking gpu-descriptor v0.3.2
[INFO] [stderr]     Checking gpu-alloc v0.6.0
[INFO] [stderr]     Checking nix v0.29.0
[INFO] [stderr]     Checking skrifa v0.31.3
[INFO] [stderr]     Checking inotify v0.11.0
[INFO] [stderr]     Checking xkbcommon-dl v0.4.2
[INFO] [stderr]     Checking alsa v0.9.1
[INFO] [stderr]     Checking rustybuzz v0.14.1
[INFO] [stderr]     Checking cpal v0.15.3
[INFO] [stderr]     Checking gilrs-core v0.6.4
[INFO] [stderr]     Checking gltf-json v1.4.1
[INFO] [stderr]     Checking swash v0.2.5
[INFO] [stderr]     Checking rodio v0.20.1
[INFO] [stderr]     Checking simba v0.9.0
[INFO] [stderr]     Checking polling v3.8.0
[INFO] [stderr]     Checking spade v2.14.0
[INFO] [stderr]     Checking bevy_reflect v0.16.0
[INFO] [stderr]     Checking encase v0.10.0
[INFO] [stderr]     Checking bevy_mikktspace v0.16.0
[INFO] [stderr]     Checking hexasphere v15.1.0
[INFO] [stderr]     Checking ena v0.14.3
[INFO] [stderr]     Checking downcast-rs v1.2.1
[INFO] [stderr]     Checking calloop v0.13.0
[INFO] [stderr]     Checking x11rb v0.13.1
[INFO] [stderr]    Compiling fluent-template-macros v0.11.0
[INFO] [stderr]     Checking tobj v4.0.3
[INFO] [stderr]    Compiling avian_derive v0.2.2
[INFO] [stderr]     Checking gltf v1.4.1
[INFO] [stderr]     Checking itertools v0.13.0
[INFO] [stderr]     Checking cosmic-text v0.13.2
[INFO] [stderr]     Checking rand_xorshift v0.3.0
[INFO] [stderr]     Checking noise v0.9.0
[INFO] [stderr]     Checking fluent-templates v0.11.0
[INFO] [stderr]     Checking naga_oil v0.17.1
[INFO] [stderr]     Checking fluent v0.16.1
[INFO] [stderr]     Checking nalgebra v0.33.2
[INFO] [stderr]     Checking accesskit_winit v0.25.0
[INFO] [stderr]     Checking bevy_ecs v0.16.0
[INFO] [stderr]     Checking bevy_math v0.16.0
[INFO] [stderr]     Checking parry3d v0.17.6
[INFO] [stderr]     Checking bevy_color v0.16.1
[INFO] [stderr]     Checking bevy_heavy v0.2.0
[INFO] [stderr]     Checking bevy_app v0.16.0
[INFO] [stderr]     Checking bevy_log v0.16.0
[INFO] [stderr]     Checking bevy_input v0.16.0
[INFO] [stderr]     Checking bevy_asset v0.16.0
[INFO] [stderr]     Checking bevy_time v0.16.0
[INFO] [stderr]     Checking bevy_a11y v0.16.0
[INFO] [stderr]     Checking bevy_state v0.16.0
[INFO] [stderr]     Checking bevy_transform v0.16.0
[INFO] [stderr]     Checking bevy_diagnostic v0.16.0
[INFO] [stderr]     Checking bevy_window v0.16.0
[INFO] [stderr]     Checking bevy_gilrs v0.16.0
[INFO] [stderr]     Checking bevy_image v0.16.0
[INFO] [stderr]     Checking bevy_audio v0.16.0
[INFO] [stderr]     Checking bevy_input_focus v0.16.0
[INFO] [stderr]     Checking bevy_mesh v0.16.0
[INFO] [stderr]     Checking bevy_winit v0.16.0
[INFO] [stderr]     Checking bevy_render v0.16.0
[INFO] [stderr]     Checking bevy_core_pipeline v0.16.0
[INFO] [stderr]     Checking bevy_picking v0.16.0
[INFO] [stderr]     Checking bevy_animation v0.16.0
[INFO] [stderr]     Checking bevy_scene v0.16.0
[INFO] [stderr]     Checking bevy_sprite v0.16.0
[INFO] [stderr]     Checking bevy_pbr v0.16.0
[INFO] [stderr]     Checking bevy_text v0.16.0
[INFO] [stderr]     Checking bevy_ui v0.16.0
[INFO] [stderr]     Checking bevy_gltf v0.16.0
[INFO] [stderr]     Checking bevy_gizmos v0.16.0
[INFO] [stderr]     Checking bevy_internal v0.16.0
[INFO] [stderr]     Checking bevy v0.16.0
[INFO] [stderr]     Checking bevy_transform_interpolation v0.2.0
[INFO] [stderr]     Checking bevy_obj v0.16.1
[INFO] [stderr]     Checking avian3d v0.3.1
[INFO] [stderr]     Checking boatygame-game v0.1.4 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `crate::modifiers::*`
[INFO] [stdout]  --> src/ability/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::modifiers::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/ability/mod.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::projectile::InitialVelocity`
[INFO] [stdout]  --> src/ability/components/common.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use super::projectile::InitialVelocity;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `avian3d::prelude::*`
[INFO] [stdout]  --> src/ability/components/dash.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use avian3d::prelude::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DynamicTarget`
[INFO] [stdout]  --> src/ability/components/projectile.rs:4:42
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::ability::components::common::{DynamicTarget, Lifetime};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OnCollision`
[INFO] [stdout]  --> src/ability/components/projectile.rs:5:59
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::ability::components::events::{OnActiveDespawn, OnCollision};
[INFO] [stdout]   |                                                           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/common.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `avian3d::dynamics::solver::xpbd::PositionConstraint`
[INFO] [stdout]  --> src/enemy/spawn.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use avian3d::dynamics::solver::xpbd::PositionConstraint;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::CastConfig`
[INFO] [stdout]  --> src/enemy/enemies.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::ability::CastConfig;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::blast::BlastBundle`
[INFO] [stdout]  --> src/enemy/enemies.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::ability::components::blast::BlastBundle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::common::Lifetime`
[INFO] [stdout]  --> src/enemy/enemies.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::ability::components::common::Lifetime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DamageOnCollision`, `DespawnOnCollision`, and `InitialVelocity`
[INFO] [stdout]   --> src/enemy/enemies.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     DamageOnCollision, DespawnOnCollision, InitialVelocity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RandomSpawnOffset` and `SpawnEnemyAtCastPosition`
[INFO] [stdout]   --> src/enemy/enemies.rs:15:26
[INFO] [stdout]    |
[INFO] [stdout] 15 |     RadialSubCastOffset, RandomSpawnOffset, SpawnEnemyAtCastPosition,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::visual::LifetimeFadeout`
[INFO] [stdout]   --> src/enemy/enemies.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::ability::components::visual::LifetimeFadeout;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::blast::BlastBundle`
[INFO] [stdout]  --> src/player.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::ability::components::blast::BlastBundle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DynamicTarget`, `Lifetime`, and `SelectNearestTargetOnSpawn`
[INFO] [stdout]  --> src/player.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 |     DynamicTarget, Lifetime, LifetimeFromCursor, SelectNearestTargetOnSpawn,
[INFO] [stdout]   |     ^^^^^^^^^^^^^  ^^^^^^^^                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DamageOnCollision`, `DespawnOnCollision`, and `Homing`
[INFO] [stdout]  --> src/player.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 |     BasicProjectileBundle, DamageOnCollision, DespawnOnCollision, Homing, InitialVelocity,
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RadialSubCastOffset` and `RandomSpawnOffset`
[INFO] [stdout]  --> src/player.rs:9:41
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::ability::components::spawn::{RadialSubCastOffset, RandomSpawnOffset};
[INFO] [stdout]   |                                         ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CastOnDespawn` and `TimedSubCast`
[INFO] [stdout]   --> src/player.rs:10:43
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::ability::components::subcast::{CastOnDespawn, SubCastOnce, TimedSubCast};
[INFO] [stdout]    |                                           ^^^^^^^^^^^^^               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CastConfig`
[INFO] [stdout]   --> src/player.rs:14:22
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::ability::{CastConfig, DynamicAbility};
[INFO] [stdout]    |                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Collider`
[INFO] [stdout]   --> src/player.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Collider, ColliderConstructor, CollisionEventsEnabled, LinearVelocity, LockedAxes, RigidBody,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::visual::LifetimeFadeout`
[INFO] [stdout]   --> src/player.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use crate::ability::components::visual::LifetimeFadeout;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::modifiers::*`
[INFO] [stdout]  --> src/ability/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::modifiers::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/ability/mod.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::projectile::InitialVelocity`
[INFO] [stdout]  --> src/ability/components/common.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use super::projectile::InitialVelocity;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `avian3d::prelude::*`
[INFO] [stdout]  --> src/ability/components/dash.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use avian3d::prelude::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DynamicTarget`
[INFO] [stdout]  --> src/ability/components/projectile.rs:4:42
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::ability::components::common::{DynamicTarget, Lifetime};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OnCollision`
[INFO] [stdout]  --> src/ability/components/projectile.rs:5:59
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::ability::components::events::{OnActiveDespawn, OnCollision};
[INFO] [stdout]   |                                                           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/common.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `avian3d::dynamics::solver::xpbd::PositionConstraint`
[INFO] [stdout]  --> src/enemy/spawn.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use avian3d::dynamics::solver::xpbd::PositionConstraint;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::CastConfig`
[INFO] [stdout]  --> src/enemy/enemies.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::ability::CastConfig;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::blast::BlastBundle`
[INFO] [stdout]  --> src/enemy/enemies.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::ability::components::blast::BlastBundle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::common::Lifetime`
[INFO] [stdout]  --> src/enemy/enemies.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::ability::components::common::Lifetime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DamageOnCollision`, `DespawnOnCollision`, and `InitialVelocity`
[INFO] [stdout]   --> src/enemy/enemies.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     DamageOnCollision, DespawnOnCollision, InitialVelocity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RandomSpawnOffset` and `SpawnEnemyAtCastPosition`
[INFO] [stdout]   --> src/enemy/enemies.rs:15:26
[INFO] [stdout]    |
[INFO] [stdout] 15 |     RadialSubCastOffset, RandomSpawnOffset, SpawnEnemyAtCastPosition,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::visual::LifetimeFadeout`
[INFO] [stdout]   --> src/enemy/enemies.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::ability::components::visual::LifetimeFadeout;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::blast::BlastBundle`
[INFO] [stdout]  --> src/player.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::ability::components::blast::BlastBundle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DynamicTarget`, `Lifetime`, and `SelectNearestTargetOnSpawn`
[INFO] [stdout]  --> src/player.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 |     DynamicTarget, Lifetime, LifetimeFromCursor, SelectNearestTargetOnSpawn,
[INFO] [stdout]   |     ^^^^^^^^^^^^^  ^^^^^^^^                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DamageOnCollision`, `DespawnOnCollision`, and `Homing`
[INFO] [stdout]  --> src/player.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 |     BasicProjectileBundle, DamageOnCollision, DespawnOnCollision, Homing, InitialVelocity,
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RadialSubCastOffset` and `RandomSpawnOffset`
[INFO] [stdout]  --> src/player.rs:9:41
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::ability::components::spawn::{RadialSubCastOffset, RandomSpawnOffset};
[INFO] [stdout]   |                                         ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CastOnDespawn` and `TimedSubCast`
[INFO] [stdout]   --> src/player.rs:10:43
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::ability::components::subcast::{CastOnDespawn, SubCastOnce, TimedSubCast};
[INFO] [stdout]    |                                           ^^^^^^^^^^^^^               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CastConfig`
[INFO] [stdout]   --> src/player.rs:14:22
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::ability::{CastConfig, DynamicAbility};
[INFO] [stdout]    |                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Collider`
[INFO] [stdout]   --> src/player.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Collider, ColliderConstructor, CollisionEventsEnabled, LinearVelocity, LockedAxes, RigidBody,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ability::components::visual::LifetimeFadeout`
[INFO] [stdout]   --> src/player.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use crate::ability::components::visual::LifetimeFadeout;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/ability/components/dash.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     mut commands: Commands,
[INFO] [stdout]    |     ----^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/ability/components/dash.rs:30:34
[INFO] [stdout]    |
[INFO] [stdout] 30 |     for (entity, dash_transform, mut transport_caster, caster, lifetime) in ability_query {
[INFO] [stdout]    |                                  ----^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `commands`
[INFO] [stdout]   --> src/ability/components/dash.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     mut commands: Commands,
[INFO] [stdout]    |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_commands`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `entity`
[INFO] [stdout]   --> src/ability/components/dash.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 |     for (entity, dash_transform, mut transport_caster, caster, lifetime) in ability_query {
[INFO] [stdout]    |          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_entity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `transport_caster`
[INFO] [stdout]   --> src/ability/components/dash.rs:30:34
[INFO] [stdout]    |
[INFO] [stdout] 30 |     for (entity, dash_transform, mut transport_caster, caster, lifetime) in ability_query {
[INFO] [stdout]    |                                  ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_transport_caster`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lifetime`
[INFO] [stdout]   --> src/ability/components/dash.rs:30:64
[INFO] [stdout]    |
[INFO] [stdout] 30 |     for (entity, dash_transform, mut transport_caster, caster, lifetime) in ability_query {
[INFO] [stdout]    |                                                                ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_lifetime`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/ability/components/dash.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     mut commands: Commands,
[INFO] [stdout]    |     ----^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/ability/components/dash.rs:30:34
[INFO] [stdout]    |
[INFO] [stdout] 30 |     for (entity, dash_transform, mut transport_caster, caster, lifetime) in ability_query {
[INFO] [stdout]    |                                  ----^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `commands`
[INFO] [stdout]   --> src/ability/components/dash.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     mut commands: Commands,
[INFO] [stdout]    |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_commands`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `entity`
[INFO] [stdout]   --> src/ability/components/dash.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 |     for (entity, dash_transform, mut transport_caster, caster, lifetime) in ability_query {
[INFO] [stdout]    |          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_entity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `transport_caster`
[INFO] [stdout]   --> src/ability/components/dash.rs:30:34
[INFO] [stdout]    |
[INFO] [stdout] 30 |     for (entity, dash_transform, mut transport_caster, caster, lifetime) in ability_query {
[INFO] [stdout]    |                                  ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_transport_caster`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lifetime`
[INFO] [stdout]   --> src/ability/components/dash.rs:30:64
[INFO] [stdout]    |
[INFO] [stdout] 30 |     for (entity, dash_transform, mut transport_caster, caster, lifetime) in ability_query {
[INFO] [stdout]    |                                                                ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_lifetime`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:10
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |          ----^^^^^^^^^
[INFO] [stdout]    |          |
[INFO] [stdout]    |          help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:52
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                                                    ----^^^^^^^^
[INFO] [stdout]    |                                                    |
[INFO] [stdout]    |                                                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `transforms`
[INFO] [stdout]   --> src/ability/components/projectile.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     transforms: Query<&Transform, Without<Homing>>,
[INFO] [stdout]    |     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_transforms`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `modifiers`
[INFO] [stdout]   --> src/ability/components/projectile.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     modifiers: Query<&ModifierStack>,
[INFO] [stdout]    |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_modifiers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time`
[INFO] [stdout]   --> src/ability/components/projectile.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 84 |     time: Res<Time>,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `transform`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:10
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |          ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_transform`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `homing`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:25
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_homing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cast_info`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:33
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cast_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:44
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_target`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `velocity`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:52
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                                                    ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_velocity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:10
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |          ----^^^^^^^^^
[INFO] [stdout]    |          |
[INFO] [stdout]    |          help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:52
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                                                    ----^^^^^^^^
[INFO] [stdout]    |                                                    |
[INFO] [stdout]    |                                                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `transforms`
[INFO] [stdout]   --> src/ability/components/projectile.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     transforms: Query<&Transform, Without<Homing>>,
[INFO] [stdout]    |     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_transforms`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `modifiers`
[INFO] [stdout]   --> src/ability/components/projectile.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     modifiers: Query<&ModifierStack>,
[INFO] [stdout]    |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_modifiers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time`
[INFO] [stdout]   --> src/ability/components/projectile.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 84 |     time: Res<Time>,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `transform`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:10
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |          ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_transform`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `homing`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:25
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_homing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cast_info`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:33
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cast_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:44
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_target`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `velocity`
[INFO] [stdout]   --> src/ability/components/projectile.rs:86:52
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for (mut transform, homing, cast_info, target, mut velocity) in &mut homing_query {
[INFO] [stdout]    |                                                    ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_velocity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `collider_transform`
[INFO] [stdout]    --> src/ability/components/projectile.rs:134:43
[INFO] [stdout]     |
[INFO] [stdout] 134 |     if let Ok((damage_component, cast_by, collider_transform, movement, source_faction)) =
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_collider_transform`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `collider_transform`
[INFO] [stdout]    --> src/ability/components/projectile.rs:134:43
[INFO] [stdout]     |
[INFO] [stdout] 134 |     if let Ok((damage_component, cast_by, collider_transform, movement, source_faction)) =
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_collider_transform`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ability/components/subcast.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 |     mut cast_events: EventWriter<CastDynamicAbility>,
[INFO] [stdout]     |     ----^^^^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cast_events`
[INFO] [stdout]    --> src/ability/components/subcast.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 |     mut cast_events: EventWriter<CastDynamicAbility>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cast_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ability/slots.rs:300:9
[INFO] [stdout]     |
[INFO] [stdout] 300 |     let mut event =
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ability/components/subcast.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 |     mut cast_events: EventWriter<CastDynamicAbility>,
[INFO] [stdout]     |     ----^^^^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cast_events`
[INFO] [stdout]    --> src/ability/components/subcast.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 |     mut cast_events: EventWriter<CastDynamicAbility>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cast_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time`
[INFO] [stdout]    --> src/enemy/components.rs:140:5
[INFO] [stdout]     |
[INFO] [stdout] 140 |     time: Res<Time>,
[INFO] [stdout]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ang_vel`
[INFO] [stdout]    --> src/enemy/components.rs:143:69
[INFO] [stdout]     |
[INFO] [stdout] 143 |         if let Ok((transform, movement, mut force, mut torque, vel, ang_vel)) =
[INFO] [stdout]     |                                                                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ang_vel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/enemy/components.rs:194:5
[INFO] [stdout]     |
[INFO] [stdout] 194 |     mut events: EventWriter<CastDynamicAbility>,
[INFO] [stdout]     |     ----^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `events`
[INFO] [stdout]    --> src/enemy/components.rs:194:5
[INFO] [stdout]     |
[INFO] [stdout] 194 |     mut events: EventWriter<CastDynamicAbility>,
[INFO] [stdout]     |     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ability/slots.rs:300:9
[INFO] [stdout]     |
[INFO] [stdout] 300 |     let mut event =
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/player.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     mut assets: ResMut<AssetServer>,
[INFO] [stdout]    |     ----^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `assets`
[INFO] [stdout]   --> src/player.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     mut assets: ResMut<AssetServer>,
[INFO] [stdout]    |     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_assets`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_entity`
[INFO] [stdout]    --> src/player.rs:207:13
[INFO] [stdout]     |
[INFO] [stdout] 207 |         Ok((player_entity, mut player_transform, mut force, player, modifier_stack, vel)),
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_entity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time`
[INFO] [stdout]    --> src/enemy/components.rs:140:5
[INFO] [stdout]     |
[INFO] [stdout] 140 |     time: Res<Time>,
[INFO] [stdout]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ang_vel`
[INFO] [stdout]    --> src/enemy/components.rs:143:69
[INFO] [stdout]     |
[INFO] [stdout] 143 |         if let Ok((transform, movement, mut force, mut torque, vel, ang_vel)) =
[INFO] [stdout]     |                                                                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ang_vel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/enemy/components.rs:194:5
[INFO] [stdout]     |
[INFO] [stdout] 194 |     mut events: EventWriter<CastDynamicAbility>,
[INFO] [stdout]     |     ----^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `events`
[INFO] [stdout]    --> src/enemy/components.rs:194:5
[INFO] [stdout]     |
[INFO] [stdout] 194 |     mut events: EventWriter<CastDynamicAbility>,
[INFO] [stdout]     |     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Target` is never constructed
[INFO] [stdout]   --> src/ability/mod.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub enum SpawnLocation {
[INFO] [stdout]    |          ------------- variant in this enum
[INFO] [stdout] 17 |     Source,
[INFO] [stdout] 18 |     Target,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpawnLocation` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_config` is never used
[INFO] [stdout]   --> src/ability/mod.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl DynamicAbility {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn with_config(mut self, config: CastConfig) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `entity` is never read
[INFO] [stdout]   --> src/ability/mod.rs:72:9
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct ResolvedTarget {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 72 |     pub entity: Option<Entity>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlastBundle` is never constructed
[INFO] [stdout]   --> src/ability/components/blast.rs:79:12
[INFO] [stdout]    |
[INFO] [stdout] 79 | pub struct BlastBundle {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/ability/components/blast.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 86 | impl BlastBundle {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 87 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `fixed`, `just_spawned`, and `just_died` are never used
[INFO] [stdout]   --> src/ability/components/common.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Lifetime {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 50 |     pub fn fixed(base_duration: f32) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn just_spawned(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn just_died(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/ability/components/common.rs:210:12
[INFO] [stdout]     |
[INFO] [stdout] 209 | impl DynamicTarget {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] 210 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/ability/components/common.rs:221:12
[INFO] [stdout]     |
[INFO] [stdout] 220 | impl SelectNearestTargetOnSpawn {
[INFO] [stdout]     | ------------------------------- associated function in this implementation
[INFO] [stdout] 221 |     pub fn new(max_distance: f32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DashState` is never used
[INFO] [stdout]   --> src/ability/components/dash.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum DashState {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/ability/components/dash.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl TransportCaster {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn new() -> TransportCaster {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `target` is never read
[INFO] [stdout]  --> src/ability/components/events.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct OnCollision {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 8 |     pub target: Entity,
[INFO] [stdout]   |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `base_turn_speed` is never read
[INFO] [stdout]   --> src/ability/components/projectile.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct Homing {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 70 |     pub base_turn_speed: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Homing` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_degrees` is never used
[INFO] [stdout]   --> src/ability/components/spawn.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl RadialSubCastOffset {
[INFO] [stdout]    | ------------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn from_degrees(radius: f32, spread_degrees: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/ability/components/spawn.rs:111:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | impl SpawnEnemyAtCastPosition {
[INFO] [stdout]     | ----------------------------- associated function in this implementation
[INFO] [stdout] 111 |     pub fn new(enemy: Enemy) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_once` is never used
[INFO] [stdout]   --> src/ability/components/subcast.rs:93:12
[INFO] [stdout]    |
[INFO] [stdout] 92 | impl TimedSubCast {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 93 |     pub fn new_once(ability: DynamicAbility, num_casts_per_interval: i32, delay: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `modified_by` are never used
[INFO] [stdout]    --> src/ability/components/subcast.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl CastOnDespawn {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 152 |     pub fn new(ability: DynamicAbility, num_casts: i32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn modified_by(mut self, modifier_id: ModifierID) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NearestEnemyToCursor` and `SelfCast` are never constructed
[INFO] [stdout]   --> src/ability/slots.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum AbilityTargeting {
[INFO] [stdout]    |          ---------------- variants in this enum
[INFO] [stdout] 14 |     Cursor, // Target cursor position
[INFO] [stdout] 15 |     NearestEnemyToCursor {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     SelfCast, // Target self (IntendedTarget::None)
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AbilityTargeting` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `remaining_cooldown` is never used
[INFO] [stdout]   --> src/ability/slots.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl SlottedAbility {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn remaining_cooldown(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/ability/slots.rs:73:12
[INFO] [stdout]     |
[INFO] [stdout]  72 | impl AbilitySlots {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  73 |     pub fn new(slot_count: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn set_ability(&mut self, slot_id: SlotId, ability: SlottedAbility) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn get_ability(&self, slot_id: SlotId) -> Option<&SlottedAbility> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn clear_slot(&mut self, slot_id: SlotId) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn slot_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn available_slots(&self) -> Vec<SlotId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn occupied_slots(&self) -> Vec<SlotId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `unbind_key`, `unbind_mouse`, `get_keys_for_slot`, and `get_mouse_buttons_for_slot` are never used
[INFO] [stdout]    --> src/ability/slots.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 137 | impl AbilityKeymap {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn unbind_key(&mut self, key: &KeyCode) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn unbind_mouse(&mut self, button: &MouseButton) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn get_keys_for_slot(&self, slot_id: SlotId) -> Vec<KeyCode> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn get_mouse_buttons_for_slot(&self, slot_id: SlotId) -> Vec<MouseButton> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/common.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl Health {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] 27 |     pub fn new(base_health: i32, base_regen: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_self_knockback` is never used
[INFO] [stdout]    --> src/enemy/components.rs:229:12
[INFO] [stdout]     |
[INFO] [stdout] 218 | impl ContactDamage {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn with_self_knockback(mut self, knockback: f32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/enemy/components.rs:300:12
[INFO] [stdout]     |
[INFO] [stdout] 299 | impl DespawnTimer {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 300 |     pub fn new(duration: f32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]  --> src/enemy/registry.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct EnemyID(&'static str);
[INFO] [stdout]   |            ------- ^^^^^^^^^^^^
[INFO] [stdout]   |            |
[INFO] [stdout]   |            field in this struct
[INFO] [stdout]   |
[INFO] [stdout]   = help: consider removing this field
[INFO] [stdout]   = note: `EnemyID` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]  --> src/enemy/registry.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | impl EnemyID {
[INFO] [stdout]   | ------------ method in this implementation
[INFO] [stdout] 9 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_level` is never read
[INFO] [stdout]   --> src/enemy/registry.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct EnemyConfig {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 16 |     pub min_level: i32,
[INFO] [stdout] 17 |     pub max_level: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EnemyConfig` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `id` is never read
[INFO] [stdout]   --> src/enemy/registry.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct Enemy {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] 33 |     id: EnemyID,
[INFO] [stdout]    |     ^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Enemy` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `id` is never used
[INFO] [stdout]   --> src/enemy/registry.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl Enemy {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] 39 |     pub fn id(&self) -> EnemyID {
[INFO] [stdout]    |            ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get` is never used
[INFO] [stdout]   --> src/enemy/registry.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | impl EnemyRegistry {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub fn get(&self, id: &str) -> Option<&Enemy> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `impact_velocity` is never read
[INFO] [stdout]   --> src/event.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct DamageEvent {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub impact_velocity: Option<Vec3>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `switch_language` is never used
[INFO] [stdout]   --> src/localization.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl LocalizationResource {
[INFO] [stdout]    | ------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn switch_language(&mut self, language: LanguageIdentifier) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_multiplicative_modifier` and `add_additive_modifier` are never used
[INFO] [stdout]    --> src/modifiers/mod.rs:108:12
[INFO] [stdout]     |
[INFO] [stdout]  90 | impl ModifierStack {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn add_multiplicative_modifier(&mut self, id: ModifierID, value: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn add_additive_modifier(&mut self, id: ModifierID, value: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HOMING_STRENGTH_MODIFIER` is never used
[INFO] [stdout]    --> src/modifiers/mod.rs:165:11
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub const HOMING_STRENGTH_MODIFIER: ModifierID = ModifierID("homing-strength");
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_crystal_mesh` is never used
[INFO] [stdout]   --> src/procedural/enemy_meshes.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub fn generate_crystal_mesh(radius: f32, spikes: usize) -> Mesh {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_segmented_mesh` is never used
[INFO] [stdout]   --> src/procedural/enemy_meshes.rs:72:8
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub fn generate_segmented_mesh(radius: f32, segments: usize, segment_height: f32) -> Mesh {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_angular_mesh` is never used
[INFO] [stdout]    --> src/procedural/enemy_meshes.rs:113:8
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub fn generate_angular_mesh(size: f32) -> Mesh {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_gem_mesh` is never used
[INFO] [stdout]    --> src/procedural/enemy_meshes.rs:180:8
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub fn generate_gem_mesh(radius: f32) -> Mesh {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_twisted_pillar` is never used
[INFO] [stdout]    --> src/procedural/enemy_meshes.rs:215:8
[INFO] [stdout]     |
[INFO] [stdout] 215 | pub fn generate_twisted_pillar(radius: f32, height: f32, twist_amount: f32) -> Mesh {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_mesh_from_data` is never used
[INFO] [stdout]    --> src/procedural/enemy_meshes.rs:257:4
[INFO] [stdout]     |
[INFO] [stdout] 257 | fn create_mesh_from_data(positions: Vec<Vec3>, indices: Vec<u32>) -> Mesh {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProceduralRock` is never constructed
[INFO] [stdout]   --> src/procedural/rock.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct ProceduralRock {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RockConfig` is never constructed
[INFO] [stdout]   --> src/procedural/rock.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct RockConfig {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `pebble`, `boulder`, `cliff_rock`, and `randomize` are never used
[INFO] [stdout]   --> src/procedural/rock.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | impl RockConfig {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 56 |     /// Create a small pebble configuration
[INFO] [stdout] 57 |     pub fn pebble(seed: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn boulder(seed: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn cliff_rock(seed: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn randomize(&mut self, base_seed: u32) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_rock_mesh` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:108:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub fn generate_rock_mesh(config: &RockConfig) -> Mesh {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_icosphere` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn generate_icosphere(positions: &mut Vec<Vec3>, indices: &mut Vec<u32>, subdivisions: usize) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `subdivide_mesh` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:214:4
[INFO] [stdout]     |
[INFO] [stdout] 214 | fn subdivide_mesh(positions: &mut Vec<Vec3>, indices: &mut Vec<u32>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_or_create_midpoint` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:234:4
[INFO] [stdout]     |
[INFO] [stdout] 234 | fn get_or_create_midpoint(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fractal_noise` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:257:4
[INFO] [stdout]     |
[INFO] [stdout] 257 | fn fractal_noise(
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_flat_normals` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:287:4
[INFO] [stdout]     |
[INFO] [stdout] 287 | fn calculate_flat_normals(positions: &[Vec3], indices: &[u32]) -> Vec<Vec3> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_spherical_uvs` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:316:4
[INFO] [stdout]     |
[INFO] [stdout] 316 | fn generate_spherical_uvs(positions: &[Vec3]) -> Vec<Vec2> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AOE_RUNE` is never used
[INFO] [stdout]   --> src/rune/runes.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const AOE_RUNE: ModifierRune = ModifierRune {
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HOMING_RUNE` is never used
[INFO] [stdout]   --> src/rune/runes.rs:45:11
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub const HOMING_RUNE: ModifierRune = ModifierRune {
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `downward` are never used
[INFO] [stdout]   --> src/ui/common.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl MoveAnimation {
[INFO] [stdout]    | ------------------ associated functions in this implementation
[INFO] [stdout] 10 |     pub fn new(velocity: Vec2, start_position: Vec2) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub fn downward(speed: f32, start_position: Vec2) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/player.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     mut assets: ResMut<AssetServer>,
[INFO] [stdout]    |     ----^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `assets`
[INFO] [stdout]   --> src/player.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     mut assets: ResMut<AssetServer>,
[INFO] [stdout]    |     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_assets`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_entity`
[INFO] [stdout]    --> src/player.rs:207:13
[INFO] [stdout]     |
[INFO] [stdout] 207 |         Ok((player_entity, mut player_transform, mut force, player, modifier_stack, vel)),
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_entity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Target` is never constructed
[INFO] [stdout]   --> src/ability/mod.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub enum SpawnLocation {
[INFO] [stdout]    |          ------------- variant in this enum
[INFO] [stdout] 17 |     Source,
[INFO] [stdout] 18 |     Target,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpawnLocation` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_config` is never used
[INFO] [stdout]   --> src/ability/mod.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl DynamicAbility {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn with_config(mut self, config: CastConfig) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `entity` is never read
[INFO] [stdout]   --> src/ability/mod.rs:72:9
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct ResolvedTarget {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 72 |     pub entity: Option<Entity>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlastBundle` is never constructed
[INFO] [stdout]   --> src/ability/components/blast.rs:79:12
[INFO] [stdout]    |
[INFO] [stdout] 79 | pub struct BlastBundle {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/ability/components/blast.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 86 | impl BlastBundle {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 87 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `fixed`, `just_spawned`, and `just_died` are never used
[INFO] [stdout]   --> src/ability/components/common.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Lifetime {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 50 |     pub fn fixed(base_duration: f32) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn just_spawned(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn just_died(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/ability/components/common.rs:210:12
[INFO] [stdout]     |
[INFO] [stdout] 209 | impl DynamicTarget {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] 210 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/ability/components/common.rs:221:12
[INFO] [stdout]     |
[INFO] [stdout] 220 | impl SelectNearestTargetOnSpawn {
[INFO] [stdout]     | ------------------------------- associated function in this implementation
[INFO] [stdout] 221 |     pub fn new(max_distance: f32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DashState` is never used
[INFO] [stdout]   --> src/ability/components/dash.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum DashState {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/ability/components/dash.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl TransportCaster {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn new() -> TransportCaster {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `target` is never read
[INFO] [stdout]  --> src/ability/components/events.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct OnCollision {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 8 |     pub target: Entity,
[INFO] [stdout]   |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `base_turn_speed` is never read
[INFO] [stdout]   --> src/ability/components/projectile.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct Homing {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 70 |     pub base_turn_speed: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Homing` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_degrees` is never used
[INFO] [stdout]   --> src/ability/components/spawn.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl RadialSubCastOffset {
[INFO] [stdout]    | ------------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn from_degrees(radius: f32, spread_degrees: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/ability/components/spawn.rs:111:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | impl SpawnEnemyAtCastPosition {
[INFO] [stdout]     | ----------------------------- associated function in this implementation
[INFO] [stdout] 111 |     pub fn new(enemy: Enemy) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_once` is never used
[INFO] [stdout]   --> src/ability/components/subcast.rs:93:12
[INFO] [stdout]    |
[INFO] [stdout] 92 | impl TimedSubCast {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 93 |     pub fn new_once(ability: DynamicAbility, num_casts_per_interval: i32, delay: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `modified_by` are never used
[INFO] [stdout]    --> src/ability/components/subcast.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl CastOnDespawn {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 152 |     pub fn new(ability: DynamicAbility, num_casts: i32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn modified_by(mut self, modifier_id: ModifierID) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NearestEnemyToCursor` and `SelfCast` are never constructed
[INFO] [stdout]   --> src/ability/slots.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum AbilityTargeting {
[INFO] [stdout]    |          ---------------- variants in this enum
[INFO] [stdout] 14 |     Cursor, // Target cursor position
[INFO] [stdout] 15 |     NearestEnemyToCursor {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     SelfCast, // Target self (IntendedTarget::None)
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AbilityTargeting` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `remaining_cooldown` is never used
[INFO] [stdout]   --> src/ability/slots.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl SlottedAbility {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn remaining_cooldown(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/ability/slots.rs:73:12
[INFO] [stdout]     |
[INFO] [stdout]  72 | impl AbilitySlots {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  73 |     pub fn new(slot_count: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn set_ability(&mut self, slot_id: SlotId, ability: SlottedAbility) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn get_ability(&self, slot_id: SlotId) -> Option<&SlottedAbility> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn clear_slot(&mut self, slot_id: SlotId) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn slot_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn available_slots(&self) -> Vec<SlotId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn occupied_slots(&self) -> Vec<SlotId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `unbind_key`, `unbind_mouse`, `get_keys_for_slot`, and `get_mouse_buttons_for_slot` are never used
[INFO] [stdout]    --> src/ability/slots.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 137 | impl AbilityKeymap {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn unbind_key(&mut self, key: &KeyCode) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn unbind_mouse(&mut self, button: &MouseButton) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn get_keys_for_slot(&self, slot_id: SlotId) -> Vec<KeyCode> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn get_mouse_buttons_for_slot(&self, slot_id: SlotId) -> Vec<MouseButton> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/common.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl Health {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] 27 |     pub fn new(base_health: i32, base_regen: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_self_knockback` is never used
[INFO] [stdout]    --> src/enemy/components.rs:229:12
[INFO] [stdout]     |
[INFO] [stdout] 218 | impl ContactDamage {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn with_self_knockback(mut self, knockback: f32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/enemy/components.rs:300:12
[INFO] [stdout]     |
[INFO] [stdout] 299 | impl DespawnTimer {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 300 |     pub fn new(duration: f32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]  --> src/enemy/registry.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct EnemyID(&'static str);
[INFO] [stdout]   |            ------- ^^^^^^^^^^^^
[INFO] [stdout]   |            |
[INFO] [stdout]   |            field in this struct
[INFO] [stdout]   |
[INFO] [stdout]   = help: consider removing this field
[INFO] [stdout]   = note: `EnemyID` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]  --> src/enemy/registry.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | impl EnemyID {
[INFO] [stdout]   | ------------ method in this implementation
[INFO] [stdout] 9 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_level` is never read
[INFO] [stdout]   --> src/enemy/registry.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct EnemyConfig {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 16 |     pub min_level: i32,
[INFO] [stdout] 17 |     pub max_level: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EnemyConfig` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `id` is never read
[INFO] [stdout]   --> src/enemy/registry.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct Enemy {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] 33 |     id: EnemyID,
[INFO] [stdout]    |     ^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Enemy` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `id` is never used
[INFO] [stdout]   --> src/enemy/registry.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl Enemy {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] 39 |     pub fn id(&self) -> EnemyID {
[INFO] [stdout]    |            ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get` is never used
[INFO] [stdout]   --> src/enemy/registry.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | impl EnemyRegistry {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub fn get(&self, id: &str) -> Option<&Enemy> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `impact_velocity` is never read
[INFO] [stdout]   --> src/event.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct DamageEvent {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub impact_velocity: Option<Vec3>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `switch_language` is never used
[INFO] [stdout]   --> src/localization.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl LocalizationResource {
[INFO] [stdout]    | ------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn switch_language(&mut self, language: LanguageIdentifier) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_multiplicative_modifier` and `add_additive_modifier` are never used
[INFO] [stdout]    --> src/modifiers/mod.rs:108:12
[INFO] [stdout]     |
[INFO] [stdout]  90 | impl ModifierStack {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn add_multiplicative_modifier(&mut self, id: ModifierID, value: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn add_additive_modifier(&mut self, id: ModifierID, value: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HOMING_STRENGTH_MODIFIER` is never used
[INFO] [stdout]    --> src/modifiers/mod.rs:165:11
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub const HOMING_STRENGTH_MODIFIER: ModifierID = ModifierID("homing-strength");
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_crystal_mesh` is never used
[INFO] [stdout]   --> src/procedural/enemy_meshes.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub fn generate_crystal_mesh(radius: f32, spikes: usize) -> Mesh {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_segmented_mesh` is never used
[INFO] [stdout]   --> src/procedural/enemy_meshes.rs:72:8
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub fn generate_segmented_mesh(radius: f32, segments: usize, segment_height: f32) -> Mesh {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_angular_mesh` is never used
[INFO] [stdout]    --> src/procedural/enemy_meshes.rs:113:8
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub fn generate_angular_mesh(size: f32) -> Mesh {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_gem_mesh` is never used
[INFO] [stdout]    --> src/procedural/enemy_meshes.rs:180:8
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub fn generate_gem_mesh(radius: f32) -> Mesh {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_twisted_pillar` is never used
[INFO] [stdout]    --> src/procedural/enemy_meshes.rs:215:8
[INFO] [stdout]     |
[INFO] [stdout] 215 | pub fn generate_twisted_pillar(radius: f32, height: f32, twist_amount: f32) -> Mesh {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_mesh_from_data` is never used
[INFO] [stdout]    --> src/procedural/enemy_meshes.rs:257:4
[INFO] [stdout]     |
[INFO] [stdout] 257 | fn create_mesh_from_data(positions: Vec<Vec3>, indices: Vec<u32>) -> Mesh {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProceduralRock` is never constructed
[INFO] [stdout]   --> src/procedural/rock.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct ProceduralRock {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RockConfig` is never constructed
[INFO] [stdout]   --> src/procedural/rock.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct RockConfig {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `pebble`, `boulder`, `cliff_rock`, and `randomize` are never used
[INFO] [stdout]   --> src/procedural/rock.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | impl RockConfig {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 56 |     /// Create a small pebble configuration
[INFO] [stdout] 57 |     pub fn pebble(seed: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn boulder(seed: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn cliff_rock(seed: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn randomize(&mut self, base_seed: u32) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_rock_mesh` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:108:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub fn generate_rock_mesh(config: &RockConfig) -> Mesh {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_icosphere` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn generate_icosphere(positions: &mut Vec<Vec3>, indices: &mut Vec<u32>, subdivisions: usize) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `subdivide_mesh` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:214:4
[INFO] [stdout]     |
[INFO] [stdout] 214 | fn subdivide_mesh(positions: &mut Vec<Vec3>, indices: &mut Vec<u32>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_or_create_midpoint` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:234:4
[INFO] [stdout]     |
[INFO] [stdout] 234 | fn get_or_create_midpoint(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fractal_noise` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:257:4
[INFO] [stdout]     |
[INFO] [stdout] 257 | fn fractal_noise(
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_flat_normals` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:287:4
[INFO] [stdout]     |
[INFO] [stdout] 287 | fn calculate_flat_normals(positions: &[Vec3], indices: &[u32]) -> Vec<Vec3> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_spherical_uvs` is never used
[INFO] [stdout]    --> src/procedural/rock.rs:316:4
[INFO] [stdout]     |
[INFO] [stdout] 316 | fn generate_spherical_uvs(positions: &[Vec3]) -> Vec<Vec2> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AOE_RUNE` is never used
[INFO] [stdout]   --> src/rune/runes.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const AOE_RUNE: ModifierRune = ModifierRune {
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HOMING_RUNE` is never used
[INFO] [stdout]   --> src/rune/runes.rs:45:11
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub const HOMING_RUNE: ModifierRune = ModifierRune {
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `downward` are never used
[INFO] [stdout]   --> src/ui/common.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl MoveAnimation {
[INFO] [stdout]    | ------------------ associated functions in this implementation
[INFO] [stdout] 10 |     pub fn new(velocity: Vec2, start_position: Vec2) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub fn downward(speed: f32, start_position: Vec2) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 27s
[INFO] running `Command { std: "docker" "inspect" "e31c3c888e40adfc5d382bb21164f81797273a00cabb24be4f37253a0d98e1ce", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e31c3c888e40adfc5d382bb21164f81797273a00cabb24be4f37253a0d98e1ce", kill_on_drop: false }`
[INFO] [stdout] e31c3c888e40adfc5d382bb21164f81797273a00cabb24be4f37253a0d98e1ce
