Added some (tentative) things to rule_fn macro
This commit is contained in:
parent
7b04b91746
commit
f23947331b
@ -63,9 +63,8 @@ pub fn barbs() -> Rule<()> {
|
|||||||
rotate(&Vector3::y_axis(), -0.2).
|
rotate(&Vector3::y_axis(), -0.2).
|
||||||
scale(0.8);
|
scale(0.8);
|
||||||
|
|
||||||
let b = base_verts.clone();
|
let barb = rule_fn!(() => |self_, base_verts| {
|
||||||
let barb = rule_fn!((), self_ => {
|
let mut next_verts = base_verts;
|
||||||
let mut next_verts = b.clone();
|
|
||||||
let (a0, a1) = next_verts.append_indexed(vert_args(0..4));
|
let (a0, a1) = next_verts.append_indexed(vert_args(0..4));
|
||||||
|
|
||||||
let geom = util::parallel_zigzag(next_verts.clone(), b0..bn, a0..a1);
|
let geom = util::parallel_zigzag(next_verts.clone(), b0..bn, a0..a1);
|
||||||
@ -91,9 +90,8 @@ pub fn barbs() -> Rule<()> {
|
|||||||
rotate(&Vector3::x_axis(), 0.1).
|
rotate(&Vector3::x_axis(), 0.1).
|
||||||
scale(0.95);
|
scale(0.95);
|
||||||
|
|
||||||
let b = base_verts.clone();
|
let main = rule_fn!(() => |self_, base_verts| {
|
||||||
let main = rule_fn!((), self_ => {
|
let mut next_verts = base_verts;
|
||||||
let mut next_verts = b.clone();
|
|
||||||
let (a0, a1) = next_verts.append_indexed(vert_args(0..4));
|
let (a0, a1) = next_verts.append_indexed(vert_args(0..4));
|
||||||
|
|
||||||
// This contributes no faces of its own - just vertices.
|
// This contributes no faces of its own - just vertices.
|
||||||
@ -118,10 +116,10 @@ pub fn barbs() -> Rule<()> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let base = rule_fn!((), _s => {
|
let base = rule_fn!(() => |_s, base_verts| {
|
||||||
RuleEval {
|
RuleEval {
|
||||||
geom: Rc::new(MeshFunc {
|
geom: Rc::new(MeshFunc {
|
||||||
verts: base_verts.clone(),
|
verts: base_verts,
|
||||||
faces: vec![ b0, b0 + 1, b0 + 2, b0, b0 + 2, b0 + 3 ],
|
faces: vec![ b0, b0 + 1, b0 + 2, b0, b0 + 2, b0 + 3 ],
|
||||||
}),
|
}),
|
||||||
// TODO: This might be buggy and leave some vertices lying around
|
// TODO: This might be buggy and leave some vertices lying around
|
||||||
|
|||||||
@ -114,15 +114,20 @@ macro_rules! rule {
|
|||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! rule_fn {
|
macro_rules! rule_fn {
|
||||||
( $Ty:ty, $Self:ident => $Body:expr ) => {
|
( $Ty:ty => |$Self:ident $(,$x:ident)*| $Body:expr ) => {
|
||||||
|
{
|
||||||
|
$(let $x = $x.clone();)*
|
||||||
std::rc::Rc::new(move |$Self: std::rc::Rc<Rule<$Ty>>| -> RuleEval<$Ty> {
|
std::rc::Rc::new(move |$Self: std::rc::Rc<Rule<$Ty>>| -> RuleEval<$Ty> {
|
||||||
|
$(let $x = $x.clone();)*
|
||||||
let $Self = $Self.clone();
|
let $Self = $Self.clone();
|
||||||
$Body
|
$Body
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// TODO: Shouldn't I fully-qualify Rule & RuleEval?
|
// TODO: Shouldn't I fully-qualify Rule & RuleEval?
|
||||||
// TODO: Document all of the above macros
|
// TODO: Document all of the above macros
|
||||||
|
// TODO: Why must I clone twice?
|
||||||
|
|
||||||
impl<S> Rule<S> {
|
impl<S> Rule<S> {
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user