diff --git a/src/main.rs b/src/main.rs index 5f22250..51ef552 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,62 +7,61 @@ fn main() { App::build() .add_plugins(DefaultPlugins) .add_startup_system(startup.system()) - .add_resource(SpriteScale::default()) + .add_resource(TextureOptions::default()) .add_system(mandelbrot_render_system.system()) .add_system(transform_mandelbrot_system.system()) .run(); } -struct SpriteScale { +struct TextureOptions { zoom: f64, horizontal: f64, vertical: f64, step: f64, - iterations: u32, + iteration_limit: u32, } -impl Default for SpriteScale { +impl Default for TextureOptions { fn default() -> Self { Self { zoom: 1.0, horizontal: 0.0, vertical: 0.0, step: 0.01, - iterations: 64, + iteration_limit: 64, } } } -fn transform_mandelbrot_system( - input: Res>, - mut scale: ResMut, - // camera: Res, -) { +fn transform_mandelbrot_system(input: Res>, mut scale: ResMut) { + // Zoom: E to Zoom In, Q to Zoom Out + // Horizontal Movement: D to move right, A to move left + // Vertical Movement: W to move up, S to move Down + // R to increase the steps taken by zoom, horizontal movement, and vertical movement + // T to increase the Iteration Limit, G to decrease the iteration limit + let zoom = input.pressed(KeyCode::Q) as i8 - input.pressed(KeyCode::E) as i8; let horizontal = input.pressed(KeyCode::D) as i8 - input.pressed(KeyCode::A) as i8; let vertical = input.pressed(KeyCode::W) as i8 - input.pressed(KeyCode::S) as i8; - let step_mod = input.pressed(KeyCode::R) as i8 - input.pressed(KeyCode::F) as i8; - let iter_mod = input.pressed(KeyCode::T) as i8 - input.pressed(KeyCode::G) as i8; + let step_change = input.pressed(KeyCode::R) as i8 - input.pressed(KeyCode::F) as i8; + let limit_change = input.just_pressed(KeyCode::T) as i8 - input.just_pressed(KeyCode::G) as i8; - scale.step += (scale.step / 10.0) * step_mod as f64; + scale.step += (scale.step / 10.0) * step_change as f64; scale.vertical += scale.step * vertical as f64; scale.horizontal += scale.step * horizontal as f64; scale.zoom += scale.step * zoom as f64; - if iter_mod == 1 { - scale.iterations += (scale.step * 100.0) as u32; + if limit_change == 1 { + scale.iteration_limit *= 2; - if scale.iterations > 512 { - scale.iterations = 512; + if scale.iteration_limit > 512 { + scale.iteration_limit = 512; } - } else if iter_mod == -1 { - let step = (scale.step * 100.0) as u32; - let diff = scale.iterations as i64 - step as i64; + } else if limit_change == -1 { + scale.iteration_limit /= 2; - if diff < 32 { - scale.iterations = 32; - } else { - scale.iterations -= step; + if scale.iteration_limit < 32 { + scale.iteration_limit = 32; } } @@ -78,7 +77,7 @@ fn transform_mandelbrot_system( fn mandelbrot_render_system( materials: Res>, mut textures: ResMut>, - scale: Res, + scale: Res, mut query: Query<(&mut Mandelbrot, &Handle)>, ) { for (mut fractal, handle) in query.iter_mut() { @@ -88,7 +87,7 @@ fn mandelbrot_render_system( let z = scale.zoom; let h = scale.horizontal; let v = scale.vertical; - let limit = scale.iterations; + let limit = scale.iteration_limit; let x = ((-2.5 * z) + h, (1.0 * z) + h); let y = ((-1.0 * z) - v, (1.0 * z) - v);