[INFO] cloning repository https://github.com/Jeklah/platformer
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Jeklah/platformer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJeklah%2Fplatformer", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJeklah%2Fplatformer'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 71e850a5f4689cddc340ea6cec21862f061ccac7
[INFO] checking Jeklah/platformer against eca445e5ae4a6679cc27d3a09106ce245e13a5a6 for pr-162478
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJeklah%2Fplatformer" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Jeklah/platformer
[INFO] finished tweaking git repo https://github.com/Jeklah/platformer
[INFO] tweaked toml for git repo https://github.com/Jeklah/platformer written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Jeklah/platformer on toolchain eca445e5ae4a6679cc27d3a09106ce245e13a5a6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Jeklah/platformer 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" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded quad-rand v0.2.3
[INFO] [stderr]   Downloaded objc-rs v0.2.8
[INFO] [stderr]   Downloaded macroquad_macro v0.1.8
[INFO] [stderr]   Downloaded miniquad v0.4.8
[INFO] [stderr]   Downloaded bytemuck v1.23.1
[INFO] [stderr]   Downloaded glam v0.27.0
[INFO] [stderr]   Downloaded fontdue v0.9.3
[INFO] [stderr]   Downloaded macroquad v0.4.14
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 0ea0cf82c3bd17972ff5892d876f236e141b29672e345f485cdf78cd1b254cc9
[INFO] running `Command { std: "docker" "start" "0ea0cf82c3bd17972ff5892d876f236e141b29672e345f485cdf78cd1b254cc9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0ea0cf82c3bd17972ff5892d876f236e141b29672e345f485cdf78cd1b254cc9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "0ea0cf82c3bd17972ff5892d876f236e141b29672e345f485cdf78cd1b254cc9" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0ea0cf82c3bd17972ff5892d876f236e141b29672e345f485cdf78cd1b254cc9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "0ea0cf82c3bd17972ff5892d876f236e141b29672e345f485cdf78cd1b254cc9" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking adler2 v2.0.1
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]     Checking cfg-if v1.0.1
[INFO] [stderr]    Compiling libc v0.2.174
[INFO] [stderr]     Checking allocator-api2 v0.2.21
[INFO] [stderr]    Compiling miniquad v0.4.8
[INFO] [stderr]     Checking bytemuck v1.23.1
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]     Checking crc32fast v1.4.2
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking color_quant v1.1.0
[INFO] [stderr]     Checking ttf-parser v0.21.1
[INFO] [stderr]     Checking quad-rand v0.2.3
[INFO] [stderr]     Checking glam v0.27.0
[INFO] [stderr]    Compiling macroquad_macro v0.1.8
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking hashbrown v0.15.4
[INFO] [stderr]     Checking flate2 v1.1.2
[INFO] [stderr]     Checking png v0.17.16
[INFO] [stderr]     Checking image v0.24.9
[INFO] [stderr]     Checking fontdue v0.9.3
[INFO] [stderr]     Checking macroquad v0.4.14
[INFO] [stderr]     Checking platformer v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused variable: `cam_y`
[INFO] [stdout]    --> src/game/mod.rs:224:45
[INFO] [stdout]     |
[INFO] [stdout] 224 |     fn render_background(&self, cam_x: f32, cam_y: f32) {
[INFO] [stdout]     |                                             ^^^^^ help: if this is intentional, prefix it with an underscore: `_cam_y`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `screen_w`
[INFO] [stdout]    --> src/game/mod.rs:225:13
[INFO] [stdout]     |
[INFO] [stdout] 225 |         let screen_w = screen_width();
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_screen_w`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GameConfig` is never constructed
[INFO] [stdout]  --> src/config.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct GameConfig;
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/config.rs:8:15
[INFO] [stdout]     |
[INFO] [stdout]   6 | impl GameConfig {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]   7 |     // Player Physics
[INFO] [stdout]   8 |     pub const PLAYER_MOVE_SPEED: f32 = 200.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   9 |     pub const PLAYER_JUMP_FORCE: f32 = -400.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  10 |     pub const PLAYER_SIZE: (f32, f32) = (32.0, 32.0);
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout]  11 |     pub const PLAYER_MAX_JUMPS: u32 = 2;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  12 |     pub const PLAYER_COLOR: Color = BLUE;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  15 |     pub const GRAVITY: f32 = 980.0;
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout]  16 |     pub const TERMINAL_VELOCITY: f32 = 500.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  17 |     pub const FRICTION: f32 = 0.8;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  20 |     pub const GROUND_HEIGHT: f32 = 40.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout]  21 |     pub const PLATFORM_COLOR: Color = GREEN;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout]  22 |     pub const GROUND_COLOR: Color = BROWN;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  25 |     pub const COIN_VALUE: i32 = 10;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout]  26 |     pub const GEM_VALUE: i32 = 50;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout]  27 |     pub const POWERUP_VALUE: i32 = 100;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout]  28 |     pub const COLLECTIBLE_SIZE: (f32, f32) = (16.0, 16.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  29 |     pub const COLLECTIBLE_ANIMATION_SPEED: f32 = 3.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  32 |     pub const DISTANCE_SCORE_MULTIPLIER: f32 = 0.1;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  33 |     pub const TIME_SCORE_MULTIPLIER: i32 = 10;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  36 |     pub const CAMERA_SMOOTHING: f32 = 0.1;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  37 |     pub const CAMERA_OFFSET_X: f32 = 0.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  38 |     pub const CAMERA_OFFSET_Y: f32 = 0.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  41 |     pub const BACKGROUND_COLOR: Color = SKYBLUE;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  42 |     pub const UI_TEXT_COLOR: Color = WHITE;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout]  43 |     pub const SCORE_TEXT_COLOR: Color = YELLOW;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  44 |     pub const DEBUG_TEXT_COLOR: Color = DARKGRAY;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  47 |     pub const CLOUD_PARALLAX_SPEED: f32 = 0.3;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  48 |     pub const MOUNTAIN_PARALLAX_SPEED: f32 = 0.1;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  49 |     pub const TREE_PARALLAX_SPEED: f32 = 0.5;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  50 |     pub const GRASS_PARALLAX_SPEED: f32 = 0.8;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  53 |     pub const DEATH_Y_THRESHOLD: f32 = 100.0; // How far below screen before death
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  54 |     pub const WORLD_WIDTH: f32 = 2000.0; // For minimap calculations
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub const INPUT_BUFFER_TIME: f32 = 0.1; // Seconds to buffer jump input
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub const FLOAT_AMPLITUDE: f32 = 3.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  61 |     pub const FLOAT_FREQUENCY: f32 = 3.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  62 |     pub const SPARKLE_FREQUENCY: f32 = 6.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  63 |     pub const GLOW_PULSE_SPEED: f32 = 4.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub const TARGET_FPS: i32 = 60;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout]  67 |     pub const MAX_PARTICLES: usize = 100;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     pub const UI_MARGIN: f32 = 10.0;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout]  71 |     pub const UI_LINE_HEIGHT: f32 = 25.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout]  72 |     pub const UI_FONT_SIZE: f32 = 20.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout]  73 |     pub const UI_LARGE_FONT_SIZE: f32 = 50.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  74 |     pub const UI_SMALL_FONT_SIZE: f32 = 16.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub const SHOW_DEBUG_INFO: bool = true;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  78 |     pub const SHOW_VELOCITY_INDICATOR: bool = true;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  79 |     pub const SHOW_COLLISION_BOXES: bool = false;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  80 |     pub const SHOW_GRID: bool = false;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout]  81 |     pub const GRID_SIZE: f32 = 32.0;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub const PALETTE_PRIMARY: Color = Color::new(0.2, 0.4, 1.0, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  85 |     pub const PALETTE_SECONDARY: Color = Color::new(1.0, 0.6, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  86 |     pub const PALETTE_ACCENT: Color = Color::new(0.8, 0.2, 0.8, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout]  87 |     pub const PALETTE_SUCCESS: Color = Color::new(0.2, 0.8, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  88 |     pub const PALETTE_WARNING: Color = Color::new(1.0, 1.0, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  89 |     pub const PALETTE_DANGER: Color = Color::new(1.0, 0.2, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub const SCORE_THRESHOLD_BRONZE: i32 = 100;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  93 |     pub const SCORE_THRESHOLD_SILVER: i32 = 500;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  94 |     pub const SCORE_THRESHOLD_GOLD: i32 = 1000;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub const MASTER_VOLUME: f32 = 1.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout]  98 |     pub const SFX_VOLUME: f32 = 0.8;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout]  99 |     pub const MUSIC_VOLUME: f32 = 0.6;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn screen_center() -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn ground_y() -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn death_threshold() -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn player_spawn_position() -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn ui_position(line: i32) -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn with_alpha(color: Color, alpha: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn lerp_color(a: Color, b: Color, t: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn collectible_color(collectible_type: &str) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn platform_color(platform_type: &str) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn get_difficulty_multiplier(time_survived: f32) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn format_score(score: i32) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn format_time(seconds: f32) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn is_performance_good() -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn get_debug_info() -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DifficultyPresets` is never constructed
[INFO] [stdout]    --> src/config.rs:204:12
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub struct DifficultyPresets;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `easy`, `normal`, and `hard` are never used
[INFO] [stdout]    --> src/config.rs:207:12
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl DifficultyPresets {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout] 207 |     pub fn easy() -> DifficultyConfig {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn normal() -> DifficultyConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn hard() -> DifficultyConfig {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DifficultyConfig` is never constructed
[INFO] [stdout]    --> src/config.rs:236:12
[INFO] [stdout]     |
[INFO] [stdout] 236 | pub struct DifficultyConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EnvironmentPresets` is never constructed
[INFO] [stdout]    --> src/config.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | pub struct EnvironmentPresets;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `day`, `sunset`, and `night` are never used
[INFO] [stdout]    --> src/config.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl EnvironmentPresets {
[INFO] [stdout]     | ----------------------- associated functions in this implementation
[INFO] [stdout] 247 |     pub fn day() -> EnvironmentConfig {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 257 |     pub fn sunset() -> EnvironmentConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     pub fn night() -> EnvironmentConfig {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EnvironmentConfig` is never constructed
[INFO] [stdout]    --> src/config.rs:279:12
[INFO] [stdout]     |
[INFO] [stdout] 279 | pub struct EnvironmentConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `position` and `size` are never used
[INFO] [stdout]   --> src/entities/mod.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub trait Entity {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] 13 |     fn position(&self) -> Vec2;
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 14 |     fn size(&self) -> Vec2;
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `mass` is never read
[INFO] [stdout]   --> src/entities/mod.rs:26:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct PhysicsBody {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub mass: f32,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PhysicsBody` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_collected` and `get_bounds` are never used
[INFO] [stdout]   --> src/entities/collectible.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl Collectible {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn is_collected(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn get_bounds(&self) -> (f32, f32, f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Breakable` and `Moving` are never constructed
[INFO] [stdout]   --> src/entities/platform.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum PlatformType {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 16 |     Breakable,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 17 |     Moving,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PlatformType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new_ground`, `new_breakable`, `overlaps_with`, and `is_landing_on` are never used
[INFO] [stdout]   --> src/entities/platform.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl Platform {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn new_ground(x: f32, y: f32, width: f32, height: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn new_breakable(x: f32, y: f32, width: f32, height: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn overlaps_with(&self, other: &PhysicsBody) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn is_landing_on(&self, entity_body: &PhysicsBody, entity_prev_y: f32) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GraphicsUtils` is never constructed
[INFO] [stdout]  --> src/graphics/mod.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct GraphicsUtils;
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/graphics/mod.rs:7:12
[INFO] [stdout]     |
[INFO] [stdout]   5 | impl GraphicsUtils {
[INFO] [stdout]     | ------------------ associated functions in this implementation
[INFO] [stdout]   6 |     /// Draw a filled rectangle with a border
[INFO] [stdout]   7 |     pub fn draw_rectangle_with_border(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  24 |     pub fn draw_gradient_rectangle(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn draw_circle_with_border(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub fn draw_text_with_shadow(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn draw_text_centered(text: &str, x: f32, y: f32, font_size: f32, color: Color) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn draw_progress_bar(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn draw_button(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn is_mouse_over_rect(x: f32, y: f32, width: f32, height: f32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn draw_animated_rectangle(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn draw_debug_grid(camera_x: f32, camera_y: f32, grid_size: f32, color: Color) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 217 |     pub fn draw_particles(center: Vec2, count: i32, radius: f32, color: Color, time_offset: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn draw_health_bar(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn draw_minimap(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `with_alpha` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:305:12
[INFO] [stdout]     |
[INFO] [stdout] 305 |     pub fn with_alpha(color: Color, alpha: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lerp_color` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:310:12
[INFO] [stdout]     |
[INFO] [stdout] 310 |     pub fn lerp_color(a: Color, b: Color, t: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rainbow_color` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:321:12
[INFO] [stdout]     |
[INFO] [stdout] 321 |     pub fn rainbow_color(time: f32, speed: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hsv_to_rgb` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:327:12
[INFO] [stdout]     |
[INFO] [stdout] 327 |     pub fn hsv_to_rgb(h: f32, s: f32, v: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLATFORM_GREEN` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:350:15
[INFO] [stdout]     |
[INFO] [stdout] 350 |     pub const PLATFORM_GREEN: Color = Color::new(0.2, 0.8, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLATFORM_BROWN` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:351:15
[INFO] [stdout]     |
[INFO] [stdout] 351 |     pub const PLATFORM_BROWN: Color = Color::new(0.6, 0.4, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLAYER_BLUE` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:352:15
[INFO] [stdout]     |
[INFO] [stdout] 352 |     pub const PLAYER_BLUE: Color = Color::new(0.2, 0.4, 1.0, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DANGER_RED` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:353:15
[INFO] [stdout]     |
[INFO] [stdout] 353 |     pub const DANGER_RED: Color = Color::new(1.0, 0.2, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COLLECTIBLE_YELLOW` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:354:15
[INFO] [stdout]     |
[INFO] [stdout] 354 |     pub const COLLECTIBLE_YELLOW: Color = Color::new(1.0, 1.0, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UI_BACKGROUND` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:355:15
[INFO] [stdout]     |
[INFO] [stdout] 355 |     pub const UI_BACKGROUND: Color = Color::new(0.0, 0.0, 0.0, 0.7);
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UI_BORDER` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:356:15
[INFO] [stdout]     |
[INFO] [stdout] 356 |     pub const UI_BORDER: Color = Color::new(0.8, 0.8, 0.8, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/input/mod.rs:60:12
[INFO] [stdout]     |
[INFO] [stdout]  10 | impl InputHandler {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn is_key_released(&self, key: KeyCode) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn get_horizontal_input(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn get_vertical_input(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub fn is_jump_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn is_action_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn is_pause_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn is_reset_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn get_pressed_keys(&self) -> &Vec<KeyCode> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn any_key_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn any_key_just_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_moving` is never used
[INFO] [stdout]    --> src/input/mod.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 |     pub fn is_moving(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_movement_vector` is never used
[INFO] [stdout]    --> src/input/mod.rs:153:12
[INFO] [stdout]     |
[INFO] [stdout] 153 |     pub fn get_movement_vector(input: &InputHandler) -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wants_to_move_left` is never used
[INFO] [stdout]    --> src/input/mod.rs:168:12
[INFO] [stdout]     |
[INFO] [stdout] 168 |     pub fn wants_to_move_left(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wants_to_move_right` is never used
[INFO] [stdout]    --> src/input/mod.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 173 |     pub fn wants_to_move_right(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `just_started_moving_left` is never used
[INFO] [stdout]    --> src/input/mod.rs:178:12
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn just_started_moving_left(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `just_started_moving_right` is never used
[INFO] [stdout]    --> src/input/mod.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout] 184 |     pub fn just_started_moving_right(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `just_stopped_moving_horizontal` is never used
[INFO] [stdout]    --> src/input/mod.rs:190:12
[INFO] [stdout]     |
[INFO] [stdout] 190 |     pub fn just_stopped_moving_horizontal(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `check_bounds` is never used
[INFO] [stdout]    --> src/physics/mod.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout]  12 | impl Physics {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn check_bounds(&self, player: &mut Player) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CollisionSide` is never used
[INFO] [stdout]  --> src/physics/collision.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum CollisionSide {
[INFO] [stdout]   |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollisionInfo` is never constructed
[INFO] [stdout]   --> src/physics/collision.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct CollisionInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollisionDetector` is never constructed
[INFO] [stdout]   --> src/physics/collision.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct CollisionDetector;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/physics/collision.rs:23:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl CollisionDetector {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout]  23 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  28 |     pub fn aabb_overlap(rect1: (f32, f32, f32, f32), rect2: (f32, f32, f32, f32)) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  36 |     pub fn get_collision_info(body1: &PhysicsBody, body2: &PhysicsBody) -> Option<CollisionInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn point_in_rect(point: Vec2, rect: (f32, f32, f32, f32)) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub fn predict_collision(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn sweep_test(
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn is_on_platform(entity: &PhysicsBody, platform: &Platform, tolerance: f32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn distance_between(body1: &PhysicsBody, body2: &PhysicsBody) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn within_distance(body1: &PhysicsBody, body2: &PhysicsBody, distance: f32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollisionResolver` is never constructed
[INFO] [stdout]    --> src/physics/collision.rs:158:12
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub struct CollisionResolver;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `separate_bodies`, `apply_bounce`, and `apply_friction` are never used
[INFO] [stdout]    --> src/physics/collision.rs:162:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | impl CollisionResolver {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout] 161 |     /// Resolve collision by separating two bodies
[INFO] [stdout] 162 |     pub fn separate_bodies(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn apply_bounce(body: &mut PhysicsBody, collision: &CollisionInfo, restitution: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub fn apply_friction(body: &mut PhysicsBody, friction_coefficient: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cam_y`
[INFO] [stdout]    --> src/game/mod.rs:224:45
[INFO] [stdout]     |
[INFO] [stdout] 224 |     fn render_background(&self, cam_x: f32, cam_y: f32) {
[INFO] [stdout]     |                                             ^^^^^ help: if this is intentional, prefix it with an underscore: `_cam_y`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `screen_w`
[INFO] [stdout]    --> src/game/mod.rs:225:13
[INFO] [stdout]     |
[INFO] [stdout] 225 |         let screen_w = screen_width();
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_screen_w`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GameConfig` is never constructed
[INFO] [stdout]  --> src/config.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct GameConfig;
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/config.rs:8:15
[INFO] [stdout]     |
[INFO] [stdout]   6 | impl GameConfig {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]   7 |     // Player Physics
[INFO] [stdout]   8 |     pub const PLAYER_MOVE_SPEED: f32 = 200.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   9 |     pub const PLAYER_JUMP_FORCE: f32 = -400.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  10 |     pub const PLAYER_SIZE: (f32, f32) = (32.0, 32.0);
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout]  11 |     pub const PLAYER_MAX_JUMPS: u32 = 2;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  12 |     pub const PLAYER_COLOR: Color = BLUE;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  15 |     pub const GRAVITY: f32 = 980.0;
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout]  16 |     pub const TERMINAL_VELOCITY: f32 = 500.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  17 |     pub const FRICTION: f32 = 0.8;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  20 |     pub const GROUND_HEIGHT: f32 = 40.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout]  21 |     pub const PLATFORM_COLOR: Color = GREEN;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout]  22 |     pub const GROUND_COLOR: Color = BROWN;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  25 |     pub const COIN_VALUE: i32 = 10;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout]  26 |     pub const GEM_VALUE: i32 = 50;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout]  27 |     pub const POWERUP_VALUE: i32 = 100;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout]  28 |     pub const COLLECTIBLE_SIZE: (f32, f32) = (16.0, 16.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  29 |     pub const COLLECTIBLE_ANIMATION_SPEED: f32 = 3.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  32 |     pub const DISTANCE_SCORE_MULTIPLIER: f32 = 0.1;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  33 |     pub const TIME_SCORE_MULTIPLIER: i32 = 10;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  36 |     pub const CAMERA_SMOOTHING: f32 = 0.1;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  37 |     pub const CAMERA_OFFSET_X: f32 = 0.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  38 |     pub const CAMERA_OFFSET_Y: f32 = 0.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  41 |     pub const BACKGROUND_COLOR: Color = SKYBLUE;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  42 |     pub const UI_TEXT_COLOR: Color = WHITE;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout]  43 |     pub const SCORE_TEXT_COLOR: Color = YELLOW;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout]  44 |     pub const DEBUG_TEXT_COLOR: Color = DARKGRAY;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  47 |     pub const CLOUD_PARALLAX_SPEED: f32 = 0.3;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  48 |     pub const MOUNTAIN_PARALLAX_SPEED: f32 = 0.1;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  49 |     pub const TREE_PARALLAX_SPEED: f32 = 0.5;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  50 |     pub const GRASS_PARALLAX_SPEED: f32 = 0.8;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  53 |     pub const DEATH_Y_THRESHOLD: f32 = 100.0; // How far below screen before death
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  54 |     pub const WORLD_WIDTH: f32 = 2000.0; // For minimap calculations
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub const INPUT_BUFFER_TIME: f32 = 0.1; // Seconds to buffer jump input
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub const FLOAT_AMPLITUDE: f32 = 3.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  61 |     pub const FLOAT_FREQUENCY: f32 = 3.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  62 |     pub const SPARKLE_FREQUENCY: f32 = 6.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  63 |     pub const GLOW_PULSE_SPEED: f32 = 4.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub const TARGET_FPS: i32 = 60;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout]  67 |     pub const MAX_PARTICLES: usize = 100;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     pub const UI_MARGIN: f32 = 10.0;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout]  71 |     pub const UI_LINE_HEIGHT: f32 = 25.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout]  72 |     pub const UI_FONT_SIZE: f32 = 20.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout]  73 |     pub const UI_LARGE_FONT_SIZE: f32 = 50.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  74 |     pub const UI_SMALL_FONT_SIZE: f32 = 16.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub const SHOW_DEBUG_INFO: bool = true;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  78 |     pub const SHOW_VELOCITY_INDICATOR: bool = true;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  79 |     pub const SHOW_COLLISION_BOXES: bool = false;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  80 |     pub const SHOW_GRID: bool = false;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout]  81 |     pub const GRID_SIZE: f32 = 32.0;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub const PALETTE_PRIMARY: Color = Color::new(0.2, 0.4, 1.0, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  85 |     pub const PALETTE_SECONDARY: Color = Color::new(1.0, 0.6, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout]  86 |     pub const PALETTE_ACCENT: Color = Color::new(0.8, 0.2, 0.8, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout]  87 |     pub const PALETTE_SUCCESS: Color = Color::new(0.2, 0.8, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  88 |     pub const PALETTE_WARNING: Color = Color::new(1.0, 1.0, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout]  89 |     pub const PALETTE_DANGER: Color = Color::new(1.0, 0.2, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub const SCORE_THRESHOLD_BRONZE: i32 = 100;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  93 |     pub const SCORE_THRESHOLD_SILVER: i32 = 500;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  94 |     pub const SCORE_THRESHOLD_GOLD: i32 = 1000;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub const MASTER_VOLUME: f32 = 1.0;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout]  98 |     pub const SFX_VOLUME: f32 = 0.8;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout]  99 |     pub const MUSIC_VOLUME: f32 = 0.6;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn screen_center() -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn ground_y() -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn death_threshold() -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn player_spawn_position() -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn ui_position(line: i32) -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn with_alpha(color: Color, alpha: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn lerp_color(a: Color, b: Color, t: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn collectible_color(collectible_type: &str) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn platform_color(platform_type: &str) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn get_difficulty_multiplier(time_survived: f32) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn format_score(score: i32) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn format_time(seconds: f32) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn is_performance_good() -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn get_debug_info() -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DifficultyPresets` is never constructed
[INFO] [stdout]    --> src/config.rs:204:12
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub struct DifficultyPresets;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `easy`, `normal`, and `hard` are never used
[INFO] [stdout]    --> src/config.rs:207:12
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl DifficultyPresets {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout] 207 |     pub fn easy() -> DifficultyConfig {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn normal() -> DifficultyConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn hard() -> DifficultyConfig {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DifficultyConfig` is never constructed
[INFO] [stdout]    --> src/config.rs:236:12
[INFO] [stdout]     |
[INFO] [stdout] 236 | pub struct DifficultyConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EnvironmentPresets` is never constructed
[INFO] [stdout]    --> src/config.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | pub struct EnvironmentPresets;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `day`, `sunset`, and `night` are never used
[INFO] [stdout]    --> src/config.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl EnvironmentPresets {
[INFO] [stdout]     | ----------------------- associated functions in this implementation
[INFO] [stdout] 247 |     pub fn day() -> EnvironmentConfig {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 257 |     pub fn sunset() -> EnvironmentConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     pub fn night() -> EnvironmentConfig {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EnvironmentConfig` is never constructed
[INFO] [stdout]    --> src/config.rs:279:12
[INFO] [stdout]     |
[INFO] [stdout] 279 | pub struct EnvironmentConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `position` and `size` are never used
[INFO] [stdout]   --> src/entities/mod.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub trait Entity {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] 13 |     fn position(&self) -> Vec2;
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 14 |     fn size(&self) -> Vec2;
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `mass` is never read
[INFO] [stdout]   --> src/entities/mod.rs:26:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct PhysicsBody {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub mass: f32,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PhysicsBody` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_collected` and `get_bounds` are never used
[INFO] [stdout]   --> src/entities/collectible.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl Collectible {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn is_collected(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn get_bounds(&self) -> (f32, f32, f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Breakable` and `Moving` are never constructed
[INFO] [stdout]   --> src/entities/platform.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum PlatformType {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 16 |     Breakable,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 17 |     Moving,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PlatformType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new_ground`, `new_breakable`, `overlaps_with`, and `is_landing_on` are never used
[INFO] [stdout]   --> src/entities/platform.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl Platform {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn new_ground(x: f32, y: f32, width: f32, height: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn new_breakable(x: f32, y: f32, width: f32, height: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn overlaps_with(&self, other: &PhysicsBody) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn is_landing_on(&self, entity_body: &PhysicsBody, entity_prev_y: f32) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GraphicsUtils` is never constructed
[INFO] [stdout]  --> src/graphics/mod.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct GraphicsUtils;
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/graphics/mod.rs:7:12
[INFO] [stdout]     |
[INFO] [stdout]   5 | impl GraphicsUtils {
[INFO] [stdout]     | ------------------ associated functions in this implementation
[INFO] [stdout]   6 |     /// Draw a filled rectangle with a border
[INFO] [stdout]   7 |     pub fn draw_rectangle_with_border(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  24 |     pub fn draw_gradient_rectangle(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn draw_circle_with_border(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub fn draw_text_with_shadow(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn draw_text_centered(text: &str, x: f32, y: f32, font_size: f32, color: Color) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn draw_progress_bar(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn draw_button(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn is_mouse_over_rect(x: f32, y: f32, width: f32, height: f32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn draw_animated_rectangle(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn draw_debug_grid(camera_x: f32, camera_y: f32, grid_size: f32, color: Color) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 217 |     pub fn draw_particles(center: Vec2, count: i32, radius: f32, color: Color, time_offset: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn draw_health_bar(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn draw_minimap(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `with_alpha` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:305:12
[INFO] [stdout]     |
[INFO] [stdout] 305 |     pub fn with_alpha(color: Color, alpha: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lerp_color` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:310:12
[INFO] [stdout]     |
[INFO] [stdout] 310 |     pub fn lerp_color(a: Color, b: Color, t: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rainbow_color` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:321:12
[INFO] [stdout]     |
[INFO] [stdout] 321 |     pub fn rainbow_color(time: f32, speed: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hsv_to_rgb` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:327:12
[INFO] [stdout]     |
[INFO] [stdout] 327 |     pub fn hsv_to_rgb(h: f32, s: f32, v: f32) -> Color {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLATFORM_GREEN` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:350:15
[INFO] [stdout]     |
[INFO] [stdout] 350 |     pub const PLATFORM_GREEN: Color = Color::new(0.2, 0.8, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLATFORM_BROWN` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:351:15
[INFO] [stdout]     |
[INFO] [stdout] 351 |     pub const PLATFORM_BROWN: Color = Color::new(0.6, 0.4, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLAYER_BLUE` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:352:15
[INFO] [stdout]     |
[INFO] [stdout] 352 |     pub const PLAYER_BLUE: Color = Color::new(0.2, 0.4, 1.0, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DANGER_RED` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:353:15
[INFO] [stdout]     |
[INFO] [stdout] 353 |     pub const DANGER_RED: Color = Color::new(1.0, 0.2, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COLLECTIBLE_YELLOW` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:354:15
[INFO] [stdout]     |
[INFO] [stdout] 354 |     pub const COLLECTIBLE_YELLOW: Color = Color::new(1.0, 1.0, 0.2, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UI_BACKGROUND` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:355:15
[INFO] [stdout]     |
[INFO] [stdout] 355 |     pub const UI_BACKGROUND: Color = Color::new(0.0, 0.0, 0.0, 0.7);
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UI_BORDER` is never used
[INFO] [stdout]    --> src/graphics/mod.rs:356:15
[INFO] [stdout]     |
[INFO] [stdout] 356 |     pub const UI_BORDER: Color = Color::new(0.8, 0.8, 0.8, 1.0);
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/input/mod.rs:60:12
[INFO] [stdout]     |
[INFO] [stdout]  10 | impl InputHandler {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn is_key_released(&self, key: KeyCode) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn get_horizontal_input(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn get_vertical_input(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub fn is_jump_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn is_action_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn is_pause_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn is_reset_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn get_pressed_keys(&self) -> &Vec<KeyCode> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn any_key_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn any_key_just_pressed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_moving` is never used
[INFO] [stdout]    --> src/input/mod.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 |     pub fn is_moving(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_movement_vector` is never used
[INFO] [stdout]    --> src/input/mod.rs:153:12
[INFO] [stdout]     |
[INFO] [stdout] 153 |     pub fn get_movement_vector(input: &InputHandler) -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wants_to_move_left` is never used
[INFO] [stdout]    --> src/input/mod.rs:168:12
[INFO] [stdout]     |
[INFO] [stdout] 168 |     pub fn wants_to_move_left(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wants_to_move_right` is never used
[INFO] [stdout]    --> src/input/mod.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 173 |     pub fn wants_to_move_right(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `just_started_moving_left` is never used
[INFO] [stdout]    --> src/input/mod.rs:178:12
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn just_started_moving_left(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `just_started_moving_right` is never used
[INFO] [stdout]    --> src/input/mod.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout] 184 |     pub fn just_started_moving_right(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `just_stopped_moving_horizontal` is never used
[INFO] [stdout]    --> src/input/mod.rs:190:12
[INFO] [stdout]     |
[INFO] [stdout] 190 |     pub fn just_stopped_moving_horizontal(input: &InputHandler) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `check_bounds` is never used
[INFO] [stdout]    --> src/physics/mod.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout]  12 | impl Physics {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn check_bounds(&self, player: &mut Player) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CollisionSide` is never used
[INFO] [stdout]  --> src/physics/collision.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum CollisionSide {
[INFO] [stdout]   |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollisionInfo` is never constructed
[INFO] [stdout]   --> src/physics/collision.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct CollisionInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollisionDetector` is never constructed
[INFO] [stdout]   --> src/physics/collision.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct CollisionDetector;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/physics/collision.rs:23:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl CollisionDetector {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout]  23 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  28 |     pub fn aabb_overlap(rect1: (f32, f32, f32, f32), rect2: (f32, f32, f32, f32)) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  36 |     pub fn get_collision_info(body1: &PhysicsBody, body2: &PhysicsBody) -> Option<CollisionInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn point_in_rect(point: Vec2, rect: (f32, f32, f32, f32)) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub fn predict_collision(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn sweep_test(
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn is_on_platform(entity: &PhysicsBody, platform: &Platform, tolerance: f32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn distance_between(body1: &PhysicsBody, body2: &PhysicsBody) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn within_distance(body1: &PhysicsBody, body2: &PhysicsBody, distance: f32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollisionResolver` is never constructed
[INFO] [stdout]    --> src/physics/collision.rs:158:12
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub struct CollisionResolver;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `separate_bodies`, `apply_bounce`, and `apply_friction` are never used
[INFO] [stdout]    --> src/physics/collision.rs:162:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | impl CollisionResolver {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout] 161 |     /// Resolve collision by separating two bodies
[INFO] [stdout] 162 |     pub fn separate_bodies(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn apply_bounce(body: &mut PhysicsBody, collision: &CollisionInfo, restitution: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub fn apply_friction(body: &mut PhysicsBody, friction_coefficient: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 15.49s
[INFO] running `Command { std: "docker" "inspect" "0ea0cf82c3bd17972ff5892d876f236e141b29672e345f485cdf78cd1b254cc9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0ea0cf82c3bd17972ff5892d876f236e141b29672e345f485cdf78cd1b254cc9", kill_on_drop: false }`
[INFO] [stdout] 0ea0cf82c3bd17972ff5892d876f236e141b29672e345f485cdf78cd1b254cc9
