use askama::Template; use food::Recipes; use itertools::Itertools; use crate::{ RuntimeModule, common::{Game, enemy::Enemy, materials::MaterialDrops}, create_file, }; mod food; const ENEMIES_PATH: &str = "./input/kh3/enemies"; const RECIPES_PATH: &str = "./input/kh3/recipes.toml"; #[derive(Template)] #[template(path = "pages/kh3/drops.html")] struct DropsTemplate { pub game: Game, pub drops: Vec, pub material_kinds: Vec, } #[derive(Template)] #[template(path = "pages/kh3/food-sim.html")] struct RecipesTemplate { pub recipes: Recipes, } pub struct Module; impl RuntimeModule for Module { fn start_module() { tracing::info!("Loading enemy data from {}", ENEMIES_PATH); let enemies = Enemy::import(ENEMIES_PATH); let drops = MaterialDrops::new(enemies); let material_kinds = drops .iter() .map(|d| d.category.get_category(&Game::Kh3)) .dedup() .collect(); tracing::info!("Loading recipes data from {}", RECIPES_PATH); let recipes_str = std::fs::read_to_string(RECIPES_PATH).unwrap(); let recipes = toml::from_str::(&recipes_str).unwrap(); tracing::info!("Generating the KH3 drops template"); let drops_template = DropsTemplate { game: Game::Kh3, drops, material_kinds, }; create_file("./out/kh3", "drops", drops_template).unwrap(); tracing::info!("Generating the KH3 recipes template"); let food_template = RecipesTemplate { recipes }; create_file("./out/kh3", "food-sim", food_template).unwrap(); } }