diff --git a/src/bin/bevy.rs b/src/bin/bevy.rs index a5557e7..f49826e 100644 --- a/src/bin/bevy.rs +++ b/src/bin/bevy.rs @@ -185,7 +185,8 @@ fn setup(mut commands: Commands, mut game_state: ResMut) { // Initialize game state let game_map = map::GameMap::new(MAP_WIDTH, MAP_HEIGHT); let throne = game_map.throne_pos().unwrap_or((40, 20)); - let player = entities::Player::new(throne.0, throne.1); + let mut player = entities::Player::new(throne.0, throne.1); + player.update_powers(); let henchmen = entities::Henchman::starting_roster(throne.0, throne.1); // Spawn starting workers near throne @@ -339,6 +340,7 @@ fn handle_input( _ => {} } game_state.log.push(format!("Researched: {name}!")); + game_state.player.update_powers(); // Check if new powers unlocked } } } diff --git a/src/superpowers.rs b/src/superpowers.rs index 9380276..1477520 100644 --- a/src/superpowers.rs +++ b/src/superpowers.rs @@ -257,4 +257,31 @@ mod tests { assert!(!name.is_empty()); } } + + #[test] + fn all_powers_have_matching_research() { + let powers = all_superpowers(); + let unlocks = power_research_unlocks(); + for power in &powers { + let found = unlocks.iter().any(|(key, _, _)| *key == power.unlock_key); + assert!(found, "Power '{}' has unlock_key '{}' but no matching research entry", power.name, power.unlock_key); + } + } + + #[test] + fn no_duplicate_unlock_keys() { + let powers = all_superpowers(); + let mut keys = std::collections::HashSet::new(); + for power in &powers { + assert!(keys.insert(power.unlock_key), "Duplicate unlock_key: {}", power.unlock_key); + } + } + + #[test] + fn research_costs_are_positive() { + let unlocks = power_research_unlocks(); + for (_, cost, _) in &unlocks { + assert!(*cost > 0, "Research cost should be positive"); + } + } }