1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use crate::{
err::Error,
file::{Build, Load},
geom::Transformable,
math::Trans3Builder,
};
use arctk_attr::load;
use std::path::Path;
#[load]
pub struct MeshBuilder(
Vec<String>,
Option<Trans3Builder>,
);
impl Build for MeshBuilder {
type Inst = crate::geom::Mesh;
#[inline]
fn build(self, in_dir: &Path) -> Result<Self::Inst, Error> {
let trans = if let Some(t) = self.1 {
Some(t.build(in_dir)?)
} else {
None
};
let mut tris = Vec::new();
for name in self.0 {
let mut obj = Self::Inst::load(&in_dir.join(name))?;
if let Some(t) = trans {
obj.transform(&t);
}
tris.extend(obj.into_tris())
}
Ok(Self::Inst::new(tris))
}
}