2024-04-21 16:23:40 +00:00
|
|
|
// ▄████████▄ + ███ + ▄█████████ ███ +
|
|
|
|
// ███▀ ▀███ + + ███ ███▀ + ███ + +
|
|
|
|
// ███ + ███ ███ ███ █████████ ███ ███ ███ ███
|
2024-04-21 17:34:00 +00:00
|
|
|
// ███ +███ ███ ███ ███ ███▐██████ ███ ███ ███
|
2024-04-21 16:23:40 +00:00
|
|
|
// ███ + ███ ███+ ███ +███ ███ + ███ ███ + ███
|
|
|
|
// ███▄ ▄███ ███▄ ███ ███ + ███ + ███ ███▄ ███
|
|
|
|
// ▀████████▀ + ▀███████ ███▄ ███▄ ▀████ ▀███████
|
|
|
|
// + + + ███
|
|
|
|
// + ▀████████████████████████████████████████████████████▀
|
|
|
|
|
2024-06-11 02:40:57 +00:00
|
|
|
use blend::Blend;
|
|
|
|
use std::fs::File;
|
|
|
|
use std::io::Write;
|
|
|
|
|
2024-04-19 21:47:40 +00:00
|
|
|
fn main() {
|
|
|
|
let target = std::env::var("TARGET").unwrap();
|
|
|
|
if target.contains("windows") {
|
|
|
|
println!("cargo:warning=Embedding Windows Icon");
|
2024-05-12 21:15:17 +00:00
|
|
|
embed_resource::compile("build/windows/icon.rc");
|
2024-04-19 21:47:40 +00:00
|
|
|
}
|
2024-06-11 02:40:57 +00:00
|
|
|
|
|
|
|
let file = File::create("src/data/scenes.in");
|
|
|
|
if let Ok(mut file) = file {
|
|
|
|
generate_scenes(&mut file, "src/blender/suit_v2.blend");
|
|
|
|
generate_scenes(&mut file, "src/blender/cruiser.blend");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn generate_scenes(stream: &mut File, source_blend_file: &str) {
|
|
|
|
let blend = Blend::from_path(source_blend_file).expect("error loading blend file");
|
|
|
|
for obj in blend.root_instances() {
|
|
|
|
let loc: Vec<f32> = if obj.is_valid("loc") {
|
|
|
|
obj.get_f32_vec("loc")
|
|
|
|
} else {
|
|
|
|
vec![0.0, 0.0, 0.0]
|
|
|
|
};
|
|
|
|
let rot: Vec<f32> = if obj.is_valid("rot") {
|
|
|
|
obj.get_f32_vec("rot")
|
|
|
|
} else {
|
|
|
|
vec![0.0, 0.0, 0.0]
|
|
|
|
};
|
|
|
|
let name = obj.get("id").get_string("name");
|
|
|
|
|
|
|
|
let result = write!(stream, "(\"{}\", {:?}, {:?}),\n", name, loc, rot);
|
|
|
|
if result.is_err() {
|
|
|
|
println!("{:?}", result);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2024-04-19 21:47:40 +00:00
|
|
|
}
|