Some panics to unreachable!, better error msging

This commit is contained in:
Llywelwyn 2023-09-23 00:12:05 +01:00
parent ae8f0d15a0
commit 23a42bab80
16 changed files with 19 additions and 19 deletions

View file

@ -75,7 +75,7 @@ impl AreaStartingPosition {
} }
} }
if available_floors.is_empty() { if available_floors.is_empty() {
panic!("No valid floors to start on"); unreachable!("No valid floors to start on.");
} }
available_floors.sort_by(|a, b| a.1.partial_cmp(&b.1).unwrap()); available_floors.sort_by(|a, b| a.1.partial_cmp(&b.1).unwrap());

View file

@ -76,7 +76,7 @@ impl RoadExit {
} }
} }
if available_floors.is_empty() { if available_floors.is_empty() {
panic!("No valid floors to start on."); unreachable!("No valid floors to start on.");
} }
available_floors.sort_by(|a, b| a.1.partial_cmp(&b.1).unwrap()); available_floors.sort_by(|a, b| a.1.partial_cmp(&b.1).unwrap());
let end_x = (available_floors[0].0 as i32) % build_data.map.width; let end_x = (available_floors[0].0 as i32) % build_data.map.width;

View file

@ -137,7 +137,7 @@ impl BuilderChain {
None => { None => {
self.starter = Some(starter); self.starter = Some(starter);
} }
Some(_) => panic!("You can only have one starting builder."), Some(_) => unreachable!("You can only have one starting builder."),
}; };
} }
@ -147,7 +147,7 @@ impl BuilderChain {
pub fn build_map(&mut self, rng: &mut RandomNumberGenerator) { pub fn build_map(&mut self, rng: &mut RandomNumberGenerator) {
match &mut self.starter { match &mut self.starter {
None => panic!("Cannot run a map builder chain without a starting build system"), None => unreachable!("Cannot run a map builder chain without a starting build system"),
Some(starter) => { Some(starter) => {
// Build the starting map // Build the starting map
starter.build_map(rng, &mut self.build_data); starter.build_map(rng, &mut self.build_data);

View file

@ -27,7 +27,7 @@ impl RoomBasedSpawner {
); );
} }
} else { } else {
panic!("RoomBasedSpawner only works after rooms have been created"); unreachable!("RoomBasedSpawner tried to run without any rooms.");
} }
} }
} }

View file

@ -22,7 +22,7 @@ impl RoomBasedStairs {
build_data.map.tiles[stairs_idx] = TileType::DownStair; build_data.map.tiles[stairs_idx] = TileType::DownStair;
build_data.take_snapshot(); build_data.take_snapshot();
} else { } else {
panic!("RoomBasedStairs only works after rooms have been created"); unreachable!("RoomBasedStairs tried to run without any rooms.");
} }
} }
} }

View file

@ -20,7 +20,7 @@ impl RoomBasedStartingPosition {
let start_pos = rooms[0].center(); let start_pos = rooms[0].center();
build_data.starting_position = Some(Position { x: start_pos.x, y: start_pos.y }); build_data.starting_position = Some(Position { x: start_pos.x, y: start_pos.y });
} else { } else {
panic!("RoomBasedStartingPosition only works after rooms have been created"); unreachable!("RoomBasedStartingPosition tried to run without any rooms.");
} }
} }
} }

View file

@ -42,7 +42,7 @@ impl RoomCornerRounder {
if let Some(rooms_builder) = &build_data.rooms { if let Some(rooms_builder) = &build_data.rooms {
rooms = rooms_builder.clone(); rooms = rooms_builder.clone();
} else { } else {
panic!("RoomCornerRounding requires a builder with rooms."); unreachable!("RoomCornerRounding tried to run without any rooms.");
} }
for room in rooms.iter() { for room in rooms.iter() {

View file

@ -50,7 +50,7 @@ impl RoomDrawer {
if let Some(rooms_builder) = &build_data.rooms { if let Some(rooms_builder) = &build_data.rooms {
rooms = rooms_builder.clone(); rooms = rooms_builder.clone();
} else { } else {
panic!("RoomDrawer require a builder with rooms"); unreachable!("RoomDrawer tried to run without any rooms.");
} }
for room in rooms.iter() { for room in rooms.iter() {

View file

@ -20,7 +20,7 @@ impl RoomExploder {
if let Some(rooms_builder) = &build_data.rooms { if let Some(rooms_builder) = &build_data.rooms {
rooms = rooms_builder.clone(); rooms = rooms_builder.clone();
} else { } else {
panic!("RoomExploder requires a builder with rooms."); unreachable!("RoomExploder tried to run without any rooms.");
} }
for room in rooms.iter() { for room in rooms.iter() {
let start = room.center(); let start = room.center();

View file

@ -141,7 +141,7 @@ impl ThemeRooms {
if let Some(rooms_builder) = &build_data.rooms { if let Some(rooms_builder) = &build_data.rooms {
rooms = rooms_builder.clone(); rooms = rooms_builder.clone();
} else { } else {
panic!("RoomCornerRounding requires a builder with rooms."); unreachable!("RoomCornerRounding tried to run without any rooms.");
} }
let count = roll_until_fail(rng, self.percent); let count = roll_until_fail(rng, self.percent);

View file

@ -22,7 +22,7 @@ impl BresenhamCorridors {
if let Some(rooms_builder) = &build_data.rooms { if let Some(rooms_builder) = &build_data.rooms {
rooms = rooms_builder.clone(); rooms = rooms_builder.clone();
} else { } else {
panic!("BresenhamCorridors require a builder with room structures"); unreachable!("BresenhamCorridors tried to run without any rooms.");
} }
let mut connected: HashSet<usize> = HashSet::new(); let mut connected: HashSet<usize> = HashSet::new();

View file

@ -21,7 +21,7 @@ impl BspCorridors {
if let Some(rooms_builder) = &build_data.rooms { if let Some(rooms_builder) = &build_data.rooms {
rooms = rooms_builder.clone(); rooms = rooms_builder.clone();
} else { } else {
panic!("BSP Corridors require a builder with room structures"); unreachable!("BSP Corridors tried to run without any rooms.");
} }
let mut corridors: Vec<Vec<usize>> = Vec::new(); let mut corridors: Vec<Vec<usize>> = Vec::new();

View file

@ -21,7 +21,7 @@ impl DoglegCorridors {
if let Some(rooms_builder) = &build_data.rooms { if let Some(rooms_builder) = &build_data.rooms {
rooms = rooms_builder.clone(); rooms = rooms_builder.clone();
} else { } else {
panic!("DoglegCorridors require a builder with rooms."); unreachable!("DoglegCorridors tried to run without any rooms.");
} }
let mut corridors: Vec<Vec<usize>> = Vec::new(); let mut corridors: Vec<Vec<usize>> = Vec::new();

View file

@ -22,7 +22,7 @@ impl NearestCorridors {
if let Some(rooms_builder) = &build_data.rooms { if let Some(rooms_builder) = &build_data.rooms {
rooms = rooms_builder.clone(); rooms = rooms_builder.clone();
} else { } else {
panic!("NearestCorridors requires a builder with rooms"); unreachable!("NearestCorridors tried to run without any rooms.");
} }
let mut connected: HashSet<usize> = HashSet::new(); let mut connected: HashSet<usize> = HashSet::new();

View file

@ -27,7 +27,7 @@ impl CorridorSpawner {
); );
} }
} else { } else {
panic!("CorridorSpawner only works after corridors have been created"); unreachable!("CorridorSpawner tried to run without any corridors.");
} }
} }
} }

View file

@ -759,7 +759,7 @@ pub fn table_by_name(raws: &RawMaster, key: &str, optional_difficulty: Option<i3
fn find_slot_for_equippable_item(tag: &str, raws: &RawMaster) -> EquipmentSlot { fn find_slot_for_equippable_item(tag: &str, raws: &RawMaster) -> EquipmentSlot {
if !raws.item_index.contains_key(tag) { if !raws.item_index.contains_key(tag) {
panic!("Trying to equip an unknown item: {}", tag); unreachable!("Tried to equip an unknown item: {}", tag);
} }
let item_index = raws.item_index[tag]; let item_index = raws.item_index[tag];
let item = &raws.raws.items[item_index]; let item = &raws.raws.items[item_index];
@ -794,7 +794,7 @@ fn find_slot_for_equippable_item(tag: &str, raws: &RawMaster) -> EquipmentSlot {
} }
} }
} }
panic!("Trying to equip {}, but it has no slot tag.", tag); unreachable!("Tried to equip {}, but it has no slot tag.", tag);
} }
pub fn roll_on_loot_table( pub fn roll_on_loot_table(
@ -1067,7 +1067,7 @@ fn parse_damage_string(n: &str) -> (DamageType, DiceType) {
"fire" => DamageType::Fire, "fire" => DamageType::Fire,
"cold" => DamageType::Cold, "cold" => DamageType::Cold,
"poison" => DamageType::Poison, "poison" => DamageType::Poison,
_ => panic!("Unrecognised damage type in raws: {}", tokens[1]), _ => unreachable!("Unrecognised damage type in raws: {}", tokens[1]),
} }
} else { } else {
DamageType::Physical DamageType::Physical