use super::*;
pub fn board_from(terms: &MatchTerms, seats: u8, beach: &[u8]) -> crate::sim::Board {
let Some(level) = beach_from(beach) else {
return board_for(terms, seats);
};
if level.seats() < seats {
return board_for(terms, seats);
}
let mut board = level.board();
crate::sim::set_versus_rules(
&mut board,
GullPressure::from_index(usize::from(terms.gulls)).period(),
);
board.set_round_length(Some(
RoundLength::from_index(usize::from(terms.round)).ticks(),
));
board.set_signpost_rule(posts_from(terms), crate::sim::CapPolicy::Evict);
board
}
pub fn board_for(terms: &MatchTerms, seats: u8) -> crate::sim::Board {
let map = MapChoice::from_index(usize::from(terms.map));
let (w, h) = map.size();
let mut board = if map == MapChoice::Classic {
crate::sim::classic_arena_seeded(terms.seed, false, seats)
} else {
crate::sim::generate_arena(terms.seed, seats, w, h)
};
board.set_wrap(map.wraps());
crate::sim::set_versus_rules(
&mut board,
GullPressure::from_index(usize::from(terms.gulls)).period(),
);
board.set_round_length(Some(
RoundLength::from_index(usize::from(terms.round)).ticks(),
));
board.set_signpost_rule(posts_from(terms), crate::sim::CapPolicy::Evict);
board
}
pub fn bot_seats_from(terms: &MatchTerms, seats: u8) -> [Option<BotLevel>; MAX_PLAYERS] {
let level = BotLevel::from_index(usize::from(terms.bot_level));
let mut out = [None; MAX_PLAYERS];
for seat in seats.saturating_sub(terms.bots)..seats {
if let Some(slot) = out.get_mut(usize::from(seat)) {
*slot = Some(level);
}
}
out
}