pub fn subdivide(node OctreeNode) -> OctreeNode {
mut new_children := [8]?&OctreeNode{}
for child_id in 0 .. 8 {
new_children[child_id] = opt(&calculate_new_child(node, child_id))
}
return OctreeNode{
center: node.center
size: node.size
positions: node.positions
children: new_children
}
}
fn calculate_new_child(node OctreeNode, child_id i32) -> OctreeNode {
quarter_size := node.size / 4
offset_x := if child_id & 1 == 0 { -quarter_size } else { quarter_size }
offset_y := if child_id & 2 == 0 { -quarter_size } else { quarter_size }
offset_z := if child_id & 4 == 0 { -quarter_size } else { quarter_size }
return OctreeNode{
center: tellusim.TSVector3f{
x: node.center.x + offset_x
y: node.center.y + offset_y
z: node.center.z + offset_z
}
size: node.size / 2
}
}
All stages before C compile finished in 92.546ms
C compiler output:
/home/yuart/Projects/spawn/out.c: In function ‘octree___subdivide’:
/home/yuart/Projects/spawn/out.c:442:33: error: lvalue required as unary ‘&’ operand
442 | .data = &octree___calculate_new_child(node, child_id),
| ^
error: C compiler failed