use navig18xx::prelude::*;
use navig18xx::ui::*;
mod output;
use output::Dir;
#[test]
fn test() {
main()
}
fn main() {
let image_dir = Dir::Examples;
let output_file = image_dir.join("offline_ui.png");
let ui = build_ui();
check_ui(&ui);
save_screenshot(&ui, output_file);
}
fn build_ui() -> UserInterface {
let games: Vec<Box<dyn Game>> =
vec![Box::new(navig18xx::game::new_1861())];
let controller: Controller = control::DummyController::new().into();
let keymap = Keymap::default();
let mut ui = UserInterface::new(games, controller, keymap);
let response = ui.new_game(0);
ui.respond(response);
let moscow: HexAddress = (4, 7).into();
ui.state = state::default::Default::at_hex(moscow).into();
ui.draw();
feed_key(&mut ui, gdk::keys::constants::t);
feed_key(&mut ui, gdk::keys::constants::Up);
feed_key(&mut ui, gdk::keys::constants::Up);
feed_key(&mut ui, gdk::keys::constants::Return);
feed_key(&mut ui, gdk::keys::constants::period);
feed_key(&mut ui, gdk::keys::constants::period);
feed_key(&mut ui, gdk::keys::constants::u);
feed_key(&mut ui, gdk::keys::constants::Return);
ui
}
fn feed_key(ui: &mut UserInterface, key: keymap::Key) {
let (ctrl, alt, shift) = (false, false, false);
let event = KeyPress {
key,
ctrl,
alt,
shift,
};
let response = ui.handle_key_press(&event);
ui.respond(response);
}
fn check_ui(ui: &UserInterface) {
let moscow: HexAddress = (4, 7).into();
let hex_state_opt = ui.assets.map.hex_state(moscow);
assert!(hex_state_opt.is_some());
let hex_state = hex_state_opt.unwrap();
assert_eq!(hex_state.tile(&ui.assets.map).name, "637");
assert_eq!(hex_state.rotation(), &RotateCW::Two);
let tok_spaces = hex_state.tile(&ui.assets.map).token_spaces();
let token_opt = hex_state.token_at(&tok_spaces[0]);
assert!(token_opt.is_some());
let token = token_opt.unwrap();
assert_eq!(ui.assets.map.try_token_name(token), Some("KK"));
}
fn save_screenshot(ui: &UserInterface, dest: std::path::PathBuf) {
let margin = 1;
let image = ui
.canvas
.copy_ink_with_margin(&ui.state, &ui.assets, margin);
let _ = ui.save_image(dest, image);
}