From 05048e46c22764dc495f9751e21ae8ff0369d0e0 Mon Sep 17 00:00:00 2001 From: Cameron Date: Sun, 5 Jul 2026 21:22:23 -0700 Subject: [PATCH] Run cargo fmt across the codebase --- src/bin/bevy.rs | 373 +++++++++++++++++++---------- src/bin/terminal/input.rs | 9 +- src/bin/terminal/mod.rs | 11 +- src/bin/terminal/ui.rs | 489 ++++++++++++++++++++++++++++---------- src/build.rs | 28 ++- src/combat.rs | 456 +++++++++++++++++++++++++---------- src/entities/agent.rs | 169 ++++++++++--- src/entities/core.rs | 6 +- src/entities/henchman.rs | 15 +- src/entities/minion.rs | 28 ++- src/entities/mod.rs | 12 +- src/entities/player.rs | 21 +- src/events.rs | 40 +++- src/lib.rs | 10 +- src/map.rs | 38 ++- src/save.rs | 180 ++++++++------ src/sim.rs | 52 +++- src/superpowers.rs | 42 +++- src/tiles.rs | 243 ++++++++++++++++--- 19 files changed, 1596 insertions(+), 626 deletions(-) diff --git a/src/bin/bevy.rs b/src/bin/bevy.rs index 5873ef6..c20ce02 100644 --- a/src/bin/bevy.rs +++ b/src/bin/bevy.rs @@ -4,7 +4,7 @@ use bevy::prelude::*; use bevy::window::WindowResolution; -use supervillain::{entities, map, tiles, combat, build}; +use supervillain::{build, combat, entities, map, tiles}; // ─── Constants ─────────────────────────────────────────────────────────────── @@ -169,13 +169,16 @@ fn main() { .insert_resource(ClearColor(Color::srgb(0.02, 0.02, 0.04))) .insert_resource(GameState::placeholder()) .add_systems(Startup, (setup, setup_ui)) - .add_systems(Update, ( - handle_input, - update_defend_phase, - render_map_tiles, - render_entities, - render_ui, - )) + .add_systems( + Update, + ( + handle_input, + update_defend_phase, + render_map_tiles, + render_entities, + render_ui, + ), + ) .run(); } @@ -195,14 +198,26 @@ fn setup(mut commands: Commands, mut game_state: ResMut) { let mx = throne.0 + dx; let my = throne.1 + dy; if game_map.is_walkable(mx, my) { - minions.push(entities::Minion::new(mx, my, entities::MinionClass::Worker, 0, 0)); + minions.push(entities::Minion::new( + mx, + my, + entities::MinionClass::Worker, + 0, + 0, + )); } } // Spawn minions at guard posts let guard_posts = game_map.tiles_of_type(tiles::TileType::GuardPost); for &(gx, gy) in &guard_posts { - minions.push(entities::Minion::new(gx, gy, entities::MinionClass::Guard, 0, 0)); + minions.push(entities::Minion::new( + gx, + gy, + entities::MinionClass::Guard, + 0, + 0, + )); } *game_state = GameState { @@ -349,8 +364,10 @@ fn handle_input( } // Update cursor to player position when in research menu if let Ok(mut transform) = cursor_query.single_mut() { - transform.translation.x = game_state.player.entity.x as f32 * TILE_SIZE + TILE_SIZE / 2.0; - transform.translation.y = -(game_state.player.entity.y as f32 * TILE_SIZE + TILE_SIZE / 2.0); + transform.translation.x = + game_state.player.entity.x as f32 * TILE_SIZE + TILE_SIZE / 2.0; + transform.translation.y = + -(game_state.player.entity.y as f32 * TILE_SIZE + TILE_SIZE / 2.0); } return; } @@ -374,13 +391,20 @@ fn handle_input( let class = classes[game_state.hire_selected]; let unlock_key = class.unlock_key(); if !game_state.player.unlocked.contains(unlock_key) { - game_state.log.push(format!("{} not researched yet!", class.name())); + game_state + .log + .push(format!("{} not researched yet!", class.name())); } else { let cost = class.hire_cost(); if game_state.player.gold < cost { - game_state.log.push(format!("Need {} gold to hire {}!", cost, class.name())); + game_state.log.push(format!( + "Need {} gold to hire {}!", + cost, + class.name() + )); } else { - let alive_minions = game_state.minions.iter().filter(|m| m.entity.alive).count() as i32; + let alive_minions = + game_state.minions.iter().filter(|m| m.entity.alive).count() as i32; let minion_cap = game_state.player.minion_cap; if alive_minions >= minion_cap { game_state.log.push(format!( @@ -399,17 +423,27 @@ fn handle_input( game_state.player.gold -= cost; let dmg_bonus = game_state.player.minion_damage_bonus; let hp_bonus = game_state.player.minion_hp_bonus; - let minion = entities::Minion::new(mx, my, class, dmg_bonus, hp_bonus); + let minion = entities::Minion::new( + mx, my, class, dmg_bonus, hp_bonus, + ); game_state.minions.push(minion); - game_state.log.push(format!("Hired {} for {} gold!", class.name(), cost)); + game_state.log.push(format!( + "Hired {} for {} gold!", + class.name(), + cost + )); placed = true; break; } } - if placed { break; } + if placed { + break; + } } if !placed { - game_state.log.push("No room near throne to place minion!".to_string()); + game_state + .log + .push("No room near throne to place minion!".to_string()); } } } @@ -421,8 +455,10 @@ fn handle_input( } // Update cursor to player position when in hire menu if let Ok(mut transform) = cursor_query.single_mut() { - transform.translation.x = game_state.player.entity.x as f32 * TILE_SIZE + TILE_SIZE / 2.0; - transform.translation.y = -(game_state.player.entity.y as f32 * TILE_SIZE + TILE_SIZE / 2.0); + transform.translation.x = + game_state.player.entity.x as f32 * TILE_SIZE + TILE_SIZE / 2.0; + transform.translation.y = + -(game_state.player.entity.y as f32 * TILE_SIZE + TILE_SIZE / 2.0); } return; } @@ -445,15 +481,21 @@ fn handle_input( let schemes = tiles::available_schemes(); if idx < schemes.len() { let scheme = &schemes[idx]; - let alive_minions = game_state.minions.iter().filter(|m| m.entity.alive).count() as i32; + let alive_minions = + game_state.minions.iter().filter(|m| m.entity.alive).count() as i32; if alive_minions < scheme.minion_cost { - game_state.log.push(format!("Need {} minions for this scheme!", scheme.minion_cost)); + game_state.log.push(format!( + "Need {} minions for this scheme!", + scheme.minion_cost + )); } else { // Remove minions (send them on the mission) let mut removed = 0i32; let cost = scheme.minion_cost; game_state.minions.retain(|m| { - if removed >= cost { return true; } + if removed >= cost { + return true; + } if m.entity.alive && m.class == entities::MinionClass::Worker { removed += 1; false @@ -463,7 +505,9 @@ fn handle_input( }); if removed < cost { game_state.minions.retain(|m| { - if removed >= cost { return true; } + if removed >= cost { + return true; + } if m.entity.alive { removed += 1; false @@ -473,16 +517,21 @@ fn handle_input( }); } - game_state.player.active_schemes.push(entities::ActiveScheme { - name: scheme.name.to_string(), - turns_remaining: scheme.duration_turns, - gold_reward: scheme.gold_reward, - heat_cost: scheme.heat_cost, - notoriety_reward: scheme.notoriety_reward, - minion_cost: scheme.minion_cost, - loot: scheme.loot.map(|s| s.to_string()), - }); - game_state.log.push(format!("Launched scheme: {}!", scheme.name)); + game_state + .player + .active_schemes + .push(entities::ActiveScheme { + name: scheme.name.to_string(), + turns_remaining: scheme.duration_turns, + gold_reward: scheme.gold_reward, + heat_cost: scheme.heat_cost, + notoriety_reward: scheme.notoriety_reward, + minion_cost: scheme.minion_cost, + loot: scheme.loot.map(|s| s.to_string()), + }); + game_state + .log + .push(format!("Launched scheme: {}!", scheme.name)); game_state.log.push(format!( " {} minions deployed, {} turns", scheme.minion_cost, scheme.duration_turns @@ -496,15 +545,21 @@ fn handle_input( } // Update cursor to player position when in world map if let Ok(mut transform) = cursor_query.single_mut() { - transform.translation.x = game_state.player.entity.x as f32 * TILE_SIZE + TILE_SIZE / 2.0; - transform.translation.y = -(game_state.player.entity.y as f32 * TILE_SIZE + TILE_SIZE / 2.0); + transform.translation.x = + game_state.player.entity.x as f32 * TILE_SIZE + TILE_SIZE / 2.0; + transform.translation.y = + -(game_state.player.entity.y as f32 * TILE_SIZE + TILE_SIZE / 2.0); } return; } // ── Build mode ───────────────────────────────────────────────────────── if game_state.build_mode.is_some() { - let speed = if keyboard.pressed(KeyCode::ShiftLeft) { 2 } else { 1 }; + let speed = if keyboard.pressed(KeyCode::ShiftLeft) { + 2 + } else { + 1 + }; // Cursor movement in build mode — take build_mode out, move, put back if keyboard.just_pressed(KeyCode::KeyH) @@ -517,11 +572,17 @@ fn handle_input( || keyboard.just_pressed(KeyCode::ArrowDown) { let mut bm = game_state.build_mode.take().unwrap(); - let (dx, dy) = if keyboard.just_pressed(KeyCode::KeyH) || keyboard.just_pressed(KeyCode::ArrowLeft) { + let (dx, dy) = if keyboard.just_pressed(KeyCode::KeyH) + || keyboard.just_pressed(KeyCode::ArrowLeft) + { (-speed, 0) - } else if keyboard.just_pressed(KeyCode::KeyL) || keyboard.just_pressed(KeyCode::ArrowRight) { + } else if keyboard.just_pressed(KeyCode::KeyL) + || keyboard.just_pressed(KeyCode::ArrowRight) + { (speed, 0) - } else if keyboard.just_pressed(KeyCode::KeyK) || keyboard.just_pressed(KeyCode::ArrowUp) { + } else if keyboard.just_pressed(KeyCode::KeyK) + || keyboard.just_pressed(KeyCode::ArrowUp) + { (0, -speed) } else { (0, speed) @@ -581,7 +642,13 @@ fn handle_input( if alive_minions < minion_cap { let dmg_bonus = player.minion_damage_bonus; let hp_bonus = player.minion_hp_bonus; - let minion = entities::Minion::new(cx, cy, entities::MinionClass::Guard, dmg_bonus, hp_bonus); + let minion = entities::Minion::new( + cx, + cy, + entities::MinionClass::Guard, + dmg_bonus, + hp_bonus, + ); minions.push(minion); log.push("Minion deployed at guard post!".to_string()); } else { @@ -639,7 +706,11 @@ fn handle_input( } // ── Normal Build phase movement ─────────────────────────────────────── - let speed = if keyboard.pressed(KeyCode::ShiftLeft) { 2 } else { 1 }; + let speed = if keyboard.pressed(KeyCode::ShiftLeft) { + 2 + } else { + 1 + }; if keyboard.just_pressed(KeyCode::KeyH) || keyboard.just_pressed(KeyCode::ArrowLeft) { game_state.player.entity.x -= speed; @@ -722,9 +793,15 @@ fn handle_input( // Superpower activation (number keys 1-9) let power_keys = [ - KeyCode::Digit1, KeyCode::Digit2, KeyCode::Digit3, - KeyCode::Digit4, KeyCode::Digit5, KeyCode::Digit6, - KeyCode::Digit7, KeyCode::Digit8, KeyCode::Digit9, + KeyCode::Digit1, + KeyCode::Digit2, + KeyCode::Digit3, + KeyCode::Digit4, + KeyCode::Digit5, + KeyCode::Digit6, + KeyCode::Digit7, + KeyCode::Digit8, + KeyCode::Digit9, ]; for (i, key) in power_keys.iter().enumerate() { if keyboard.just_pressed(*key) { @@ -736,7 +813,8 @@ fn handle_input( // Update cursor position to follow player (when not in build mode) if let Ok(mut transform) = cursor_query.single_mut() { transform.translation.x = game_state.player.entity.x as f32 * TILE_SIZE + TILE_SIZE / 2.0; - transform.translation.y = -(game_state.player.entity.y as f32 * TILE_SIZE + TILE_SIZE / 2.0); + transform.translation.y = + -(game_state.player.entity.y as f32 * TILE_SIZE + TILE_SIZE / 2.0); } } @@ -750,21 +828,19 @@ fn start_wave(game_state: &mut ResMut) { let entries = gs.game_map.entry_positions(); let heat = gs.player.heat; - let new_agents = entities::generate_agent_wave( - wave, - heat, - &entries, - ); + let new_agents = entities::generate_agent_wave(wave, heat, &entries); gs.agents = new_agents; // Calculate initial paths — collect positions first, then iterate mutably let throne = gs.game_map.throne_pos().unwrap_or((40, 20)); - let agent_positions: Vec<(i32, i32)> = gs.agents.iter().map(|a| (a.entity.x, a.entity.y)).collect(); + let agent_positions: Vec<(i32, i32)> = + gs.agents.iter().map(|a| (a.entity.x, a.entity.y)).collect(); let game_map = &gs.game_map; for (i, agent) in gs.agents.iter_mut().enumerate() { let target = agent.preferred_target(game_map, throne); let avoid: std::collections::HashSet<(i32, i32)> = agent_positions - .iter().enumerate() + .iter() + .enumerate() .filter(|(j, _)| *j != i) .map(|(_, pos)| *pos) .collect(); @@ -776,9 +852,14 @@ fn start_wave(game_state: &mut ResMut) { fn activate_power(game_state: &mut ResMut, index: usize) { let gs = &mut **game_state; - if index >= gs.player.powers.len() { return; } + if index >= gs.player.powers.len() { + return; + } if !gs.player.powers[index].is_ready() { - gs.log.push(format!("{} is on cooldown ({}t)", gs.player.powers[index].name, gs.player.powers[index].current_cooldown)); + gs.log.push(format!( + "{} is on cooldown ({}t)", + gs.player.powers[index].name, gs.player.powers[index].current_cooldown + )); return; } @@ -806,10 +887,7 @@ fn activate_power(game_state: &mut ResMut, index: usize) { // ─── Defend Phase ──────────────────────────────────────────────────────────── -fn update_defend_phase( - time: Res