[INFO] cloning repository https://github.com/rust-game-samples/asteroid
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/rust-game-samples/asteroid" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frust-game-samples%2Fasteroid", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frust-game-samples%2Fasteroid'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 0aacd7dfc972a6b5c480759fcc73aec12f113811
[INFO] checking rust-game-samples/asteroid against master#f5e2df741b4a9820a7579f0c8eccc951706a8782 for pr-147995
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frust-game-samples%2Fasteroid" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/rust-game-samples/asteroid
[INFO] finished tweaking git repo https://github.com/rust-game-samples/asteroid
[INFO] tweaked toml for git repo https://github.com/rust-game-samples/asteroid written to /workspace/builds/worker-7-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/rust-game-samples/asteroid on toolchain f5e2df741b4a9820a7579f0c8eccc951706a8782
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+f5e2df741b4a9820a7579f0c8eccc951706a8782" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/rust-game-samples/asteroid 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" "+f5e2df741b4a9820a7579f0c8eccc951706a8782" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded rand_core v0.9.0-alpha.2
[INFO] [stderr]   Downloaded rand_chacha v0.9.0-alpha.2
[INFO] [stderr]   Downloaded glutin_egl_sys v0.7.0
[INFO] [stderr]   Downloaded bitstream-io v2.5.3
[INFO] [stderr]   Downloaded glutin_glx_sys v0.6.0
[INFO] [stderr]   Downloaded wayland-protocols-plasma v0.3.3
[INFO] [stderr]   Downloaded flate2 v1.0.33
[INFO] [stderr]   Downloaded sdl2 v0.37.0
[INFO] [stderr]   Downloaded glutin v0.32.0
[INFO] [stderr]   Downloaded rand v0.9.0-alpha.2
[INFO] [stderr]   Downloaded polling v3.7.3
[INFO] [stderr]   Downloaded object v0.36.3
[INFO] [stderr]   Downloaded winit v0.30.5
[INFO] [stderr]   Downloaded glium v0.35.0
[INFO] [stderr]   Downloaded sdl2-sys v0.37.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+f5e2df741b4a9820a7579f0c8eccc951706a8782" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 0ca6d7a14f617b3c95c772939bc808e0c54cb2b4606d8425b36aa4809c1ca4d5
[INFO] running `Command { std: "docker" "start" "-a" "0ca6d7a14f617b3c95c772939bc808e0c54cb2b4606d8425b36aa4809c1ca4d5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0ca6d7a14f617b3c95c772939bc808e0c54cb2b4606d8425b36aa4809c1ca4d5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0ca6d7a14f617b3c95c772939bc808e0c54cb2b4606d8425b36aa4809c1ca4d5", kill_on_drop: false }`
[INFO] [stdout] 0ca6d7a14f617b3c95c772939bc808e0c54cb2b4606d8425b36aa4809c1ca4d5
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+f5e2df741b4a9820a7579f0c8eccc951706a8782" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] d6cb52b111a8aef18a62f79c915ca635b941aa7c8ecb371fe2f0ebc2461baa81
[INFO] running `Command { std: "docker" "start" "-a" "d6cb52b111a8aef18a62f79c915ca635b941aa7c8ecb371fe2f0ebc2461baa81", kill_on_drop: false }`
[INFO] [stderr]     Checking log v0.4.22
[INFO] [stderr]     Checking libloading v0.8.5
[INFO] [stderr]    Compiling rustix v0.38.34
[INFO] [stderr]     Checking linux-raw-sys v0.4.14
[INFO] [stderr]    Compiling xml-rs v0.8.21
[INFO] [stderr]    Compiling cc v1.1.15
[INFO] [stderr]    Compiling wayland-sys v0.31.4
[INFO] [stderr]     Checking downcast-rs v1.2.1
[INFO] [stderr]    Compiling wayland-client v0.31.5
[INFO] [stderr]    Compiling quick-xml v0.34.0
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling quote v1.0.37
[INFO] [stderr]     Checking bytemuck v1.17.0
[INFO] [stderr]    Compiling slab v0.4.9
[INFO] [stderr]     Checking tracing-core v0.1.32
[INFO] [stderr]     Checking dlib v0.5.2
[INFO] [stderr]    Compiling crossbeam-utils v0.8.20
[INFO] [stderr]     Checking getrandom v0.2.15
[INFO] [stderr]    Compiling lock_api v0.4.12
[INFO] [stderr]     Checking xcursor v0.3.8
[INFO] [stderr]     Checking strict-num v0.1.1
[INFO] [stderr]    Compiling syn v2.0.76
[INFO] [stderr]     Checking arrayref v0.3.8
[INFO] [stderr]     Checking xkeysym v0.2.1
[INFO] [stderr]     Checking ttf-parser v0.24.1
[INFO] [stderr]    Compiling smithay-client-toolkit v0.19.2
[INFO] [stderr]    Compiling ahash v0.8.11
[INFO] [stderr]     Checking miniz_oxide v0.7.4
[INFO] [stderr]     Checking tracing v0.1.40
[INFO] [stderr]     Checking x11-dl v2.21.0
[INFO] [stderr]     Checking tiny-skia-path v0.11.4
[INFO] [stderr]     Checking memmap2 v0.9.4
[INFO] [stderr]    Compiling built v0.7.4
[INFO] [stderr]     Checking miniz_oxide v0.8.0
[INFO] [stderr]    Compiling sdl2-sys v0.37.0
[INFO] [stderr]     Checking nom v7.1.3
[INFO] [stderr]     Checking crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling rav1e v0.7.1
[INFO] [stderr]    Compiling winit v0.30.5
[INFO] [stderr]    Compiling glutin v0.32.0
[INFO] [stderr]     Checking crossbeam-deque v0.8.5
[INFO] [stderr]     Checking raw-window-handle v0.6.2
[INFO] [stderr]     Checking x11rb-protocol v0.13.1
[INFO] [stderr]     Checking flate2 v1.0.33
[INFO] [stderr]    Compiling wayland-scanner v0.31.4
[INFO] [stderr]    Compiling gl_generator v0.14.0
[INFO] [stderr]     Checking tiny-skia v0.11.4
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking v_frame v0.3.8
[INFO] [stderr]     Checking rayon-core v1.12.1
[INFO] [stderr]     Checking xkbcommon-dl v0.4.2
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking itertools v0.12.1
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]    Compiling simd_helpers v0.1.0
[INFO] [stderr]    Compiling glutin-winit v0.5.0
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]     Checking maybe-rayon v0.1.1
[INFO] [stderr]     Checking bitstream-io v2.5.3
[INFO] [stderr]    Compiling glutin_glx_sys v0.6.0
[INFO] [stderr]    Compiling glutin_egl_sys v0.7.0
[INFO] [stderr]     Checking gimli v0.29.0
[INFO] [stderr]    Compiling wayland-backend v0.3.6
[INFO] [stderr]    Compiling backtrace v0.3.73
[INFO] [stderr]     Checking smol_str v0.2.2
[INFO] [stderr]    Compiling glium v0.35.0
[INFO] [stderr]    Compiling gl v0.14.0
[INFO] [stderr]     Checking flume v0.11.0
[INFO] [stderr]     Checking rgb v0.8.48
[INFO] [stderr]     Checking object v0.36.3
[INFO] [stderr]     Checking avif-serialize v0.8.1
[INFO] [stderr]    Compiling sdl2 v0.37.0
[INFO] [stderr]     Checking rustc-demangle v0.1.24
[INFO] [stderr]     Checking tiff v0.9.1
[INFO] [stderr]     Checking exr v1.72.0
[INFO] [stderr]     Checking image-webp v0.1.3
[INFO] [stderr]     Checking zune-jpeg v0.4.13
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]     Checking owned_ttf_parser v0.24.0
[INFO] [stderr]     Checking png v0.17.13
[INFO] [stderr]     Checking ab_glyph v0.2.28
[INFO] [stderr]     Checking rayon v1.10.0
[INFO] [stderr]     Checking qoi v0.4.1
[INFO] [stderr]     Checking av1-grain v0.2.3
[INFO] [stderr]     Checking addr2line v0.22.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.63
[INFO] [stderr]    Compiling zerocopy-derive v0.7.35
[INFO] [stderr]    Compiling profiling-procmacros v1.0.15
[INFO] [stderr]    Compiling arg_enum_proc_macro v0.3.4
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]     Checking zerocopy v0.7.35
[INFO] [stderr]     Checking profiling v1.0.15
[INFO] [stderr]     Checking polling v3.7.3
[INFO] [stderr]     Checking thiserror v1.0.63
[INFO] [stderr]     Checking ppv-lite86 v0.2.20
[INFO] [stderr]     Checking rand_core v0.9.0-alpha.2
[INFO] [stderr]     Checking calloop v0.13.0
[INFO] [stderr]     Checking wayland-csd-frame v0.3.0
[INFO] [stderr]     Checking rand_chacha v0.9.0-alpha.2
[INFO] [stderr]     Checking rand v0.9.0-alpha.2
[INFO] [stderr]     Checking wayland-protocols v0.32.3
[INFO] [stderr]     Checking calloop-wayland-source v0.3.0
[INFO] [stderr]     Checking wayland-cursor v0.31.5
[INFO] [stderr]     Checking ravif v0.11.10
[INFO] [stderr]     Checking image v0.25.2
[INFO] [stderr]     Checking wayland-protocols-wlr v0.3.3
[INFO] [stderr]     Checking wayland-protocols-plasma v0.3.3
[INFO] [stderr]     Checking x11rb v0.13.1
[INFO] [stderr]     Checking sctk-adwaita v0.10.1
[INFO] [stderr]     Checking asteroid v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/game.rs:96:17
[INFO] [stdout]    |
[INFO] [stdout] 96 |             let mut tex = Rc::new(RefCell::new(Texture::new()));
[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: unused variable: `update_order`
[INFO] [stdout]   --> src/circle_component.rs:33:39
[INFO] [stdout]    |
[INFO] [stdout] 33 |     fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self {
[INFO] [stdout]    |                                       ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_update_order`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `context`, `textures`, `window`, `ticks_count`, and `updating_actors` are never read
[INFO] [stdout]   --> src/game.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct Game {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] 21 |     canvas: WindowCanvas,
[INFO] [stdout] 22 |     context: sdl2::video::GLContext,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 23 |     is_running: bool,
[INFO] [stdout] 24 |     textures: HashMap<String, Rc<RefCell<Texture>>>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     window: Option<sdl2::video::Window>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 32 |     ticks_count: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 33 |     updating_actors: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_texture`, `add_actor`, `add_asteroid`, and `add_sprite` are never used
[INFO] [stdout]    --> src/game.rs:89:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl Game {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn get_texture(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn add_actor(&mut self, actor: Rc<RefCell<Actor>>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn add_asteroid(&mut self, asteroid: Rc<RefCell<Asteroid>>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn add_sprite(&mut self, sprite: Rc<RefCell<SpriteComponent>>) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Active`, `Paused`, and `Dead` are never constructed
[INFO] [stdout]   --> src/actor.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum State {
[INFO] [stdout]    |          ----- variants in this enum
[INFO] [stdout] 10 |     Active,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 11 |     Paused,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 12 |     Dead,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `State` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `state`, `position`, `scale`, `rotation`, `recompute_world_transform`, and `world_transform` are never read
[INFO] [stdout]   --> src/actor.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Actor {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 17 |     state: State,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 18 |     position: Vector2,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 19 |     scale: f32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 20 |     rotation: f32,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 21 |     game: Rc<RefCell<Game>>,
[INFO] [stdout] 22 |     recompute_world_transform: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     components: Vec<Rc<RefCell<dyn Component>>>,
[INFO] [stdout] 24 |     world_transform: Matrix4,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Actor` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/actor.rs:28:12
[INFO] [stdout]     |
[INFO] [stdout]  27 | impl Actor {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  28 |     pub fn new(game: Rc<RefCell<Game>>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn update(&mut self, delta_time: f32) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  52 |     fn update_components(&mut self, delta_time: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     fn update_actor(&mut self, _delta_time: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn process_input(&mut self, key_state: &[u8]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     fn actor_input(&mut self, _key_state: &[u8]) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     fn compute_world_transform(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn add_component(&mut self, component: Rc<RefCell<dyn Component>>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn set_position(&mut self, pos: Vector2) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn set_rotation(&mut self, rotation: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn set_scale(&mut self, scale: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn get_position(&self) -> Vector2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn get_scale(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn get_rotation(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn get_world_transform(&self) -> Matrix4 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn get_forward(&self) -> Vector2 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn get_state(&self) -> &State {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn set_state(&mut self, state: State) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PI` is never used
[INFO] [stdout]  --> src/math.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 |     pub const PI: f32 = 3.1415926535;
[INFO] [stdout]   |               ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TWO_PI` is never used
[INFO] [stdout]  --> src/math.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 |     pub const TWO_PI: f32 = PI * 2.0;
[INFO] [stdout]   |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PI_OVER_2` is never used
[INFO] [stdout]  --> src/math.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 |     pub const PI_OVER_2: f32 = PI / 2.0;
[INFO] [stdout]   |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INFINITY` is never used
[INFO] [stdout]  --> src/math.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 |     pub const INFINITY: f32 = f32::INFINITY;
[INFO] [stdout]   |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NEG_INFINITY` is never used
[INFO] [stdout]  --> src/math.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 |     pub const NEG_INFINITY: f32 = f32::NEG_INFINITY;
[INFO] [stdout]   |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `to_radians` is never used
[INFO] [stdout]   --> src/math.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 |     pub fn to_radians(degrees: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `to_degrees` is never used
[INFO] [stdout]   --> src/math.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub fn to_degrees(radians: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `near_zero` is never used
[INFO] [stdout]   --> src/math.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub fn near_zero(val: f32, epsilon: f32) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `max` is never used
[INFO] [stdout]   --> src/math.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn max<T: PartialOrd>(a: T, b: T) -> T {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `min` is never used
[INFO] [stdout]   --> src/math.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub fn min<T: PartialOrd>(a: T, b: T) -> T {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clamp` is never used
[INFO] [stdout]   --> src/math.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub fn clamp<T: PartialOrd>(value: T, lower: T, upper: T) -> T {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `abs` is never used
[INFO] [stdout]   --> src/math.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub fn abs(value: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cos` is never used
[INFO] [stdout]   --> src/math.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub fn cos(angle: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sin` is never used
[INFO] [stdout]   --> src/math.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub fn sin(angle: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tan` is never used
[INFO] [stdout]   --> src/math.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 |     pub fn tan(angle: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `acos` is never used
[INFO] [stdout]   --> src/math.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 50 |     pub fn acos(value: f32) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `atan2` is never used
[INFO] [stdout]   --> src/math.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub fn atan2(y: f32, x: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cot` is never used
[INFO] [stdout]   --> src/math.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 |     pub fn cot(angle: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lerp` is never used
[INFO] [stdout]   --> src/math.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub fn lerp(a: f32, b: f32, f: f32) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sqrt` is never used
[INFO] [stdout]   --> src/math.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn sqrt(value: f32) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fmod` is never used
[INFO] [stdout]   --> src/math.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub fn fmod(numer: f32, denom: f32) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLACK` is never used
[INFO] [stdout]    --> src/math.rs:956:15
[INFO] [stdout]     |
[INFO] [stdout] 956 |     pub const BLACK: Vector3 = Vector3 { x: 0.0, y: 0.0, z: 0.0 };
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WHITE` is never used
[INFO] [stdout]    --> src/math.rs:957:15
[INFO] [stdout]     |
[INFO] [stdout] 957 |     pub const WHITE: Vector3 = Vector3 { x: 1.0, y: 1.0, z: 1.0 };
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RED` is never used
[INFO] [stdout]    --> src/math.rs:958:15
[INFO] [stdout]     |
[INFO] [stdout] 958 |     pub const RED: Vector3 = Vector3 { x: 1.0, y: 0.0, z: 0.0 };
[INFO] [stdout]     |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GREEN` is never used
[INFO] [stdout]    --> src/math.rs:959:15
[INFO] [stdout]     |
[INFO] [stdout] 959 |     pub const GREEN: Vector3 = Vector3 { x: 0.0, y: 1.0, z: 0.0 };
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLUE` is never used
[INFO] [stdout]    --> src/math.rs:960:15
[INFO] [stdout]     |
[INFO] [stdout] 960 |     pub const BLUE: Vector3 = Vector3 { x: 0.0, y: 0.0, z: 1.0 };
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `YELLOW` is never used
[INFO] [stdout]    --> src/math.rs:961:15
[INFO] [stdout]     |
[INFO] [stdout] 961 |     pub const YELLOW: Vector3 = Vector3 { x: 1.0, y: 1.0, z: 0.0 };
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_YELLOW` is never used
[INFO] [stdout]    --> src/math.rs:962:15
[INFO] [stdout]     |
[INFO] [stdout] 962 |     pub const LIGHT_YELLOW: Vector3 = Vector3 { x: 1.0, y: 1.0, z: 0.88 };
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_BLUE` is never used
[INFO] [stdout]    --> src/math.rs:963:15
[INFO] [stdout]     |
[INFO] [stdout] 963 |     pub const LIGHT_BLUE: Vector3 = Vector3 { x: 0.68, y: 0.85, z: 0.9 };
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_PINK` is never used
[INFO] [stdout]    --> src/math.rs:964:15
[INFO] [stdout]     |
[INFO] [stdout] 964 |     pub const LIGHT_PINK: Vector3 = Vector3 { x: 1.0, y: 0.71, z: 0.76 };
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_GREEN` is never used
[INFO] [stdout]    --> src/math.rs:965:15
[INFO] [stdout]     |
[INFO] [stdout] 965 |     pub const LIGHT_GREEN: Vector3 = Vector3 { x: 0.56, y: 0.93, z: 0.56 };
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process_input`, `update`, and `get_update_order` are never used
[INFO] [stdout]   --> src/component.rs:6:8
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub trait Component {
[INFO] [stdout]    |           --------- associated items in this trait
[INFO] [stdout]  6 |     fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |     fn process_input(&mut self, _key_state: &[u8]) {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 11 |
[INFO] [stdout] 12 |     fn update(&mut self, delta_time: f32);
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 13 |
[INFO] [stdout] 14 |     fn get_update_order(&self) -> i32;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `update_order` is never read
[INFO] [stdout]   --> src/component.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct BaseComponent {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 19 |     pub owner: Rc<RefCell<Actor>>,
[INFO] [stdout] 20 |     pub update_order: i32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BaseComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/component.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl BaseComponent {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] 24 |     pub fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `circle` is never read
[INFO] [stdout]   --> src/asteroid.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Asteroid {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 13 |     actor: Actor,
[INFO] [stdout] 14 |     circle: Option<Rc<CircleComponent>>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Asteroid` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `get_circle` are never used
[INFO] [stdout]   --> src/asteroid.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Asteroid {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(game: Rc<RefCell<Game>>) ->  Rc<RefCell<Self>> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn get_circle(&self) -> Option<Rc<CircleComponent>> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `radius` is never read
[INFO] [stdout]   --> src/circle_component.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub struct CircleComponent {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout]  9 |     base: BaseComponent,
[INFO] [stdout] 10 |     radius: f32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CircleComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `set_radius`, `get_radius`, and `get_center` are never used
[INFO] [stdout]   --> src/circle_component.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl CircleComponent {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(owner: Rc<RefCell<Actor>>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn set_radius(&mut self, radius: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn get_radius(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn get_center(&self) -> Vector2 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `intersect` is never used
[INFO] [stdout]   --> src/circle_component.rs:51:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn intersect(a: &CircleComponent, b: &CircleComponent) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `texture_id`, `width`, and `height` are never read
[INFO] [stdout]   --> src/texture.rs:9:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub struct Texture {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout]  9 |     texture_id: GLuint,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 10 |     width: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 11 |     height: u32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Texture` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `load`, `unload`, `set_active`, `get_width`, and `get_height` are never used
[INFO] [stdout]   --> src/texture.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Texture {
[INFO] [stdout]    | ------------ associated items in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn load(
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn unload(&mut self) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn set_active(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn get_width(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn get_height(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Random` is never constructed
[INFO] [stdout]  --> src/random.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct Random;
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `get_float`, `get_float_range`, `get_int_range`, `get_vector2`, and `get_vector3` are never used
[INFO] [stdout]   --> src/random.rs:7:12
[INFO] [stdout]    |
[INFO] [stdout]  6 | impl Random {
[INFO] [stdout]    | ----------- associated functions in this implementation
[INFO] [stdout]  7 |     pub fn get_float() -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 11 |     pub fn get_float_range(min: f32, max: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     pub fn get_int_range(min: i32, max: i32) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn get_vector2(min: Vector2, max: Vector2) -> Vector2 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn get_vector3(min: Vector3, max: Vector3) -> Vector3 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MoveComponent` is never constructed
[INFO] [stdout]  --> src/move_component.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct MoveComponent {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_angular_speed`, `get_forward_speed`, `set_angular_speed`, and `set_forward_speed` are never used
[INFO] [stdout]   --> src/move_component.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl MoveComponent {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn get_angular_speed(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn get_forward_speed(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn set_angular_speed(&mut self, speed: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn set_forward_speed(&mut self, speed: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `texture`, `draw_order`, `tex_width`, and `tex_height` are never read
[INFO] [stdout]   --> src/sprite_component.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct SpriteComponent {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 10 |     owner: Rc<RefCell<Actor>>,
[INFO] [stdout] 11 |     texture: Option<Rc<RefCell<Texture>>>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 12 |     draw_order: i32,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 13 |     tex_width: i32,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 14 |     tex_height: i32,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpriteComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `draw`, `set_texture`, `get_draw_order`, `get_tex_height`, and `get_tex_width` are never used
[INFO] [stdout]   --> src/sprite_component.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl SpriteComponent {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(owner: Rc<RefCell<Actor>>, draw_order: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn draw(&self, shader: &Shader) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn set_texture(&mut self, texture: Rc<RefCell<Texture>>) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get_draw_order(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn get_tex_height(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn get_tex_width(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Shader` is never constructed
[INFO] [stdout]  --> src/shader.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct Shader {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/shader.rs:14:12
[INFO] [stdout]     |
[INFO] [stdout]  13 | impl Shader {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  14 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  22 |     pub fn load(&mut self, vert_name: &str, frag_name: &str) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn unload(&mut self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn set_active(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  59 |     pub fn set_matrix_uniform(&self, name: &str, matrix: &Matrix4) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     fn compile_shader(&self, file_name: &str, shader_type: u32) -> Result<u32, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     fn is_compiled(&self, shader: u32) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     fn is_valid_program(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InputComponent` is never constructed
[INFO] [stdout]  --> src/input_component.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct InputComponent {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/input_component.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl InputComponent {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn get_max_forward_speed(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn get_max_angular_speed(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn get_forward_key(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn get_back_key(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn get_clockwise_key(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn get_counter_clockwise_key(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn set_max_forward_speed(&mut self, speed: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn set_max_angular_speed(&mut self, speed: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn set_forward_key(&mut self, key: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn set_back_key(&mut self, key: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn set_clockwise_key(&mut self, key: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn set_counter_clockwise_key(&mut self, key: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/game.rs:96:17
[INFO] [stdout]    |
[INFO] [stdout] 96 |             let mut tex = Rc::new(RefCell::new(Texture::new()));
[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: unused variable: `update_order`
[INFO] [stdout]   --> src/circle_component.rs:33:39
[INFO] [stdout]    |
[INFO] [stdout] 33 |     fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self {
[INFO] [stdout]    |                                       ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_update_order`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `context`, `textures`, `window`, `ticks_count`, and `updating_actors` are never read
[INFO] [stdout]   --> src/game.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct Game {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] 21 |     canvas: WindowCanvas,
[INFO] [stdout] 22 |     context: sdl2::video::GLContext,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 23 |     is_running: bool,
[INFO] [stdout] 24 |     textures: HashMap<String, Rc<RefCell<Texture>>>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     window: Option<sdl2::video::Window>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 32 |     ticks_count: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 33 |     updating_actors: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_texture`, `add_actor`, `add_asteroid`, and `add_sprite` are never used
[INFO] [stdout]    --> src/game.rs:89:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl Game {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn get_texture(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn add_actor(&mut self, actor: Rc<RefCell<Actor>>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn add_asteroid(&mut self, asteroid: Rc<RefCell<Asteroid>>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn add_sprite(&mut self, sprite: Rc<RefCell<SpriteComponent>>) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Active`, `Paused`, and `Dead` are never constructed
[INFO] [stdout]   --> src/actor.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum State {
[INFO] [stdout]    |          ----- variants in this enum
[INFO] [stdout] 10 |     Active,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 11 |     Paused,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 12 |     Dead,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `State` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `state`, `position`, `scale`, `rotation`, `recompute_world_transform`, and `world_transform` are never read
[INFO] [stdout]   --> src/actor.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Actor {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 17 |     state: State,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 18 |     position: Vector2,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 19 |     scale: f32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 20 |     rotation: f32,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 21 |     game: Rc<RefCell<Game>>,
[INFO] [stdout] 22 |     recompute_world_transform: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     components: Vec<Rc<RefCell<dyn Component>>>,
[INFO] [stdout] 24 |     world_transform: Matrix4,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Actor` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/actor.rs:28:12
[INFO] [stdout]     |
[INFO] [stdout]  27 | impl Actor {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  28 |     pub fn new(game: Rc<RefCell<Game>>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn update(&mut self, delta_time: f32) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  52 |     fn update_components(&mut self, delta_time: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     fn update_actor(&mut self, _delta_time: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn process_input(&mut self, key_state: &[u8]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     fn actor_input(&mut self, _key_state: &[u8]) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     fn compute_world_transform(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn add_component(&mut self, component: Rc<RefCell<dyn Component>>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn set_position(&mut self, pos: Vector2) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn set_rotation(&mut self, rotation: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn set_scale(&mut self, scale: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn get_position(&self) -> Vector2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn get_scale(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn get_rotation(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn get_world_transform(&self) -> Matrix4 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn get_forward(&self) -> Vector2 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn get_state(&self) -> &State {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn set_state(&mut self, state: State) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PI` is never used
[INFO] [stdout]  --> src/math.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 |     pub const PI: f32 = 3.1415926535;
[INFO] [stdout]   |               ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TWO_PI` is never used
[INFO] [stdout]  --> src/math.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 |     pub const TWO_PI: f32 = PI * 2.0;
[INFO] [stdout]   |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PI_OVER_2` is never used
[INFO] [stdout]  --> src/math.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 |     pub const PI_OVER_2: f32 = PI / 2.0;
[INFO] [stdout]   |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INFINITY` is never used
[INFO] [stdout]  --> src/math.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 |     pub const INFINITY: f32 = f32::INFINITY;
[INFO] [stdout]   |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NEG_INFINITY` is never used
[INFO] [stdout]  --> src/math.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 |     pub const NEG_INFINITY: f32 = f32::NEG_INFINITY;
[INFO] [stdout]   |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `to_radians` is never used
[INFO] [stdout]   --> src/math.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 |     pub fn to_radians(degrees: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `to_degrees` is never used
[INFO] [stdout]   --> src/math.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub fn to_degrees(radians: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `near_zero` is never used
[INFO] [stdout]   --> src/math.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub fn near_zero(val: f32, epsilon: f32) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `max` is never used
[INFO] [stdout]   --> src/math.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn max<T: PartialOrd>(a: T, b: T) -> T {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `min` is never used
[INFO] [stdout]   --> src/math.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub fn min<T: PartialOrd>(a: T, b: T) -> T {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clamp` is never used
[INFO] [stdout]   --> src/math.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub fn clamp<T: PartialOrd>(value: T, lower: T, upper: T) -> T {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `abs` is never used
[INFO] [stdout]   --> src/math.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub fn abs(value: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cos` is never used
[INFO] [stdout]   --> src/math.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub fn cos(angle: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sin` is never used
[INFO] [stdout]   --> src/math.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub fn sin(angle: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tan` is never used
[INFO] [stdout]   --> src/math.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 |     pub fn tan(angle: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `acos` is never used
[INFO] [stdout]   --> src/math.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 50 |     pub fn acos(value: f32) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `atan2` is never used
[INFO] [stdout]   --> src/math.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub fn atan2(y: f32, x: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cot` is never used
[INFO] [stdout]   --> src/math.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 |     pub fn cot(angle: f32) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lerp` is never used
[INFO] [stdout]   --> src/math.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub fn lerp(a: f32, b: f32, f: f32) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sqrt` is never used
[INFO] [stdout]   --> src/math.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn sqrt(value: f32) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fmod` is never used
[INFO] [stdout]   --> src/math.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub fn fmod(numer: f32, denom: f32) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLACK` is never used
[INFO] [stdout]    --> src/math.rs:956:15
[INFO] [stdout]     |
[INFO] [stdout] 956 |     pub const BLACK: Vector3 = Vector3 { x: 0.0, y: 0.0, z: 0.0 };
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WHITE` is never used
[INFO] [stdout]    --> src/math.rs:957:15
[INFO] [stdout]     |
[INFO] [stdout] 957 |     pub const WHITE: Vector3 = Vector3 { x: 1.0, y: 1.0, z: 1.0 };
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RED` is never used
[INFO] [stdout]    --> src/math.rs:958:15
[INFO] [stdout]     |
[INFO] [stdout] 958 |     pub const RED: Vector3 = Vector3 { x: 1.0, y: 0.0, z: 0.0 };
[INFO] [stdout]     |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GREEN` is never used
[INFO] [stdout]    --> src/math.rs:959:15
[INFO] [stdout]     |
[INFO] [stdout] 959 |     pub const GREEN: Vector3 = Vector3 { x: 0.0, y: 1.0, z: 0.0 };
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLUE` is never used
[INFO] [stdout]    --> src/math.rs:960:15
[INFO] [stdout]     |
[INFO] [stdout] 960 |     pub const BLUE: Vector3 = Vector3 { x: 0.0, y: 0.0, z: 1.0 };
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `YELLOW` is never used
[INFO] [stdout]    --> src/math.rs:961:15
[INFO] [stdout]     |
[INFO] [stdout] 961 |     pub const YELLOW: Vector3 = Vector3 { x: 1.0, y: 1.0, z: 0.0 };
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_YELLOW` is never used
[INFO] [stdout]    --> src/math.rs:962:15
[INFO] [stdout]     |
[INFO] [stdout] 962 |     pub const LIGHT_YELLOW: Vector3 = Vector3 { x: 1.0, y: 1.0, z: 0.88 };
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_BLUE` is never used
[INFO] [stdout]    --> src/math.rs:963:15
[INFO] [stdout]     |
[INFO] [stdout] 963 |     pub const LIGHT_BLUE: Vector3 = Vector3 { x: 0.68, y: 0.85, z: 0.9 };
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_PINK` is never used
[INFO] [stdout]    --> src/math.rs:964:15
[INFO] [stdout]     |
[INFO] [stdout] 964 |     pub const LIGHT_PINK: Vector3 = Vector3 { x: 1.0, y: 0.71, z: 0.76 };
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_GREEN` is never used
[INFO] [stdout]    --> src/math.rs:965:15
[INFO] [stdout]     |
[INFO] [stdout] 965 |     pub const LIGHT_GREEN: Vector3 = Vector3 { x: 0.56, y: 0.93, z: 0.56 };
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process_input`, `update`, and `get_update_order` are never used
[INFO] [stdout]   --> src/component.rs:6:8
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub trait Component {
[INFO] [stdout]    |           --------- associated items in this trait
[INFO] [stdout]  6 |     fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |     fn process_input(&mut self, _key_state: &[u8]) {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 11 |
[INFO] [stdout] 12 |     fn update(&mut self, delta_time: f32);
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 13 |
[INFO] [stdout] 14 |     fn get_update_order(&self) -> i32;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `update_order` is never read
[INFO] [stdout]   --> src/component.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct BaseComponent {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 19 |     pub owner: Rc<RefCell<Actor>>,
[INFO] [stdout] 20 |     pub update_order: i32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BaseComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/component.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl BaseComponent {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] 24 |     pub fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `circle` is never read
[INFO] [stdout]   --> src/asteroid.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Asteroid {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 13 |     actor: Actor,
[INFO] [stdout] 14 |     circle: Option<Rc<CircleComponent>>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Asteroid` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `get_circle` are never used
[INFO] [stdout]   --> src/asteroid.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Asteroid {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(game: Rc<RefCell<Game>>) ->  Rc<RefCell<Self>> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn get_circle(&self) -> Option<Rc<CircleComponent>> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `radius` is never read
[INFO] [stdout]   --> src/circle_component.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub struct CircleComponent {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout]  9 |     base: BaseComponent,
[INFO] [stdout] 10 |     radius: f32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CircleComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `set_radius`, `get_radius`, and `get_center` are never used
[INFO] [stdout]   --> src/circle_component.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl CircleComponent {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(owner: Rc<RefCell<Actor>>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn set_radius(&mut self, radius: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn get_radius(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn get_center(&self) -> Vector2 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `intersect` is never used
[INFO] [stdout]   --> src/circle_component.rs:51:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn intersect(a: &CircleComponent, b: &CircleComponent) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `texture_id`, `width`, and `height` are never read
[INFO] [stdout]   --> src/texture.rs:9:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub struct Texture {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout]  9 |     texture_id: GLuint,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 10 |     width: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 11 |     height: u32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Texture` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `load`, `unload`, `set_active`, `get_width`, and `get_height` are never used
[INFO] [stdout]   --> src/texture.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Texture {
[INFO] [stdout]    | ------------ associated items in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn load(
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn unload(&mut self) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn set_active(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn get_width(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn get_height(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Random` is never constructed
[INFO] [stdout]  --> src/random.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct Random;
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `get_float`, `get_float_range`, `get_int_range`, `get_vector2`, and `get_vector3` are never used
[INFO] [stdout]   --> src/random.rs:7:12
[INFO] [stdout]    |
[INFO] [stdout]  6 | impl Random {
[INFO] [stdout]    | ----------- associated functions in this implementation
[INFO] [stdout]  7 |     pub fn get_float() -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 11 |     pub fn get_float_range(min: f32, max: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     pub fn get_int_range(min: i32, max: i32) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn get_vector2(min: Vector2, max: Vector2) -> Vector2 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn get_vector3(min: Vector3, max: Vector3) -> Vector3 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MoveComponent` is never constructed
[INFO] [stdout]  --> src/move_component.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct MoveComponent {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_angular_speed`, `get_forward_speed`, `set_angular_speed`, and `set_forward_speed` are never used
[INFO] [stdout]   --> src/move_component.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl MoveComponent {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn get_angular_speed(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn get_forward_speed(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn set_angular_speed(&mut self, speed: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn set_forward_speed(&mut self, speed: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `texture`, `draw_order`, `tex_width`, and `tex_height` are never read
[INFO] [stdout]   --> src/sprite_component.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct SpriteComponent {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 10 |     owner: Rc<RefCell<Actor>>,
[INFO] [stdout] 11 |     texture: Option<Rc<RefCell<Texture>>>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 12 |     draw_order: i32,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 13 |     tex_width: i32,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 14 |     tex_height: i32,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpriteComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `draw`, `set_texture`, `get_draw_order`, `get_tex_height`, and `get_tex_width` are never used
[INFO] [stdout]   --> src/sprite_component.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl SpriteComponent {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(owner: Rc<RefCell<Actor>>, draw_order: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn draw(&self, shader: &Shader) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn set_texture(&mut self, texture: Rc<RefCell<Texture>>) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get_draw_order(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn get_tex_height(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn get_tex_width(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Shader` is never constructed
[INFO] [stdout]  --> src/shader.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct Shader {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/shader.rs:14:12
[INFO] [stdout]     |
[INFO] [stdout]  13 | impl Shader {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  14 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  22 |     pub fn load(&mut self, vert_name: &str, frag_name: &str) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn unload(&mut self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn set_active(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  59 |     pub fn set_matrix_uniform(&self, name: &str, matrix: &Matrix4) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     fn compile_shader(&self, file_name: &str, shader_type: u32) -> Result<u32, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     fn is_compiled(&self, shader: u32) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     fn is_valid_program(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InputComponent` is never constructed
[INFO] [stdout]  --> src/input_component.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct InputComponent {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/input_component.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl InputComponent {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(owner: Rc<RefCell<Actor>>, update_order: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn get_max_forward_speed(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn get_max_angular_speed(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn get_forward_key(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn get_back_key(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn get_clockwise_key(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn get_counter_clockwise_key(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn set_max_forward_speed(&mut self, speed: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn set_max_angular_speed(&mut self, speed: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn set_forward_key(&mut self, key: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn set_back_key(&mut self, key: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn set_clockwise_key(&mut self, key: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn set_counter_clockwise_key(&mut self, key: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 55.71s
[INFO] running `Command { std: "docker" "inspect" "d6cb52b111a8aef18a62f79c915ca635b941aa7c8ecb371fe2f0ebc2461baa81", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d6cb52b111a8aef18a62f79c915ca635b941aa7c8ecb371fe2f0ebc2461baa81", kill_on_drop: false }`
[INFO] [stdout] d6cb52b111a8aef18a62f79c915ca635b941aa7c8ecb371fe2f0ebc2461baa81
