parent
							
								
									cdb3f26532
								
							
						
					
					
						commit
						7dc727104e
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -11,3 +11,6 @@ target_wasm | |||||||
| 
 | 
 | ||||||
| # https://github.com/lycheeverse/lychee | # https://github.com/lycheeverse/lychee | ||||||
| .lycheecache | .lycheecache | ||||||
|  | 
 | ||||||
|  | # IDE | ||||||
|  | .vscode | ||||||
|  | |||||||
							
								
								
									
										39
									
								
								src/app.rs
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								src/app.rs
									
									
									
									
									
								
							| @ -1,3 +1,5 @@ | |||||||
|  | use std::cmp::min; | ||||||
|  | 
 | ||||||
| use egui::{Color32, Stroke, Vec2}; | use egui::{Color32, Stroke, Vec2}; | ||||||
| use rand::Rng; | use rand::Rng; | ||||||
| 
 | 
 | ||||||
| @ -110,22 +112,6 @@ impl eframe::App for Simulation { | |||||||
| 
 | 
 | ||||||
|             ui.add(egui::Slider::new(&mut self.circles_count, 0..=25).text("circles count")); |             ui.add(egui::Slider::new(&mut self.circles_count, 0..=25).text("circles count")); | ||||||
| 
 | 
 | ||||||
|             let diff = (self.circles.len() as i32) - (self.circles_count as i32); |  | ||||||
|             if diff > 0 { |  | ||||||
|                 self.circles.truncate(self.circles_count); |  | ||||||
|             } else { |  | ||||||
|                 for _ in diff..0 { |  | ||||||
|                     self.circles.push(Circle::default()); |  | ||||||
|                     self.colors.push( |  | ||||||
|                         egui::Color32::from_rgba_premultiplied( |  | ||||||
|                             rand::thread_rng().gen_range(64..255), |  | ||||||
|                             rand::thread_rng().gen_range(64..255), |  | ||||||
|                             rand::thread_rng().gen_range(64..255), |  | ||||||
|                             128) |  | ||||||
|                         ); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             let painter = ui.painter(); |             let painter = ui.painter(); | ||||||
| 
 | 
 | ||||||
|             let (hover_pos, any_down, any_released) = ctx.input(|input| ( |             let (hover_pos, any_down, any_released) = ctx.input(|input| ( | ||||||
| @ -142,7 +128,7 @@ impl eframe::App for Simulation { | |||||||
|                         if any_down { |                         if any_down { | ||||||
|                             painter.line_segment( |                             painter.line_segment( | ||||||
|                             [circle.c, circle.c +d], 
 |                             [circle.c, circle.c +d], 
 | ||||||
|                                 Stroke{width: 1.0, color: Color32::from_rgb(128, 255, 255)}); |                                 Stroke{width: 3.0, color: Color32::from_rgb(255, 0, 0)}); | ||||||
|                         } |                         } | ||||||
| 
 | 
 | ||||||
|                         if any_released { |                         if any_released { | ||||||
| @ -152,7 +138,7 @@ impl eframe::App for Simulation { | |||||||
|                 }); |                 }); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             for i in 0..self.circles_count { |             for i in 0..min(self.circles.len(), self.colors.len())  { | ||||||
|                 painter.circle( |                 painter.circle( | ||||||
|                     self.circles[i].c, 
 |                     self.circles[i].c, 
 | ||||||
|                     self.circles[i].r, 
 |                     self.circles[i].r, 
 | ||||||
| @ -172,6 +158,23 @@ impl eframe::App for Simulation { | |||||||
|             }); |             }); | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  |         let diff = (self.circles.len() as i32) - (self.circles_count as i32); | ||||||
|  |         if diff > 0 { | ||||||
|  |             self.circles.truncate(self.circles_count); | ||||||
|  |         } else { | ||||||
|  |             for _ in diff..0 { | ||||||
|  |                 self.circles.push(Circle::new(&ctx.used_rect())); | ||||||
|  |                 self.colors.push( | ||||||
|  |                     egui::Color32::from_rgba_premultiplied( | ||||||
|  |                         rand::thread_rng().gen_range(64..255), | ||||||
|  |                         rand::thread_rng().gen_range(64..255), | ||||||
|  |                         rand::thread_rng().gen_range(64..255), | ||||||
|  |                         128) | ||||||
|  |                     ); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         for circle in &mut self.circles { |         for circle in &mut self.circles { | ||||||
|             circle.apply_force(&ctx.used_rect()); |             circle.apply_force(&ctx.used_rect()); | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| use egui::{Pos2, Rect, Vec2}; | use egui::{Pos2, Rect, Vec2}; | ||||||
|  | use log::debug; | ||||||
| use rand::Rng; | use rand::Rng; | ||||||
| 
 | 
 | ||||||
| pub static FRICTION: f32 = 0.995; | pub static FRICTION: f32 = 0.995; | ||||||
| @ -13,7 +14,7 @@ impl Default for Circle { | |||||||
|     fn default() -> Self { |     fn default() -> Self { | ||||||
|         let r = rand::thread_rng().gen_range(20.0..50.0); |         let r = rand::thread_rng().gen_range(20.0..50.0); | ||||||
|         Self { |         Self { | ||||||
|             r: r, |             r, | ||||||
|             c: Pos2 { |             c: Pos2 { | ||||||
|                 x: rand::thread_rng().gen_range(r..400.0-r), |                 x: rand::thread_rng().gen_range(r..400.0-r), | ||||||
|                 y: rand::thread_rng().gen_range(r..400.0-r)}, |                 y: rand::thread_rng().gen_range(r..400.0-r)}, | ||||||
| @ -50,4 +51,19 @@ impl Circle { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub fn new(bb: &Rect) -> Self { | ||||||
|  | 
 | ||||||
|  |         debug!("bb: {}..{} {}..{}",bb.left(), bb.right(), bb.top(), bb.bottom() ); | ||||||
|  |         
 | ||||||
|  |         Self { | ||||||
|  |             r: rand::thread_rng().gen_range(20.0..50.0), | ||||||
|  |             c: Pos2 { | ||||||
|  |                 x: rand::thread_rng().gen_range(bb.left()..bb.right()), | ||||||
|  |                 y: rand::thread_rng().gen_range(bb.top()..bb.bottom())}, | ||||||
|  |             v: Vec2 { | ||||||
|  |                 x: rand::thread_rng().gen_range(-2.0..2.0), | ||||||
|  |                 y: rand::thread_rng().gen_range(-2.0..2.0)}, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user