| 321 | } |
| 322 | |
| 323 | fn parse_node(n: &JVal) -> Node { |
| 324 | let mut node = Node::identity(); |
| 325 | if let Some(t) = n.get("translation").and_then(|v| v.arr()) { |
| 326 | for (i, v) in t.iter().take(3).enumerate() { |
| 327 | if let Some(f) = v.num() { node.translation[i] = f as f32; } |
| 328 | } |
| 329 | } |
| 330 | if let Some(r) = n.get("rotation").and_then(|v| v.arr()) { |
| 331 | for (i, v) in r.iter().take(4).enumerate() { |
| 332 | if let Some(f) = v.num() { node.rotation[i] = f as f32; } |
| 333 | } |
| 334 | } |
| 335 | if let Some(s) = n.get("scale").and_then(|v| v.arr()) { |
| 336 | for (i, v) in s.iter().take(3).enumerate() { |
| 337 | if let Some(f) = v.num() { node.scale[i] = f as f32; } |
| 338 | } |
| 339 | } |
| 340 | if let Some(m) = n.get("matrix").and_then(|v| v.arr()) { |
| 341 | let mut arr = [0.0f32; 16]; |
| 342 | for (i, v) in m.iter().take(16).enumerate() { |
| 343 | if let Some(f) = v.num() { arr[i] = f as f32; } |
| 344 | } |
| 345 | node.matrix = Some(arr); |
| 346 | } |
| 347 | if let Some(mi) = n.get("mesh").and_then(|v| v.num()) { |
| 348 | node.mesh = Some(mi as usize); |
| 349 | } |
| 350 | if let Some(si) = n.get("skin").and_then(|v| v.num()) { |
| 351 | node.skin = Some(si as usize); |
| 352 | } |
| 353 | if let Some(kids) = n.get("children").and_then(|v| v.arr()) { |
| 354 | for v in kids { |
| 355 | if let Some(i) = v.num() { node.children.push(i as usize); } |
| 356 | } |
| 357 | } |
| 358 | node |
| 359 | } |
| 360 | |
| 361 | fn parse_primitive( |
| 362 | prim: &JVal, root: &JVal, |