[INFO] cloning repository https://github.com/BurritoBandit28/NEA-Project
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/BurritoBandit28/NEA-Project" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBurritoBandit28%2FNEA-Project", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBurritoBandit28%2FNEA-Project'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 1efe50101e1b0c31f05bbecd137d77edef211f0c
[INFO] checking BurritoBandit28/NEA-Project against master#779e19d8baa3e3625bd4fc5c85cbb2ad47b43155 for pr-147589-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBurritoBandit28%2FNEA-Project" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/BurritoBandit28/NEA-Project
[INFO] finished tweaking git repo https://github.com/BurritoBandit28/NEA-Project
[INFO] tweaked toml for git repo https://github.com/BurritoBandit28/NEA-Project written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/BurritoBandit28/NEA-Project on toolchain 779e19d8baa3e3625bd4fc5c85cbb2ad47b43155
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/BurritoBandit28/NEA-Project 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" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded thread-id v4.2.2
[INFO] [stderr]   Downloaded num v0.4.2
[INFO] [stderr]   Downloaded ravif v0.11.8
[INFO] [stderr]   Downloaded open v5.3.0
[INFO] [stderr]   Downloaded sdl2 v0.36.0
[INFO] [stderr]   Downloaded gjson v0.8.1
[INFO] [stderr]   Downloaded sdl2-sys v0.36.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 2858d92843e35e61a8d45311ae1865ab29c877c04955fb60922d22d33c0fea83
[INFO] running `Command { std: "docker" "start" "-a" "2858d92843e35e61a8d45311ae1865ab29c877c04955fb60922d22d33c0fea83", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "2858d92843e35e61a8d45311ae1865ab29c877c04955fb60922d22d33c0fea83", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2858d92843e35e61a8d45311ae1865ab29c877c04955fb60922d22d33c0fea83", kill_on_drop: false }`
[INFO] [stdout] 2858d92843e35e61a8d45311ae1865ab29c877c04955fb60922d22d33c0fea83
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] d877f52186930a4ed305fd55b814c225995a0b8779d841ab1405622bbc2e5c43
[INFO] running `Command { std: "docker" "start" "-a" "d877f52186930a4ed305fd55b814c225995a0b8779d841ab1405622bbc2e5c43", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.48
[INFO] [stderr]    Compiling num-traits v0.2.18
[INFO] [stderr]    Compiling crossbeam-utils v0.8.20
[INFO] [stderr]     Checking arrayvec v0.7.4
[INFO] [stderr]     Checking bytemuck v1.16.1
[INFO] [stderr]    Compiling lock_api v0.4.12
[INFO] [stderr]    Compiling num-bigint v0.4.4
[INFO] [stderr]    Compiling num-rational v0.4.1
[INFO] [stderr]    Compiling anyhow v1.0.82
[INFO] [stderr]    Compiling thiserror v1.0.62
[INFO] [stderr]     Checking miniz_oxide v0.7.4
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]     Checking getrandom v0.2.15
[INFO] [stderr]    Compiling built v0.7.4
[INFO] [stderr]     Checking aligned-vec v0.5.0
[INFO] [stderr]     Checking nom v7.1.3
[INFO] [stderr]    Compiling sdl2-sys v0.36.0
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking encoding_rs v0.8.34
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking itertools v0.12.1
[INFO] [stderr]    Compiling simd_helpers v0.1.0
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking flate2 v1.0.30
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling rav1e v0.7.1
[INFO] [stderr]    Compiling cpal v0.15.3
[INFO] [stderr]    Compiling serde_json v1.0.125
[INFO] [stderr]     Checking imgref v1.10.1
[INFO] [stderr]     Checking bitstream-io v2.5.0
[INFO] [stderr]     Checking destructure_traitobject v0.2.0
[INFO] [stderr]    Compiling noop_proc_macro v0.3.0
[INFO] [stderr]     Checking indexmap v2.5.0
[INFO] [stderr]     Checking unsafe-any-ors v1.0.0
[INFO] [stderr]     Checking tinyvec v1.8.1
[INFO] [stderr]     Checking alsa v0.9.1
[INFO] [stderr]     Checking crossbeam-epoch v0.9.18
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking loop9 v0.1.5
[INFO] [stderr]     Checking flume v0.11.0
[INFO] [stderr]     Checking avif-serialize v0.8.1
[INFO] [stderr]     Checking ogg v0.8.0
[INFO] [stderr]     Checking rgb v0.8.45
[INFO] [stderr]     Checking is-docker v0.2.0
[INFO] [stderr]     Checking jpeg-decoder v0.3.1
[INFO] [stderr]     Checking crossbeam-deque v0.8.5
[INFO] [stderr]    Compiling sdl2 v0.36.0
[INFO] [stderr]     Checking dasp_sample v0.11.0
[INFO] [stderr]     Checking zune-jpeg v0.4.11
[INFO] [stderr]     Checking rayon-core v1.12.1
[INFO] [stderr]     Checking png v0.17.13
[INFO] [stderr]     Checking is-wsl v0.4.0
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]     Checking typemap-ors v1.0.0
[INFO] [stderr]     Checking lewton v0.10.2
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking v_frame v0.3.8
[INFO] [stderr]     Checking rayon v1.10.0
[INFO] [stderr]     Checking ordered-float v2.10.1
[INFO] [stderr]     Checking tiff v0.9.1
[INFO] [stderr]     Checking num-iter v0.1.44
[INFO] [stderr]     Checking exr v1.72.0
[INFO] [stderr]     Checking chrono v0.4.38
[INFO] [stderr]     Checking num-complex v0.4.5
[INFO] [stderr]     Checking qoi v0.4.1
[INFO] [stderr]     Checking thread-id v4.2.2
[INFO] [stderr]     Checking hound v3.5.1
[INFO] [stderr]     Checking pathdiff v0.2.1
[INFO] [stderr]     Checking claxon v0.4.3
[INFO] [stderr]     Checking arc-swap v1.7.1
[INFO] [stderr]     Checking log-mdc v0.1.0
[INFO] [stderr]     Checking open v5.3.0
[INFO] [stderr]     Checking gjson v0.8.1
[INFO] [stderr]     Checking num v0.4.2
[INFO] [stderr]    Compiling serde_derive v1.0.204
[INFO] [stderr]    Compiling thiserror-impl v1.0.62
[INFO] [stderr]    Compiling profiling-procmacros v1.0.15
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]    Compiling arg_enum_proc_macro v0.3.4
[INFO] [stderr]    Compiling uuid-macro-internal v1.10.0
[INFO] [stderr]     Checking maybe-rayon v0.1.1
[INFO] [stderr]     Checking profiling v1.0.15
[INFO] [stderr]     Checking uuid v1.10.0
[INFO] [stderr]    Compiling derivative v2.2.0
[INFO] [stderr]     Checking image-webp v0.1.2
[INFO] [stderr]     Checking serde v1.0.204
[INFO] [stderr]     Checking log v0.4.22
[INFO] [stderr]     Checking serde-value v0.7.0
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking symphonia-core v0.5.4
[INFO] [stderr]     Checking av1-grain v0.2.3
[INFO] [stderr]     Checking symphonia-metadata v0.5.4
[INFO] [stderr]     Checking symphonia-bundle-mp3 v0.5.4
[INFO] [stderr]     Checking log4rs v1.3.0
[INFO] [stderr]     Checking symphonia v0.5.4
[INFO] [stderr]     Checking rodio v0.20.1
[INFO] [stderr]     Checking ravif v0.11.8
[INFO] [stderr]     Checking image v0.25.1
[INFO] [stderr]     Checking NEA-Project v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::cmp::PartialEq`
[INFO] [stdout]  --> src/entities/player.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::cmp::PartialEq;
[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: `Arc`
[INFO] [stdout]  --> src/entities/player.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `EventPollIterator`
[INFO] [stdout]  --> src/entities/player.rs:5:26
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::event::{Event, EventPollIterator};
[INFO] [stdout]   |                          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::EventPump`
[INFO] [stdout]  --> src/entities/player.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use sdl2::EventPump;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Keycode`
[INFO] [stdout]  --> src/entities/player.rs:7:22
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sdl2::keyboard::{Keycode, Scancode};
[INFO] [stdout]   |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TileSize`
[INFO] [stdout]   --> src/entities/player.rs:15:19
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::tile::{TileSize, TileType};
[INFO] [stdout]    |                   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::integer::sqrt`
[INFO] [stdout]  --> src/entities/turret.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use num::integer::sqrt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/entities/turret.rs:115:13
[INFO] [stdout]     |
[INFO] [stdout] 115 | /             /// Here there is a check to see if the timer has exceeded 5 seconds.
[INFO] [stdout] 116 | |             /// The reason why it doesn't say "``self.timer == 5.0``" is because the timer is a sum of the time in seconds between frames.
[INFO] [stdout] 117 | |             /// This means it could be that the timer never actually equals 5 seconds, but by using the greater than operator, the moment 5 seconds has passed, the operation is run.
[INFO] [stdout]     | |_____________________________________________________________________________________________________________________________________________________________________________________^
[INFO] [stdout] 118 | /             if self.timer > 0.5 {
[INFO] [stdout] 119 | |                 self.timer = 0.0;
[INFO] [stdout] 120 | |                 let _ = player.change_health(-1.0);
[INFO] [stdout] 121 | |                 game.play_sound(ResourceLocation::new("game", "sounds/entity/turret/turret_gunshot.ogg"))
[INFO] [stdout] 122 | |             }
[INFO] [stdout]     | |_____________- rustdoc does not generate documentation for expressions
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout]     = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::abs`
[INFO] [stdout]  --> src/entities/floaty_bomb.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use num::abs;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/entities/floaty_bomb.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `image::math::Rect`
[INFO] [stdout]  --> src/entities/explosion.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use image::math::Rect;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Entity`
[INFO] [stdout]  --> src/entities.rs:8:21
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::entity::{Entity};
[INFO] [stdout]   |                     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Pointer`
[INFO] [stdout]  --> src/entity.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::fmt::Pointer;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/entity.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/entity.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::event::EventPollIterator`
[INFO] [stdout]  --> src/entity.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::event::EventPollIterator;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::rect::Rect`
[INFO] [stdout]  --> src/entity.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use sdl2::rect::Rect;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entities::player::Player`
[INFO] [stdout]  --> src/entity.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::entities::player::Player;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entities::turret::Turret`
[INFO] [stdout]  --> src/entity.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::entities::turret::Turret;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::game::Game`
[INFO] [stdout]  --> src/entity.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::game::Game;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/game.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/game.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/game.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::Month`
[INFO] [stdout]  --> src/game.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use chrono::Month;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `enemy`
[INFO] [stdout]   --> src/game.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::entities::{enemy, player, turret};
[INFO] [stdout]    |                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TileGraph`
[INFO] [stdout]   --> src/game.rs:14:27
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::level::{Level, TileGraph};
[INFO] [stdout]    |                           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `entities` and `sound`
[INFO] [stdout]   --> src/game.rs:15:13
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::{entities, render, sound};
[INFO] [stdout]    |             ^^^^^^^^          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TileSize`
[INFO] [stdout]   --> src/game.rs:21:25
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::tile::{Tile, TileSize};
[INFO] [stdout]    |                         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Hash` and `Hasher`
[INFO] [stdout]  --> src/render.rs:5:17
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::hash::{Hash, Hasher};
[INFO] [stdout]   |                 ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::iter::Copied`
[INFO] [stdout]  --> src/render.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::iter::Copied;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Scancode::I`
[INFO] [stdout]  --> src/render.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use sdl2::keyboard::Scancode::I;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::libc::stat`
[INFO] [stdout]   --> src/render.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use sdl2::libc::stat;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::pixels::Color`
[INFO] [stdout]   --> src/render.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use sdl2::pixels::Color;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::render`
[INFO] [stdout]   --> src/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::render;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::SystemTime`
[INFO] [stdout]  --> src/utils.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::SystemTime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Level`, `Metadata`, and `Record`
[INFO] [stdout]  --> src/utils.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | use log::{Level, LevelFilter, Metadata, Record};
[INFO] [stdout]   |           ^^^^^               ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sqrt`
[INFO] [stdout]   --> src/utils.rs:11:20
[INFO] [stdout]    |
[INFO] [stdout] 11 | use num::integer::{sqrt, Roots};
[INFO] [stdout]    |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::pow`
[INFO] [stdout]   --> src/utils.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use num::pow;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::cmp::PartialEq`
[INFO] [stdout]  --> src/level.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::cmp::PartialEq;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `image::imageops::tile`
[INFO] [stdout]  --> src/level.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use image::imageops::tile;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Canvas`
[INFO] [stdout]  --> src/level.rs:5:20
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::render::{Canvas, Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::game::Game`
[INFO] [stdout]  --> src/level.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::game::Game;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::resource_location::ResourceLocation`
[INFO] [stdout]  --> src/level.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::resource_location::ResourceLocation;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::utils::get_dist`
[INFO] [stdout]  --> src/level.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::utils::get_dist;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/level.rs:57:20
[INFO] [stdout]    |
[INFO] [stdout] 57 |         let wall = (tiles.get("game:tiles/wall.json").unwrap().clone());
[INFO] [stdout]    |                    ^                                                  ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 57 -         let wall = (tiles.get("game:tiles/wall.json").unwrap().clone());
[INFO] [stdout] 57 +         let wall = tiles.get("game:tiles/wall.json").unwrap().clone() ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/level.rs:58:21
[INFO] [stdout]    |
[INFO] [stdout] 58 |         let floor = (tiles.get("game:tiles/floor.json").unwrap().clone());
[INFO] [stdout]    |                     ^                                                   ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 58 -         let floor = (tiles.get("game:tiles/floor.json").unwrap().clone());
[INFO] [stdout] 58 +         let floor = tiles.get("game:tiles/floor.json").unwrap().clone() ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Scancode::S`
[INFO] [stdout]  --> src/tile.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sdl2::keyboard::Scancode::S;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Canvas`
[INFO] [stdout]  --> src/tile.rs:5:20
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::render::{Canvas, Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/source_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/play_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/widgets/play_widget.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::room_editor_screen::RoomEditorScreen`
[INFO] [stdout]  --> src/widgets/play_widget.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::screens::room_editor_screen::RoomEditorScreen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/editor_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/widgets/editor_widget.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::main_menu_screen`
[INFO] [stdout]  --> src/widgets/editor_widget.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::screens::main_menu_screen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::warn`
[INFO] [stdout]  --> src/widgets/enum_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use log::warn;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/widgets/enum_widget.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::err_widget::ErrWidget`
[INFO] [stdout]  --> src/widgets/enum_widget.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::widgets::err_widget::ErrWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/err_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/widgets/err_widget.rs:2:18
[INFO] [stdout]   |
[INFO] [stdout] 2 | use log::{error, warn};
[INFO] [stdout]   |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/death_message.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::clamp`
[INFO] [stdout]  --> src/widgets/death_message.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use num::clamp;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Texture` and `WindowCanvas`
[INFO] [stdout]  --> src/widgets/death_message.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sdl2::render::{Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::render`
[INFO] [stdout]  --> src/widgets/death_message.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::render;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::play_widget::PlayWidget`
[INFO] [stdout]   --> src/widgets/death_message.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::widgets::play_widget::PlayWidget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::clamp`
[INFO] [stdout]  --> src/widgets/score_widget.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use num::clamp;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entity::Entity`
[INFO] [stdout]  --> src/widgets/score_widget.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::entity::Entity;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::play_widget::PlayWidget`
[INFO] [stdout]   --> src/widgets/score_widget.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::widgets::play_widget::PlayWidget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/widgets/score_widget.rs:96:109
[INFO] [stdout]    |
[INFO] [stdout] 96 |                 d_ass.resource_location = ResourceLocation::new("game", "gui/widgets/debug_background.png");;
[INFO] [stdout]    |                                                                                                             ^ help: remove this semicolon
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/quit_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/widgets/quit_widget.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screen::Screen`
[INFO] [stdout]  --> src/widgets/quit_widget.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::screen::Screen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::hud_screen::HudScreen`
[INFO] [stdout]  --> src/widgets/quit_widget.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::screens::hud_screen::HudScreen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::room_editor_screen::RoomEditorScreen`
[INFO] [stdout]   --> src/widgets/quit_widget.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::screens::room_editor_screen::RoomEditorScreen;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widget::Widget`
[INFO] [stdout]   --> src/widgets.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::widget::Widget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::D`
[INFO] [stdout]  --> src/screens/room_editor_screen.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::keyboard::Keycode::D;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Texture` and `WindowCanvas`
[INFO] [stdout]  --> src/screens/room_editor_screen.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 | use sdl2::render::{Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/screens/hud_screen.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::event::Event`
[INFO] [stdout]  --> src/screens/hud_screen.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use sdl2::event::Event;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Texture` and `WindowCanvas`
[INFO] [stdout]  --> src/screens/hud_screen.rs:3:20
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sdl2::render::{Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::editor_widget::EditorWidget`
[INFO] [stdout]  --> src/screens/hud_screen.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::widgets::editor_widget::EditorWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::play_widget::PlayWidget`
[INFO] [stdout]  --> src/screens/hud_screen.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::widgets::play_widget::PlayWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::source_widget::SourceWidget`
[INFO] [stdout]   --> src/screens/hud_screen.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::widgets::source_widget::SourceWidget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::player_health_widget::PlayerHealthWidget`
[INFO] [stdout]  --> src/screens/you_died.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::widgets::player_health_widget::PlayerHealthWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::source_widget::SourceWidget`
[INFO] [stdout]  --> src/screens/you_died.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::widgets::source_widget::SourceWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screen::Screen`
[INFO] [stdout]  --> src/screens.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::screen::Screen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::game::Game`
[INFO] [stdout]  --> src/widget.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::game::Game;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/sound.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Mutex`
[INFO] [stdout]  --> src/sound.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `once_cell::sync::OnceCell`
[INFO] [stdout]  --> src/sound.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use once_cell::sync::OnceCell;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rodio::cpal::Stream`
[INFO] [stdout]  --> src/sound.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use rodio::cpal::Stream;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `env`
[INFO] [stdout]   --> src/main.rs:18:11
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::{env, fs};
[INFO] [stdout]    |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::hash::Hash`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use std::hash::Hash;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]   --> src/main.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::io::BufReader;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]   --> src/main.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use std::ops::DerefMut;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/main.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `enemy` and `player`
[INFO] [stdout]   --> src/main.rs:24:23
[INFO] [stdout]    |
[INFO] [stdout] 24 | use crate::entities::{enemy, player};
[INFO] [stdout]    |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::main_menu_screen`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use crate::screens::main_menu_screen;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entity::Entity`
[INFO] [stdout]   --> src/main.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | use crate::entity::Entity;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::clamp`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use num::clamp;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::event::Event`
[INFO] [stdout]   --> src/main.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use sdl2::event::Event;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode`
[INFO] [stdout]   --> src/main.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | use sdl2::keyboard::Keycode;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gjson::Value`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use gjson::Value;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::event::Event::KeyDown`
[INFO] [stdout]   --> src/main.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use sdl2::event::Event::KeyDown;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::level::Level`
[INFO] [stdout]   --> src/main.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | use crate::level::Level;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::render::AssetData`
[INFO] [stdout]   --> src/main.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | use crate::render::AssetData;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widget::Alignment`
[INFO] [stdout]   --> src/main.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 46 | use crate::widget::Alignment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::source_widget`
[INFO] [stdout]   --> src/main.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | use crate::widgets::source_widget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::source_widget::SourceWidget`
[INFO] [stdout]   --> src/main.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | use crate::widgets::source_widget::SourceWidget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/main.rs:284:5
[INFO] [stdout]     |
[INFO] [stdout] 284 | /     /// Delta refers to the time taken between showing two frames. This value is often used for physics related operations, as this allow...
[INFO] [stdout] 285 | |     /// You can see that happening in [`Entity::physics`]
[INFO] [stdout]     | |_________________________________________________________^
[INFO] [stdout] 286 |       // initiate delta
[INFO] [stdout] 287 |       let mut delta: f32 = 0.0;
[INFO] [stdout]     |       ------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::cmp::PartialEq`
[INFO] [stdout]  --> src/entities/player.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::cmp::PartialEq;
[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: `Arc`
[INFO] [stdout]  --> src/entities/player.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `EventPollIterator`
[INFO] [stdout]  --> src/entities/player.rs:5:26
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::event::{Event, EventPollIterator};
[INFO] [stdout]   |                          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::EventPump`
[INFO] [stdout]  --> src/entities/player.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use sdl2::EventPump;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Keycode`
[INFO] [stdout]  --> src/entities/player.rs:7:22
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sdl2::keyboard::{Keycode, Scancode};
[INFO] [stdout]   |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TileSize`
[INFO] [stdout]   --> src/entities/player.rs:15:19
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::tile::{TileSize, TileType};
[INFO] [stdout]    |                   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::integer::sqrt`
[INFO] [stdout]  --> src/entities/turret.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use num::integer::sqrt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/entities/turret.rs:115:13
[INFO] [stdout]     |
[INFO] [stdout] 115 | /             /// Here there is a check to see if the timer has exceeded 5 seconds.
[INFO] [stdout] 116 | |             /// The reason why it doesn't say "``self.timer == 5.0``" is because the timer is a sum of the time in seconds between frames.
[INFO] [stdout] 117 | |             /// This means it could be that the timer never actually equals 5 seconds, but by using the greater than operator, the moment 5 seconds has passed, the operation is run.
[INFO] [stdout]     | |_____________________________________________________________________________________________________________________________________________________________________________________^
[INFO] [stdout] 118 | /             if self.timer > 0.5 {
[INFO] [stdout] 119 | |                 self.timer = 0.0;
[INFO] [stdout] 120 | |                 let _ = player.change_health(-1.0);
[INFO] [stdout] 121 | |                 game.play_sound(ResourceLocation::new("game", "sounds/entity/turret/turret_gunshot.ogg"))
[INFO] [stdout] 122 | |             }
[INFO] [stdout]     | |_____________- rustdoc does not generate documentation for expressions
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout]     = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::abs`
[INFO] [stdout]  --> src/entities/floaty_bomb.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use num::abs;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/entities/floaty_bomb.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `image::math::Rect`
[INFO] [stdout]  --> src/entities/explosion.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use image::math::Rect;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Entity`
[INFO] [stdout]  --> src/entities.rs:8:21
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::entity::{Entity};
[INFO] [stdout]   |                     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Pointer`
[INFO] [stdout]  --> src/entity.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::fmt::Pointer;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/entity.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/entity.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::event::EventPollIterator`
[INFO] [stdout]  --> src/entity.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::event::EventPollIterator;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::rect::Rect`
[INFO] [stdout]  --> src/entity.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use sdl2::rect::Rect;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entities::player::Player`
[INFO] [stdout]  --> src/entity.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::entities::player::Player;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entities::turret::Turret`
[INFO] [stdout]  --> src/entity.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::entities::turret::Turret;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::game::Game`
[INFO] [stdout]  --> src/entity.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::game::Game;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/game.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/game.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/game.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::Month`
[INFO] [stdout]  --> src/game.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use chrono::Month;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `enemy`
[INFO] [stdout]   --> src/game.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::entities::{enemy, player, turret};
[INFO] [stdout]    |                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TileGraph`
[INFO] [stdout]   --> src/game.rs:14:27
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::level::{Level, TileGraph};
[INFO] [stdout]    |                           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `entities` and `sound`
[INFO] [stdout]   --> src/game.rs:15:13
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::{entities, render, sound};
[INFO] [stdout]    |             ^^^^^^^^          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TileSize`
[INFO] [stdout]   --> src/game.rs:21:25
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::tile::{Tile, TileSize};
[INFO] [stdout]    |                         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Hash` and `Hasher`
[INFO] [stdout]  --> src/render.rs:5:17
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::hash::{Hash, Hasher};
[INFO] [stdout]   |                 ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::iter::Copied`
[INFO] [stdout]  --> src/render.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::iter::Copied;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Scancode::I`
[INFO] [stdout]  --> src/render.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use sdl2::keyboard::Scancode::I;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::libc::stat`
[INFO] [stdout]   --> src/render.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use sdl2::libc::stat;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::pixels::Color`
[INFO] [stdout]   --> src/render.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use sdl2::pixels::Color;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::render`
[INFO] [stdout]   --> src/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::render;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::SystemTime`
[INFO] [stdout]  --> src/utils.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::SystemTime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Level`, `Metadata`, and `Record`
[INFO] [stdout]  --> src/utils.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | use log::{Level, LevelFilter, Metadata, Record};
[INFO] [stdout]   |           ^^^^^               ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sqrt`
[INFO] [stdout]   --> src/utils.rs:11:20
[INFO] [stdout]    |
[INFO] [stdout] 11 | use num::integer::{sqrt, Roots};
[INFO] [stdout]    |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::pow`
[INFO] [stdout]   --> src/utils.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use num::pow;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::cmp::PartialEq`
[INFO] [stdout]  --> src/level.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::cmp::PartialEq;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `image::imageops::tile`
[INFO] [stdout]  --> src/level.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use image::imageops::tile;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Canvas`
[INFO] [stdout]  --> src/level.rs:5:20
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::render::{Canvas, Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::game::Game`
[INFO] [stdout]  --> src/level.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::game::Game;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::resource_location::ResourceLocation`
[INFO] [stdout]  --> src/level.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::resource_location::ResourceLocation;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::utils::get_dist`
[INFO] [stdout]  --> src/level.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::utils::get_dist;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/level.rs:57:20
[INFO] [stdout]    |
[INFO] [stdout] 57 |         let wall = (tiles.get("game:tiles/wall.json").unwrap().clone());
[INFO] [stdout]    |                    ^                                                  ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 57 -         let wall = (tiles.get("game:tiles/wall.json").unwrap().clone());
[INFO] [stdout] 57 +         let wall = tiles.get("game:tiles/wall.json").unwrap().clone() ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/level.rs:58:21
[INFO] [stdout]    |
[INFO] [stdout] 58 |         let floor = (tiles.get("game:tiles/floor.json").unwrap().clone());
[INFO] [stdout]    |                     ^                                                   ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 58 -         let floor = (tiles.get("game:tiles/floor.json").unwrap().clone());
[INFO] [stdout] 58 +         let floor = tiles.get("game:tiles/floor.json").unwrap().clone() ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Scancode::S`
[INFO] [stdout]  --> src/tile.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sdl2::keyboard::Scancode::S;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Canvas`
[INFO] [stdout]  --> src/tile.rs:5:20
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::render::{Canvas, Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/source_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/play_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/widgets/play_widget.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::room_editor_screen::RoomEditorScreen`
[INFO] [stdout]  --> src/widgets/play_widget.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::screens::room_editor_screen::RoomEditorScreen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/editor_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/widgets/editor_widget.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::main_menu_screen`
[INFO] [stdout]  --> src/widgets/editor_widget.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::screens::main_menu_screen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::warn`
[INFO] [stdout]  --> src/widgets/enum_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use log::warn;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/widgets/enum_widget.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::err_widget::ErrWidget`
[INFO] [stdout]  --> src/widgets/enum_widget.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::widgets::err_widget::ErrWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/err_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/widgets/err_widget.rs:2:18
[INFO] [stdout]   |
[INFO] [stdout] 2 | use log::{error, warn};
[INFO] [stdout]   |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/death_message.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::clamp`
[INFO] [stdout]  --> src/widgets/death_message.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use num::clamp;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Texture` and `WindowCanvas`
[INFO] [stdout]  --> src/widgets/death_message.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sdl2::render::{Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::render`
[INFO] [stdout]  --> src/widgets/death_message.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::render;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::play_widget::PlayWidget`
[INFO] [stdout]   --> src/widgets/death_message.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::widgets::play_widget::PlayWidget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::clamp`
[INFO] [stdout]  --> src/widgets/score_widget.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use num::clamp;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entity::Entity`
[INFO] [stdout]  --> src/widgets/score_widget.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::entity::Entity;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::play_widget::PlayWidget`
[INFO] [stdout]   --> src/widgets/score_widget.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::widgets::play_widget::PlayWidget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/widgets/score_widget.rs:96:109
[INFO] [stdout]    |
[INFO] [stdout] 96 |                 d_ass.resource_location = ResourceLocation::new("game", "gui/widgets/debug_background.png");;
[INFO] [stdout]    |                                                                                                             ^ help: remove this semicolon
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/widgets/quit_widget.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::N`
[INFO] [stdout]  --> src/widgets/quit_widget.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sdl2::keyboard::Keycode::N;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screen::Screen`
[INFO] [stdout]  --> src/widgets/quit_widget.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::screen::Screen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::hud_screen::HudScreen`
[INFO] [stdout]  --> src/widgets/quit_widget.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::screens::hud_screen::HudScreen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::room_editor_screen::RoomEditorScreen`
[INFO] [stdout]   --> src/widgets/quit_widget.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::screens::room_editor_screen::RoomEditorScreen;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widget::Widget`
[INFO] [stdout]   --> src/widgets.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::widget::Widget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode::D`
[INFO] [stdout]  --> src/screens/room_editor_screen.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use sdl2::keyboard::Keycode::D;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Texture` and `WindowCanvas`
[INFO] [stdout]  --> src/screens/room_editor_screen.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 | use sdl2::render::{Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/screens/hud_screen.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::event::Event`
[INFO] [stdout]  --> src/screens/hud_screen.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use sdl2::event::Event;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Texture` and `WindowCanvas`
[INFO] [stdout]  --> src/screens/hud_screen.rs:3:20
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sdl2::render::{Texture, WindowCanvas};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::editor_widget::EditorWidget`
[INFO] [stdout]  --> src/screens/hud_screen.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::widgets::editor_widget::EditorWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::play_widget::PlayWidget`
[INFO] [stdout]  --> src/screens/hud_screen.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::widgets::play_widget::PlayWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::source_widget::SourceWidget`
[INFO] [stdout]   --> src/screens/hud_screen.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::widgets::source_widget::SourceWidget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::player_health_widget::PlayerHealthWidget`
[INFO] [stdout]  --> src/screens/you_died.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::widgets::player_health_widget::PlayerHealthWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::source_widget::SourceWidget`
[INFO] [stdout]  --> src/screens/you_died.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::widgets::source_widget::SourceWidget;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screen::Screen`
[INFO] [stdout]  --> src/screens.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::screen::Screen;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::game::Game`
[INFO] [stdout]  --> src/widget.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::game::Game;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/sound.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Mutex`
[INFO] [stdout]  --> src/sound.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `once_cell::sync::OnceCell`
[INFO] [stdout]  --> src/sound.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use once_cell::sync::OnceCell;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rodio::cpal::Stream`
[INFO] [stdout]  --> src/sound.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use rodio::cpal::Stream;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Mutex`
[INFO] [stdout]  --> src/tests.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 |     use std::sync::Mutex;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `env`
[INFO] [stdout]   --> src/main.rs:18:11
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::{env, fs};
[INFO] [stdout]    |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::hash::Hash`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use std::hash::Hash;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]   --> src/main.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::io::BufReader;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]   --> src/main.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use std::ops::DerefMut;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/main.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `enemy` and `player`
[INFO] [stdout]   --> src/main.rs:24:23
[INFO] [stdout]    |
[INFO] [stdout] 24 | use crate::entities::{enemy, player};
[INFO] [stdout]    |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::main_menu_screen`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use crate::screens::main_menu_screen;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entity::Entity`
[INFO] [stdout]   --> src/main.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | use crate::entity::Entity;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `num::clamp`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use num::clamp;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::event::Event`
[INFO] [stdout]   --> src/main.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use sdl2::event::Event;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::keyboard::Keycode`
[INFO] [stdout]   --> src/main.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | use sdl2::keyboard::Keycode;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gjson::Value`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use gjson::Value;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::event::Event::KeyDown`
[INFO] [stdout]   --> src/main.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use sdl2::event::Event::KeyDown;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::level::Level`
[INFO] [stdout]   --> src/main.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | use crate::level::Level;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::render::AssetData`
[INFO] [stdout]   --> src/main.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | use crate::render::AssetData;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widget::Alignment`
[INFO] [stdout]   --> src/main.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 46 | use crate::widget::Alignment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::source_widget`
[INFO] [stdout]   --> src/main.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | use crate::widgets::source_widget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widgets::source_widget::SourceWidget`
[INFO] [stdout]   --> src/main.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | use crate::widgets::source_widget::SourceWidget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/main.rs:284:5
[INFO] [stdout]     |
[INFO] [stdout] 284 | /     /// Delta refers to the time taken between showing two frames. This value is often used for physics related operations, as this allow...
[INFO] [stdout] 285 | |     /// You can see that happening in [`Entity::physics`]
[INFO] [stdout]     | |_________________________________________________________^
[INFO] [stdout] 286 |       // initiate delta
[INFO] [stdout] 287 |       let mut delta: f32 = 0.0;
[INFO] [stdout]     |       ------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `widget::Widget`
[INFO] [stdout]   --> src/main.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 | use widget::Widget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widget::Widget`
[INFO] [stdout]   --> src/game.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::widget::Widget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta`
[INFO] [stdout]   --> src/entities/player.rs:33:24
[INFO] [stdout]    |
[INFO] [stdout] 33 |     fn tick(&mut self, delta: f32) {
[INFO] [stdout]    |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_delta`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/entities/player.rs:116:17
[INFO] [stdout]     |
[INFO] [stdout] 116 |             let mut player = Self {
[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: `events`
[INFO] [stdout]    --> src/entities/player.rs:155:62
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub fn handle_input(&mut self, held_keys: Vec<Scancode>, events: Vec<Event>) {
[INFO] [stdout]     |                                                              ^^^^^^ help: if this is intentional, prefix it with an underscore: `_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `amount`
[INFO] [stdout]   --> src/entities/enemy.rs:61:33
[INFO] [stdout]    |
[INFO] [stdout] 61 |     fn change_health(&mut self, amount: f32) {
[INFO] [stdout]    |                                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/entities/enemy.rs:76:13
[INFO] [stdout]    |
[INFO] [stdout] 76 |         let mut entity = Self{
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `amount`
[INFO] [stdout]   --> src/entities/dummy.rs:39:33
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn change_health(&mut self, amount: f32) {
[INFO] [stdout]    |                                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/entities/turret.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let mut entity = Self{
[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/entities/turret.rs:76:13
[INFO] [stdout]    |
[INFO] [stdout] 76 |         let mut player : &mut dyn Entity;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `velocity`
[INFO] [stdout]    --> src/entities/turret.rs:138:32
[INFO] [stdout]     |
[INFO] [stdout] 138 |     fn set_velocity(&mut self, velocity: (f32, f32)) {}
[INFO] [stdout]     |                                ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_velocity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta`
[INFO] [stdout]   --> src/entities/floaty_bomb.rs:42:24
[INFO] [stdout]    |
[INFO] [stdout] 42 |     fn tick(&mut self, delta: f32) {
[INFO] [stdout]    |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_delta`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/entities/floaty_bomb.rs:121:13
[INFO] [stdout]     |
[INFO] [stdout] 121 |         let mut floaty_bomb = Self {
[INFO] [stdout]     |             ----^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `amount`
[INFO] [stdout]   --> src/entities/explosion.rs:40:33
[INFO] [stdout]    |
[INFO] [stdout] 40 |     fn change_health(&mut self, amount: f32) {
[INFO] [stdout]    |                                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `velocity`
[INFO] [stdout]   --> src/entities/explosion.rs:65:32
[INFO] [stdout]    |
[INFO] [stdout] 65 |     fn set_velocity(&mut self, velocity: (f32, f32)) {
[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/entities/explosion.rs:122:13
[INFO] [stdout]     |
[INFO] [stdout] 122 |         let mut explosion = Self {
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rl`
[INFO] [stdout]   --> src/entity.rs:43:41
[INFO] [stdout]    |
[INFO] [stdout] 43 |     fn set_resource_location(&mut self, rl : ResourceLocation) {
[INFO] [stdout]    |                                         ^^ help: if this is intentional, prefix it with an underscore: `_rl`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta`
[INFO] [stdout]   --> src/entity.rs:48:24
[INFO] [stdout]    |
[INFO] [stdout] 48 |     fn tick(&mut self, delta : f32) {}
[INFO] [stdout]    |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_delta`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ass`
[INFO] [stdout]    --> src/entity.rs:113:34
[INFO] [stdout]     |
[INFO] [stdout] 113 |     fn set_asset_data(&mut self, ass : AssetData) {
[INFO] [stdout]     |                                  ^^^ help: if this is intentional, prefix it with an underscore: `_ass`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dims`
[INFO] [stdout]   --> src/game.rs:50:70
[INFO] [stdout]    |
[INFO] [stdout] 50 |     pub fn cycle(&mut self, delta : f32, mousex : u32, mousey : u32, dims : (u32, u32)) {
[INFO] [stdout]    |                                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_dims`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/game.rs:163:17
[INFO] [stdout]     |
[INFO] [stdout] 163 |             let mut level = &mut self.current_level;
[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/game.rs:171:21
[INFO] [stdout]     |
[INFO] [stdout] 171 |                 let mut list = &mut self.entities;
[INFO] [stdout]     |                     ----^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `widget::Widget`
[INFO] [stdout]   --> src/main.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 | use widget::Widget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:127:57
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub fn draw_pp_texture(x: i32, y: i32, ass: &AssetData, mut canvas: &mut WindowCanvas, sf: i32, textures : &HashMap<String, Texture>) {
[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/render.rs:130:9
[INFO] [stdout]     |
[INFO] [stdout] 130 |     let mut id = ass.resource_location.clone();
[INFO] [stdout]     |         ----^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::widget::Widget`
[INFO] [stdout]   --> src/game.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::widget::Widget;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta`
[INFO] [stdout]   --> src/entities/player.rs:33:24
[INFO] [stdout]    |
[INFO] [stdout] 33 |     fn tick(&mut self, delta: f32) {
[INFO] [stdout]    |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_delta`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/entities/player.rs:116:17
[INFO] [stdout]     |
[INFO] [stdout] 116 |             let mut player = Self {
[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: `events`
[INFO] [stdout]    --> src/entities/player.rs:155:62
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub fn handle_input(&mut self, held_keys: Vec<Scancode>, events: Vec<Event>) {
[INFO] [stdout]     |                                                              ^^^^^^ help: if this is intentional, prefix it with an underscore: `_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `amount`
[INFO] [stdout]   --> src/entities/enemy.rs:61:33
[INFO] [stdout]    |
[INFO] [stdout] 61 |     fn change_health(&mut self, amount: f32) {
[INFO] [stdout]    |                                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/entities/enemy.rs:76:13
[INFO] [stdout]    |
[INFO] [stdout] 76 |         let mut entity = Self{
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `amount`
[INFO] [stdout]   --> src/entities/dummy.rs:39:33
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn change_health(&mut self, amount: f32) {
[INFO] [stdout]    |                                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/entities/turret.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let mut entity = Self{
[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/entities/turret.rs:76:13
[INFO] [stdout]    |
[INFO] [stdout] 76 |         let mut player : &mut dyn Entity;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `velocity`
[INFO] [stdout]    --> src/entities/turret.rs:138:32
[INFO] [stdout]     |
[INFO] [stdout] 138 |     fn set_velocity(&mut self, velocity: (f32, f32)) {}
[INFO] [stdout]     |                                ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_velocity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta`
[INFO] [stdout]   --> src/entities/floaty_bomb.rs:42:24
[INFO] [stdout]    |
[INFO] [stdout] 42 |     fn tick(&mut self, delta: f32) {
[INFO] [stdout]    |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_delta`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/entities/floaty_bomb.rs:121:13
[INFO] [stdout]     |
[INFO] [stdout] 121 |         let mut floaty_bomb = Self {
[INFO] [stdout]     |             ----^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `amount`
[INFO] [stdout]   --> src/entities/explosion.rs:40:33
[INFO] [stdout]    |
[INFO] [stdout] 40 |     fn change_health(&mut self, amount: f32) {
[INFO] [stdout]    |                                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `velocity`
[INFO] [stdout]   --> src/entities/explosion.rs:65:32
[INFO] [stdout]    |
[INFO] [stdout] 65 |     fn set_velocity(&mut self, velocity: (f32, f32)) {
[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/entities/explosion.rs:122:13
[INFO] [stdout]     |
[INFO] [stdout] 122 |         let mut explosion = Self {
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rl`
[INFO] [stdout]   --> src/entity.rs:43:41
[INFO] [stdout]    |
[INFO] [stdout] 43 |     fn set_resource_location(&mut self, rl : ResourceLocation) {
[INFO] [stdout]    |                                         ^^ help: if this is intentional, prefix it with an underscore: `_rl`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta`
[INFO] [stdout]   --> src/entity.rs:48:24
[INFO] [stdout]    |
[INFO] [stdout] 48 |     fn tick(&mut self, delta : f32) {}
[INFO] [stdout]    |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_delta`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/screen.rs:16:13
[INFO] [stdout]    |
[INFO] [stdout] 16 |         let mut listy = self.get_widgets().get_mut(y);
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ass`
[INFO] [stdout]    --> src/entity.rs:113:34
[INFO] [stdout]     |
[INFO] [stdout] 113 |     fn set_asset_data(&mut self, ass : AssetData) {
[INFO] [stdout]     |                                  ^^^ help: if this is intentional, prefix it with an underscore: `_ass`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/screen.rs:50:21
[INFO] [stdout]    |
[INFO] [stdout] 50 |                 let mut coords = w.correct_coords(); // correct widget coords (Jank but works)
[INFO] [stdout]    |                     ----^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mousex`
[INFO] [stdout]   --> src/screen.rs:71:24
[INFO] [stdout]    |
[INFO] [stdout] 71 |     fn tick(&mut self, mousex : u32, mousey : u32, events: Vec<Event>) {}
[INFO] [stdout]    |                        ^^^^^^ help: if this is intentional, prefix it with an underscore: `_mousex`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mousey`
[INFO] [stdout]   --> src/screen.rs:71:38
[INFO] [stdout]    |
[INFO] [stdout] 71 |     fn tick(&mut self, mousex : u32, mousey : u32, events: Vec<Event>) {}
[INFO] [stdout]    |                                      ^^^^^^ help: if this is intentional, prefix it with an underscore: `_mousey`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `events`
[INFO] [stdout]   --> src/screen.rs:71:52
[INFO] [stdout]    |
[INFO] [stdout] 71 |     fn tick(&mut self, mousex : u32, mousey : u32, events: Vec<Event>) {}
[INFO] [stdout]    |                                                    ^^^^^^ help: if this is intentional, prefix it with an underscore: `_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dims`
[INFO] [stdout]   --> src/screen.rs:74:102
[INFO] [stdout]    |
[INFO] [stdout] 74 |     fn render(&mut self, textures : &HashMap<String, Texture>, sf : i32, canvas : &mut WindowCanvas, dims : (u32, u32), debug : bool) {
[INFO] [stdout]    |                                                                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_dims`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dims`
[INFO] [stdout]   --> src/game.rs:50:70
[INFO] [stdout]    |
[INFO] [stdout] 50 |     pub fn cycle(&mut self, delta : f32, mousex : u32, mousey : u32, dims : (u32, u32)) {
[INFO] [stdout]    |                                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_dims`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tf`
[INFO] [stdout]   --> src/widgets/player_health_widget.rs:54:32
[INFO] [stdout]    |
[INFO] [stdout] 54 |     fn set_selected(&mut self, tf: bool) {}
[INFO] [stdout]    |                                ^^ help: if this is intentional, prefix it with an underscore: `_tf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/game.rs:163:17
[INFO] [stdout]     |
[INFO] [stdout] 163 |             let mut level = &mut self.current_level;
[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/game.rs:171:21
[INFO] [stdout]     |
[INFO] [stdout] 171 |                 let mut list = &mut self.entities;
[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/widgets/player_health_widget.rs:100:17
[INFO] [stdout]     |
[INFO] [stdout] 100 |             for mut h in 0..(health/2.0).ceil() as u32 {
[INFO] [stdout]     |                 ----^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tf`
[INFO] [stdout]   --> src/widgets/death_message.rs:54:32
[INFO] [stdout]    |
[INFO] [stdout] 54 |     fn set_selected(&mut self, tf: bool) {}
[INFO] [stdout]    |                                ^^ help: if this is intentional, prefix it with an underscore: `_tf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tf`
[INFO] [stdout]   --> src/widgets/score_widget.rs:51:32
[INFO] [stdout]    |
[INFO] [stdout] 51 |     fn set_selected(&mut self, tf: bool) {}
[INFO] [stdout]    |                                ^^ help: if this is intentional, prefix it with an underscore: `_tf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:127:57
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub fn draw_pp_texture(x: i32, y: i32, ass: &AssetData, mut canvas: &mut WindowCanvas, sf: i32, textures : &HashMap<String, Texture>) {
[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/render.rs:130:9
[INFO] [stdout]     |
[INFO] [stdout] 130 |     let mut id = ass.resource_location.clone();
[INFO] [stdout]     |         ----^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mousex`
[INFO] [stdout]   --> src/screens/main_menu_screen.rs:47:24
[INFO] [stdout]    |
[INFO] [stdout] 47 |     fn tick(&mut self, mousex: u32, mousey: u32, events: Vec<Event>) {
[INFO] [stdout]    |                        ^^^^^^ help: if this is intentional, prefix it with an underscore: `_mousex`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mousey`
[INFO] [stdout]   --> src/screens/main_menu_screen.rs:47:37
[INFO] [stdout]    |
[INFO] [stdout] 47 |     fn tick(&mut self, mousex: u32, mousey: u32, events: Vec<Event>) {
[INFO] [stdout]    |                                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_mousey`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `events`
[INFO] [stdout]   --> src/screens/main_menu_screen.rs:47:50
[INFO] [stdout]    |
[INFO] [stdout] 47 |     fn tick(&mut self, mousex: u32, mousey: u32, events: Vec<Event>) {
[INFO] [stdout]    |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tile`
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let tile = Some(tiles.get("game:tiles/wall.json").unwrap().clone());
[INFO] [stdout]    |             ^^^^ help: if this is intentional, prefix it with an underscore: `_tile`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tile3`
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let tile3 = Some(tiles.get("game:tiles/dirt.json").unwrap().clone());
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_tile3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tile4`
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:37:13
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let tile4 = Some(tiles.get("game:tiles/orange.json").unwrap().clone());
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_tile4`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:79:13
[INFO] [stdout]    |
[INFO] [stdout] 79 |         let mut level = Level {
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tile`
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:77:13
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let tile  = game.tiles.get("game:tiles/wall.json");
[INFO] [stdout]    |             ^^^^ help: if this is intentional, prefix it with an underscore: `_tile`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:120:21
[INFO] [stdout]     |
[INFO] [stdout] 120 |                 let mut coords = w.correct_coords();
[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/screens/room_editor_screen.rs:153:17
[INFO] [stdout]     |
[INFO] [stdout] 153 |             let mut ass = (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().get_asset_data();
[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/screen.rs:16:13
[INFO] [stdout]    |
[INFO] [stdout] 16 |         let mut listy = self.get_widgets().get_mut(y);
[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/screen.rs:50:21
[INFO] [stdout]    |
[INFO] [stdout] 50 |                 let mut coords = w.correct_coords(); // correct widget coords (Jank but works)
[INFO] [stdout]    |                     ----^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mousex`
[INFO] [stdout]   --> src/screen.rs:71:24
[INFO] [stdout]    |
[INFO] [stdout] 71 |     fn tick(&mut self, mousex : u32, mousey : u32, events: Vec<Event>) {}
[INFO] [stdout]    |                        ^^^^^^ help: if this is intentional, prefix it with an underscore: `_mousex`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mousey`
[INFO] [stdout]   --> src/screen.rs:71:38
[INFO] [stdout]    |
[INFO] [stdout] 71 |     fn tick(&mut self, mousex : u32, mousey : u32, events: Vec<Event>) {}
[INFO] [stdout]    |                                      ^^^^^^ help: if this is intentional, prefix it with an underscore: `_mousey`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `events`
[INFO] [stdout]   --> src/screen.rs:71:52
[INFO] [stdout]    |
[INFO] [stdout] 71 |     fn tick(&mut self, mousex : u32, mousey : u32, events: Vec<Event>) {}
[INFO] [stdout]    |                                                    ^^^^^^ help: if this is intentional, prefix it with an underscore: `_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dims`
[INFO] [stdout]   --> src/screen.rs:74:102
[INFO] [stdout]    |
[INFO] [stdout] 74 |     fn render(&mut self, textures : &HashMap<String, Texture>, sf : i32, canvas : &mut WindowCanvas, dims : (u32, u32), debug : bool) {
[INFO] [stdout]    |                                                                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_dims`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:90:9
[INFO] [stdout]    |
[INFO] [stdout] 90 |     let mut canvas = &mut window.into_canvas().build().unwrap();
[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/main.rs:102:13
[INFO] [stdout]     |
[INFO] [stdout] 102 |         let mut path = String::from(dir.unwrap().path().to_str().unwrap()).replace("\\", "/");
[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/main.rs:139:13
[INFO] [stdout]     |
[INFO] [stdout] 139 |         let mut path = String::from(dir.unwrap().path().to_str().unwrap()).replace("\\", "/");
[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/main.rs:237:25
[INFO] [stdout]     |
[INFO] [stdout] 237 |                     let mut collison_box : Option<(u32,u32)>;
[INFO] [stdout]     |                         ----^^^^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scale_offset`
[INFO] [stdout]   --> src/main.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 70 |     let scale_offset = (sdl_ctx.video().unwrap().current_display_mode(0).unwrap().h / scale_factor as i32) - 180;
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scale_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tf`
[INFO] [stdout]   --> src/widgets/player_health_widget.rs:54:32
[INFO] [stdout]    |
[INFO] [stdout] 54 |     fn set_selected(&mut self, tf: bool) {}
[INFO] [stdout]    |                                ^^ help: if this is intentional, prefix it with an underscore: `_tf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `uuid` is never read
[INFO] [stdout]   --> src/entities/player.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct Player {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 25 |     uuid : Uuid,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Enemy` is never constructed
[INFO] [stdout]   --> src/entities/enemy.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Enemy {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/widgets/player_health_widget.rs:100:17
[INFO] [stdout]     |
[INFO] [stdout] 100 |             for mut h in 0..(health/2.0).ceil() as u32 {
[INFO] [stdout]     |                 ----^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `create` is never used
[INFO] [stdout]   --> src/entities/enemy.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | impl Enemy {
[INFO] [stdout]    | ---------- associated function in this implementation
[INFO] [stdout] 67 |     pub fn create(game: &mut Game) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `uuid`, `game`, and `index` are never read
[INFO] [stdout]   --> src/entities/dummy.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct DummyEntity {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 16 |     uuid : Uuid,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 17 |     game : *mut Game,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     index : usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `velocity`, `uuid`, and `index` are never read
[INFO] [stdout]   --> src/entities/turret.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Turret {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     velocity : (f32, f32),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 15 |     uuid : Uuid,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     index : usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `uuid` is never read
[INFO] [stdout]   --> src/entities/floaty_bomb.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct FloatyBomb {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     uuid : Uuid,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `uuid` is never read
[INFO] [stdout]   --> src/entities/explosion.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Explosion {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     uuid : Uuid
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tf`
[INFO] [stdout]   --> src/widgets/death_message.rs:54:32
[INFO] [stdout]    |
[INFO] [stdout] 54 |     fn set_selected(&mut self, tf: bool) {}
[INFO] [stdout]    |                                ^^ help: if this is intentional, prefix it with an underscore: `_tf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_resource_location` and `get_index` are never used
[INFO] [stdout]   --> src/entity.rs:43:8
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub trait Entity {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 43 |     fn set_resource_location(&mut self, rl : ResourceLocation) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn get_index(&self) -> usize;
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tf`
[INFO] [stdout]   --> src/widgets/score_widget.rs:51:32
[INFO] [stdout]    |
[INFO] [stdout] 51 |     fn set_selected(&mut self, tf: bool) {}
[INFO] [stdout]    |                                ^^ help: if this is intentional, prefix it with an underscore: `_tf`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `state` is never used
[INFO] [stdout]    --> src/game.rs:262:12
[INFO] [stdout]     |
[INFO] [stdout] 261 | impl DyslexiaMode {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] 262 |     pub fn state(&self) -> bool {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_x`, `get_y`, `set_x`, and `set_y` are never used
[INFO] [stdout]   --> src/render.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | impl Dimensions {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] 51 |     pub fn get_x(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn get_y(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn set_x(&mut self, x : u32) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn set_y(&mut self, y : u32) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_tile` is never used
[INFO] [stdout]   --> src/level.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl Level {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn get_tile(&mut self, size : TileSize, coordinates: (f32, f32)) -> Tile {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_name` is never used
[INFO] [stdout]    --> src/tile.rs:249:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl Tile {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn get_name(&mut self) -> String {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_game` is never used
[INFO] [stdout]   --> src/screen.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub trait Screen {
[INFO] [stdout]    |           ------ method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 29 |     fn set_game(&mut self, game : *mut Game);
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `game` is never read
[INFO] [stdout]   --> src/widgets/source_widget.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct SourceWidget {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     game : Option<*mut Game>
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `empty` is never used
[INFO] [stdout]   --> src/widgets/source_widget.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl SourceWidget {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 19 |     pub fn empty() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `game` is never read
[INFO] [stdout]   --> src/widgets/enum_widget.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct EnumWidget<T : WidgetEnum> {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     game : *mut Game,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_value` is never used
[INFO] [stdout]   --> src/widgets/enum_widget.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl<T : WidgetEnum + 'static + Clone> EnumWidget<T> {
[INFO] [stdout]    | ---------------------------------------------------- method in this implementation
[INFO] [stdout] 22 |
[INFO] [stdout] 23 |     fn get_value(&mut self) -> T {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ErrWidget` is never constructed
[INFO] [stdout]   --> src/widgets/err_widget.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct ErrWidget {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `empty` is never used
[INFO] [stdout]   --> src/widgets/err_widget.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl ErrWidget {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn empty() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `create` is never used
[INFO] [stdout]   --> src/widgets/err_widget.rs:44:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl ErrWidget {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 44 |     pub fn create(alignment: Alignment, x : i32, y : i32, game : *mut Game) -> Box<Self>
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `selected` is never read
[INFO] [stdout]   --> src/widgets/player_health_widget.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct PlayerHealthWidget {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 11 |     selected : bool,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `selected` and `game` are never read
[INFO] [stdout]   --> src/widgets/death_message.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct DeathMessage {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 16 |     selected : bool,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     game : *mut Game,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `selected` and `score` are never read
[INFO] [stdout]   --> src/widgets/score_widget.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct ScoreWidget {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 14 |     selected : bool,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     score : u32
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sf` and `centre` are never read
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct RoomEditorScreen {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 21 |     sf : i32,
[INFO] [stdout]    |     ^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     centre : (f32, f32),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_screen_coordinates`, `set_asset_data`, `set_allignment`, and `get_game` are never used
[INFO] [stdout]   --> src/widget.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub trait Widget {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 31 |     fn set_screen_coordinates(&mut self, x : i32, y : i32);
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     fn set_asset_data(&mut self, ass : AssetData);
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     fn set_allignment(&mut self, alignment: Alignment);
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 95 |     fn get_game(&mut self);
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `RIGHT`, `BOTTOM`, and `CENTRE` are never constructed
[INFO] [stdout]    --> src/widget.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub enum Alignment {
[INFO] [stdout]     |          --------- variants in this enum
[INFO] [stdout] 116 |     LEFT,
[INFO] [stdout] 117 |     RIGHT,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 118 |     TOP,
[INFO] [stdout] 119 |     BOTTOM,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 120 |     CENTRE,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `parse` is never used
[INFO] [stdout]    --> src/widget.rs:128:12
[INFO] [stdout]     |
[INFO] [stdout] 125 | impl Alignment {
[INFO] [stdout]     | -------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn parse(val : String) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `resource_location` is never read
[INFO] [stdout]   --> src/sound.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Sound {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] 12 |     pub path : String,
[INFO] [stdout] 13 |     pub resource_location : ResourceLocation
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused borrow that must be used
[INFO] [stdout]   --> src/main.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     &window.set_mouse_grab(true);
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the borrow produces a value
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 87 |     let _ = &window.set_mouse_grab(true);
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mousex`
[INFO] [stdout]   --> src/screens/main_menu_screen.rs:47:24
[INFO] [stdout]    |
[INFO] [stdout] 47 |     fn tick(&mut self, mousex: u32, mousey: u32, events: Vec<Event>) {
[INFO] [stdout]    |                        ^^^^^^ help: if this is intentional, prefix it with an underscore: `_mousex`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mousey`
[INFO] [stdout]   --> src/screens/main_menu_screen.rs:47:37
[INFO] [stdout]    |
[INFO] [stdout] 47 |     fn tick(&mut self, mousex: u32, mousey: u32, events: Vec<Event>) {
[INFO] [stdout]    |                                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_mousey`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `events`
[INFO] [stdout]   --> src/screens/main_menu_screen.rs:47:50
[INFO] [stdout]    |
[INFO] [stdout] 47 |     fn tick(&mut self, mousex: u32, mousey: u32, events: Vec<Event>) {
[INFO] [stdout]    |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_events`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tile`
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let tile = Some(tiles.get("game:tiles/wall.json").unwrap().clone());
[INFO] [stdout]    |             ^^^^ help: if this is intentional, prefix it with an underscore: `_tile`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tile3`
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let tile3 = Some(tiles.get("game:tiles/dirt.json").unwrap().clone());
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_tile3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tile4`
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:37:13
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let tile4 = Some(tiles.get("game:tiles/orange.json").unwrap().clone());
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_tile4`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:79:13
[INFO] [stdout]    |
[INFO] [stdout] 79 |         let mut level = Level {
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tile`
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:77:13
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let tile  = game.tiles.get("game:tiles/wall.json");
[INFO] [stdout]    |             ^^^^ help: if this is intentional, prefix it with an underscore: `_tile`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:120:21
[INFO] [stdout]     |
[INFO] [stdout] 120 |                 let mut coords = w.correct_coords();
[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/screens/room_editor_screen.rs:153:17
[INFO] [stdout]     |
[INFO] [stdout] 153 |             let mut ass = (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().get_asset_data();
[INFO] [stdout]     |                 ----^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::set_velocity` that must be used
[INFO] [stdout]    --> src/entities/player.rs:180:9
[INFO] [stdout]     |
[INFO] [stdout] 180 |         self.set_velocity(norm);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 180 |         let _ = self.set_velocity(norm);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::change_health` that must be used
[INFO] [stdout]   --> src/entities/floaty_bomb.rs:73:17
[INFO] [stdout]    |
[INFO] [stdout] 73 |                 game.get_player().unwrap().lock().unwrap().change_health(-10.0);
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 73 |                 let _ = game.get_player().unwrap().lock().unwrap().change_health(-10.0);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::set_velocity` that must be used
[INFO] [stdout]   --> src/entities/floaty_bomb.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 85 |         self.set_velocity(normalised);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 85 |         let _ = self.set_velocity(normalised);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/widgets/death_message.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 28 |         fs::create_dir("./scores");
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let _ = fs::create_dir("./scores");
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::set_coords` that must be used
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:71:9
[INFO] [stdout]    |
[INFO] [stdout] 71 |         dummy_player.set_coords((0.0, 0.0));
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 71 |         let _ = dummy_player.set_coords((0.0, 0.0));
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:134:40
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut player_coords = unsafe{(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                        ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                                          |
[INFO] [stdout]     |                                          this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:134:40
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut player_coords = unsafe{(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout]     = note: `#[deny(dangerous_implicit_autorefs)]` on by default
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut player_coords = unsafe{(&mut (*self.game).entities).get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                        +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:136:17
[INFO] [stdout]     |
[INFO] [stdout] 136 | ...   unsafe {(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().set_coords((player_coords.0, player_co...
[INFO] [stdout]     |               ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:136:17
[INFO] [stdout]     |
[INFO] [stdout] 136 | ...   unsafe {(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().set_coords((player_coords.0, player_co...
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 136 |         unsafe {(&mut (*self.game).entities).get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().set_coords((player_coords.0, player_coords.1))}
[INFO] [stdout]     |                 +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:138:32
[INFO] [stdout]     |
[INFO] [stdout] 138 |         player_coords = unsafe{(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                                  |
[INFO] [stdout]     |                                  this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:138:32
[INFO] [stdout]     |
[INFO] [stdout] 138 |         player_coords = unsafe{(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 138 |         player_coords = unsafe{(&mut (*self.game).entities).get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:153:27
[INFO] [stdout]     |
[INFO] [stdout] 153 |             let mut ass = (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().get_asset_data();
[INFO] [stdout]     |                           ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:153:27
[INFO] [stdout]     |
[INFO] [stdout] 153 |             let mut ass = (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().get_asset_data();
[INFO] [stdout]     |                           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 153 |             let mut ass = (&mut (*self.game).entities).get_mut(self.highlight_index).unwrap().lock().unwrap().get_asset_data();
[INFO] [stdout]     |                           +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:154:13
[INFO] [stdout]     |
[INFO] [stdout] 154 |             (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().set_asset_data(
[INFO] [stdout]     |             ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |               |
[INFO] [stdout]     |               this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:154:13
[INFO] [stdout]     |
[INFO] [stdout] 154 |             (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().set_asset_data(
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 154 |             (&mut (*self.game).entities).get_mut(self.highlight_index).unwrap().lock().unwrap().set_asset_data(
[INFO] [stdout]     |             +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:166:13
[INFO] [stdout]     |
[INFO] [stdout] 166 |             (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().set_coords(
[INFO] [stdout]     |             ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |               |
[INFO] [stdout]     |               this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:166:13
[INFO] [stdout]     |
[INFO] [stdout] 166 |             (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().set_coords(
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 166 |             (&mut (*self.game).entities).get_mut(self.highlight_index).unwrap().lock().unwrap().set_coords(
[INFO] [stdout]     |             +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:90:9
[INFO] [stdout]    |
[INFO] [stdout] 90 |     let mut canvas = &mut window.into_canvas().build().unwrap();
[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/main.rs:102:13
[INFO] [stdout]     |
[INFO] [stdout] 102 |         let mut path = String::from(dir.unwrap().path().to_str().unwrap()).replace("\\", "/");
[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/main.rs:139:13
[INFO] [stdout]     |
[INFO] [stdout] 139 |         let mut path = String::from(dir.unwrap().path().to_str().unwrap()).replace("\\", "/");
[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/main.rs:237:25
[INFO] [stdout]     |
[INFO] [stdout] 237 |                     let mut collison_box : Option<(u32,u32)>;
[INFO] [stdout]     |                         ----^^^^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scale_offset`
[INFO] [stdout]   --> src/main.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 70 |     let scale_offset = (sdl_ctx.video().unwrap().current_display_mode(0).unwrap().h / scale_factor as i32) - 180;
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scale_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `uuid` is never read
[INFO] [stdout]   --> src/entities/player.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct Player {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 25 |     uuid : Uuid,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Enemy` is never constructed
[INFO] [stdout]   --> src/entities/enemy.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Enemy {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `create` is never used
[INFO] [stdout]   --> src/entities/enemy.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | impl Enemy {
[INFO] [stdout]    | ---------- associated function in this implementation
[INFO] [stdout] 67 |     pub fn create(game: &mut Game) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `uuid`, `game`, and `index` are never read
[INFO] [stdout]   --> src/entities/dummy.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct DummyEntity {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 16 |     uuid : Uuid,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 17 |     game : *mut Game,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     index : usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `velocity`, `uuid`, and `index` are never read
[INFO] [stdout]   --> src/entities/turret.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Turret {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     velocity : (f32, f32),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 15 |     uuid : Uuid,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     index : usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `uuid` is never read
[INFO] [stdout]   --> src/entities/floaty_bomb.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct FloatyBomb {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     uuid : Uuid,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `uuid` is never read
[INFO] [stdout]   --> src/entities/explosion.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Explosion {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     uuid : Uuid
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_resource_location` and `get_index` are never used
[INFO] [stdout]   --> src/entity.rs:43:8
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub trait Entity {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 43 |     fn set_resource_location(&mut self, rl : ResourceLocation) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn get_index(&self) -> usize;
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `state` is never used
[INFO] [stdout]    --> src/game.rs:262:12
[INFO] [stdout]     |
[INFO] [stdout] 261 | impl DyslexiaMode {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] 262 |     pub fn state(&self) -> bool {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_x`, `get_y`, `set_x`, and `set_y` are never used
[INFO] [stdout]   --> src/render.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | impl Dimensions {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] 51 |     pub fn get_x(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn get_y(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn set_x(&mut self, x : u32) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn set_y(&mut self, y : u32) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_tile` is never used
[INFO] [stdout]   --> src/level.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl Level {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn get_tile(&mut self, size : TileSize, coordinates: (f32, f32)) -> Tile {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_name` is never used
[INFO] [stdout]    --> src/tile.rs:249:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl Tile {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn get_name(&mut self) -> String {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_game` is never used
[INFO] [stdout]   --> src/screen.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub trait Screen {
[INFO] [stdout]    |           ------ method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 29 |     fn set_game(&mut self, game : *mut Game);
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `game` is never read
[INFO] [stdout]   --> src/widgets/source_widget.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct SourceWidget {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     game : Option<*mut Game>
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `empty` is never used
[INFO] [stdout]   --> src/widgets/source_widget.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl SourceWidget {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 19 |     pub fn empty() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `game` is never read
[INFO] [stdout]   --> src/widgets/enum_widget.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct EnumWidget<T : WidgetEnum> {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     game : *mut Game,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_value` is never used
[INFO] [stdout]   --> src/widgets/enum_widget.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl<T : WidgetEnum + 'static + Clone> EnumWidget<T> {
[INFO] [stdout]    | ---------------------------------------------------- method in this implementation
[INFO] [stdout] 22 |
[INFO] [stdout] 23 |     fn get_value(&mut self) -> T {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ErrWidget` is never constructed
[INFO] [stdout]   --> src/widgets/err_widget.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct ErrWidget {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `empty` is never used
[INFO] [stdout]   --> src/widgets/err_widget.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl ErrWidget {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn empty() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `create` is never used
[INFO] [stdout]   --> src/widgets/err_widget.rs:44:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl ErrWidget {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 44 |     pub fn create(alignment: Alignment, x : i32, y : i32, game : *mut Game) -> Box<Self>
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `selected` is never read
[INFO] [stdout]   --> src/widgets/player_health_widget.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct PlayerHealthWidget {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 11 |     selected : bool,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `selected` and `game` are never read
[INFO] [stdout]   --> src/widgets/death_message.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct DeathMessage {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 16 |     selected : bool,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     game : *mut Game,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `selected` and `score` are never read
[INFO] [stdout]   --> src/widgets/score_widget.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct ScoreWidget {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 14 |     selected : bool,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     score : u32
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sf` and `centre` are never read
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct RoomEditorScreen {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 21 |     sf : i32,
[INFO] [stdout]    |     ^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     centre : (f32, f32),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_screen_coordinates`, `set_asset_data`, `set_allignment`, and `get_game` are never used
[INFO] [stdout]   --> src/widget.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub trait Widget {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 31 |     fn set_screen_coordinates(&mut self, x : i32, y : i32);
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     fn set_asset_data(&mut self, ass : AssetData);
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     fn set_allignment(&mut self, alignment: Alignment);
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 95 |     fn get_game(&mut self);
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `RIGHT`, `BOTTOM`, and `CENTRE` are never constructed
[INFO] [stdout]    --> src/widget.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub enum Alignment {
[INFO] [stdout]     |          --------- variants in this enum
[INFO] [stdout] 116 |     LEFT,
[INFO] [stdout] 117 |     RIGHT,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 118 |     TOP,
[INFO] [stdout] 119 |     BOTTOM,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 120 |     CENTRE,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `parse` is never used
[INFO] [stdout]    --> src/widget.rs:128:12
[INFO] [stdout]     |
[INFO] [stdout] 125 | impl Alignment {
[INFO] [stdout]     | -------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn parse(val : String) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `resource_location` is never read
[INFO] [stdout]   --> src/sound.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Sound {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] 12 |     pub path : String,
[INFO] [stdout] 13 |     pub resource_location : ResourceLocation
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused borrow that must be used
[INFO] [stdout]   --> src/main.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     &window.set_mouse_grab(true);
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the borrow produces a value
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 87 |     let _ = &window.set_mouse_grab(true);
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::set_velocity` that must be used
[INFO] [stdout]    --> src/entities/player.rs:180:9
[INFO] [stdout]     |
[INFO] [stdout] 180 |         self.set_velocity(norm);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 180 |         let _ = self.set_velocity(norm);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::change_health` that must be used
[INFO] [stdout]   --> src/entities/floaty_bomb.rs:73:17
[INFO] [stdout]    |
[INFO] [stdout] 73 |                 game.get_player().unwrap().lock().unwrap().change_health(-10.0);
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 73 |                 let _ = game.get_player().unwrap().lock().unwrap().change_health(-10.0);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::set_velocity` that must be used
[INFO] [stdout]   --> src/entities/floaty_bomb.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 85 |         self.set_velocity(normalised);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 85 |         let _ = self.set_velocity(normalised);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/widgets/death_message.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 28 |         fs::create_dir("./scores");
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let _ = fs::create_dir("./scores");
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::set_coords` that must be used
[INFO] [stdout]   --> src/screens/room_editor_screen.rs:71:9
[INFO] [stdout]    |
[INFO] [stdout] 71 |         dummy_player.set_coords((0.0, 0.0));
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 71 |         let _ = dummy_player.set_coords((0.0, 0.0));
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:134:40
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut player_coords = unsafe{(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                        ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                                          |
[INFO] [stdout]     |                                          this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:134:40
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut player_coords = unsafe{(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout]     = note: `#[deny(dangerous_implicit_autorefs)]` on by default
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut player_coords = unsafe{(&mut (*self.game).entities).get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                        +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:136:17
[INFO] [stdout]     |
[INFO] [stdout] 136 | ...   unsafe {(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().set_coords((player_coords.0, player_co...
[INFO] [stdout]     |               ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:136:17
[INFO] [stdout]     |
[INFO] [stdout] 136 | ...   unsafe {(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().set_coords((player_coords.0, player_co...
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 136 |         unsafe {(&mut (*self.game).entities).get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().set_coords((player_coords.0, player_coords.1))}
[INFO] [stdout]     |                 +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:138:32
[INFO] [stdout]     |
[INFO] [stdout] 138 |         player_coords = unsafe{(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                                  |
[INFO] [stdout]     |                                  this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:138:32
[INFO] [stdout]     |
[INFO] [stdout] 138 |         player_coords = unsafe{(*self.game).entities.get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 138 |         player_coords = unsafe{(&mut (*self.game).entities).get_mut((*self.game).player.unwrap()).unwrap().lock().unwrap().get_coords()};
[INFO] [stdout]     |                                +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:153:27
[INFO] [stdout]     |
[INFO] [stdout] 153 |             let mut ass = (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().get_asset_data();
[INFO] [stdout]     |                           ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:153:27
[INFO] [stdout]     |
[INFO] [stdout] 153 |             let mut ass = (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().get_asset_data();
[INFO] [stdout]     |                           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 153 |             let mut ass = (&mut (*self.game).entities).get_mut(self.highlight_index).unwrap().lock().unwrap().get_asset_data();
[INFO] [stdout]     |                           +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:154:13
[INFO] [stdout]     |
[INFO] [stdout] 154 |             (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().set_asset_data(
[INFO] [stdout]     |             ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |               |
[INFO] [stdout]     |               this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:154:13
[INFO] [stdout]     |
[INFO] [stdout] 154 |             (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().set_asset_data(
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 154 |             (&mut (*self.game).entities).get_mut(self.highlight_index).unwrap().lock().unwrap().set_asset_data(
[INFO] [stdout]     |             +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: implicit autoref creates a reference to the dereference of a raw pointer
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:166:13
[INFO] [stdout]     |
[INFO] [stdout] 166 |             (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().set_coords(
[INFO] [stdout]     |             ^^---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |               |
[INFO] [stdout]     |               this raw pointer has type `*mut Game`
[INFO] [stdout]     |
[INFO] [stdout]     = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
[INFO] [stdout] note: autoref is being applied to this expression, resulting in: `&mut [Box<std::sync::Mutex<dyn Entity>>]`
[INFO] [stdout]    --> src/screens/room_editor_screen.rs:166:13
[INFO] [stdout]     |
[INFO] [stdout] 166 |             (*self.game).entities.get_mut(self.highlight_index).unwrap().lock().unwrap().set_coords(
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: method calls to `get_mut` require a reference
[INFO] [stdout]    --> /rustc/779e19d8baa3e3625bd4fc5c85cbb2ad47b43155/library/core/src/slice/mod.rs:597:5
[INFO] [stdout] help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
[INFO] [stdout]     |
[INFO] [stdout] 166 |             (&mut (*self.game).entities).get_mut(self.highlight_index).unwrap().lock().unwrap().set_coords(
[INFO] [stdout]     |             +++++                      +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::set_coords` that must be used
[INFO] [stdout]   --> src/tests.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 68 |         dummy.set_coords((-80f32, 0f32));
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 68 |         let _ = dummy.set_coords((-80f32, 0f32));
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `Entity::set_coords` that must be used
[INFO] [stdout]   --> src/tests.rs:79:9
[INFO] [stdout]    |
[INFO] [stdout] 79 |         dummy.set_coords((235f32, -103f32));
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 79 |         let _ = dummy.set_coords((235f32, -103f32));
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `NEA-Project` (bin "NEA-Project") due to 6 previous errors; 194 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stderr] error: could not compile `NEA-Project` (bin "NEA-Project" test) due to 6 previous errors; 197 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "d877f52186930a4ed305fd55b814c225995a0b8779d841ab1405622bbc2e5c43", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d877f52186930a4ed305fd55b814c225995a0b8779d841ab1405622bbc2e5c43", kill_on_drop: false }`
[INFO] [stdout] d877f52186930a4ed305fd55b814c225995a0b8779d841ab1405622bbc2e5c43
