diff --git a/scenes/demo-2.lisp b/scenes/demo-2.lisp index 09c76c3..6c07792 100644 --- a/scenes/demo-2.lisp +++ b/scenes/demo-2.lisp @@ -1,40 +1,4 @@ -(set 'red - (material - (color 1 0 0) - (color 1 0 0) - (color 0.5 0 0) - 50 0.25)) -(set 'blue - (material - (color 0 0 1) - (color 0 0 1) - (color 0 0 0.6) - 50 0.25)) -(set 'green - (material - (color 0 1 0) - (color 0 1 0) - (color 0 0.6 0) - 50 0.25)) -(set 'white - (material - (color 1 1 1) - (color 1 1 1) - (color 0.6 0.6 0.6) - 100 0.5)) -(set 'black - (material - (color 0 0 0) - (color 0 0 0) - (color 0.6 0.6 0.6) - 100 0.5)) - -(set 'dark-mirror - (material - (color 0 0 0) - (color 0 0 0) - (color 0.2 0.2 0.2) - 20 0.6)) +(include "./materials.lisp") (set 's1 (sphere diff --git a/src/bin/rt_interp.rs b/src/bin/rt_interp.rs index 6471bb1..afaba5c 100644 --- a/src/bin/rt_interp.rs +++ b/src/bin/rt_interp.rs @@ -17,20 +17,27 @@ fn main() { mk_prelude(&mut layer); mk_raytrace(&mut layer); - let environment = Environment::from_layer(layer); + let mut environment = Environment::from_layer(layer); - for (i, r) in - ExpressionStream::from_char_stream(programs.iter().map(|p| p.chars()).flatten()).enumerate() - { - match r { - Err(err) => { - println!("ParserError in Expression {}: {:?}", i + 1, err); - break; + for (program, path) in programs.iter().zip(program_paths) { + environment.set("FILE".to_string(), path.clone().into()); + + for (i, r) in ExpressionStream::from_char_stream(program.chars()).enumerate() { + match r { + Err(err) => { + println!( + "ParserError in File {} Expression {}: {:?}", + path, + i + 1, + err + ); + break; + } + Ok(expr) => match eval(&environment, expr) { + Ok(_) => {} + Err(e) => println!("Error evaluating Expression {}: {}", i + 1, e), + }, } - Ok(expr) => match eval(&environment, expr) { - Ok(_) => {} - Err(e) => println!("Error evaluating Expression {}: {}", i + 1, e), - }, } }