color
This commit is contained in:
		
							parent
							
								
									bccb1be2d4
								
							
						
					
					
						commit
						7316805ad7
					
				
					 1 changed files with 19 additions and 22 deletions
				
			
		
							
								
								
									
										41
									
								
								src/main.rs
									
										
									
									
									
								
							
							
						
						
									
										41
									
								
								src/main.rs
									
										
									
									
									
								
							| 
						 | 
					@ -54,7 +54,7 @@ struct BouncingImage {
 | 
				
			||||||
trait Drawable {
 | 
					trait Drawable {
 | 
				
			||||||
    // Associated function signature; `Self` refers to the implementor type.
 | 
					    // Associated function signature; `Self` refers to the implementor type.
 | 
				
			||||||
    fn rate(&self) -> u32;
 | 
					    fn rate(&self) -> u32;
 | 
				
			||||||
    fn draw_and_move(&mut self, display: &mut Display);
 | 
					    fn draw_and_move(&mut self, display: &mut Display,tick:u32);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
impl BouncingImage {
 | 
					impl BouncingImage {
 | 
				
			||||||
| 
						 | 
					@ -104,7 +104,7 @@ impl Drawable for BouncingImage {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Draws the image and updates its position.
 | 
					    /// Draws the image and updates its position.
 | 
				
			||||||
    fn draw_and_move(&mut self, display: &mut Display) {
 | 
					    fn draw_and_move(&mut self, display: &mut Display,_: u32) {
 | 
				
			||||||
        self.draw_png(display, self.x, self.y);
 | 
					        self.draw_png(display, self.x, self.y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.x += self.move_x;
 | 
					        self.x += self.move_x;
 | 
				
			||||||
| 
						 | 
					@ -122,15 +122,13 @@ impl Drawable for BouncingImage {
 | 
				
			||||||
struct Circle {
 | 
					struct Circle {
 | 
				
			||||||
   x: u32,
 | 
					   x: u32,
 | 
				
			||||||
   y: u32,
 | 
					   y: u32,
 | 
				
			||||||
   radius: i32
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
impl Circle {
 | 
					impl Circle {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn new(x:u32, y: u32,radius:i32) -> Self {
 | 
					    fn new(x:u32, y: u32) -> Self {
 | 
				
			||||||
        Circle {
 | 
					        Circle {
 | 
				
			||||||
         x,
 | 
					         x,
 | 
				
			||||||
         y,
 | 
					         y
 | 
				
			||||||
         radius   
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }    
 | 
					    }    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -153,16 +151,16 @@ impl Circle {
 | 
				
			||||||
    /// * `center_y`: The y-coordinate of the circle's center.
 | 
					    /// * `center_y`: The y-coordinate of the circle's center.
 | 
				
			||||||
    /// * `radius`: The radius of the circle. Must be non-negative.
 | 
					    /// * `radius`: The radius of the circle. Must be non-negative.
 | 
				
			||||||
    /// * `r`, `g`, `b`: The RGB color components for the circle.
 | 
					    /// * `r`, `g`, `b`: The RGB color components for the circle.
 | 
				
			||||||
    pub fn draw_circle(&mut self, display: &mut Display, center_x: u32, center_y: u32, radius: i32, r: u8, g: u8, b: u8) {
 | 
					    pub fn draw_circle(&mut self, display: &mut Display, center_x: u32, center_y: u32, radius: u32, r: u8, g: u8, b: u8) {
 | 
				
			||||||
        if radius < 0 {
 | 
					        if radius < 0 {
 | 
				
			||||||
            // Or return an error: Err("Radius cannot be negative".into())
 | 
					            // Or return an error: Err("Radius cannot be negative".into())
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        let radius_i32:i32 = radius.try_into().unwrap();
 | 
				
			||||||
        let mut x = 0;
 | 
					        let mut x:i32 = 0;
 | 
				
			||||||
        let mut y = radius;
 | 
					        let mut y:i32 = radius_i32;
 | 
				
			||||||
        // Initial decision parameter
 | 
					        // Initial decision parameter
 | 
				
			||||||
        let mut d = 3 - 2 * radius;
 | 
					        let mut d:i32 = 3 - 2 * radius_i32;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Iterate through the first octant and draw points in all 8 octants
 | 
					        // Iterate through the first octant and draw points in all 8 octants
 | 
				
			||||||
        while y >= x {
 | 
					        while y >= x {
 | 
				
			||||||
| 
						 | 
					@ -188,18 +186,16 @@ impl Drawable for Circle {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
       /// Helper method to draw the 8 symmetric points for a given (x, y) offset.
 | 
					       /// Helper method to draw the 8 symmetric points for a given (x, y) offset.
 | 
				
			||||||
    fn draw_and_move(&mut self, display: &mut Display) {
 | 
					    fn draw_and_move(&mut self, display: &mut Display,tick:u32) {
 | 
				
			||||||
    let hsv_color = color::Hsv {
 | 
					    let hsv_color = color::Hsv {
 | 
				
			||||||
            h: (self.radius%360).try_into().unwrap(),
 | 
					            h: (tick%360).try_into().unwrap(),
 | 
				
			||||||
            s: 1.0,
 | 
					            s: 1.0,
 | 
				
			||||||
            v: 1.0,
 | 
					            v: 1.0,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    let rgb: color::Rgb = hsv_color.into();
 | 
					    let rgb: color::Rgb = hsv_color.into();
 | 
				
			||||||
     self.draw_circle(display,self.x,self.y,self.radius,rgb.r,rgb.g,rgb.b);
 | 
					
 | 
				
			||||||
     self.radius = self.radius + 1;
 | 
					     let radius = tick % 128;
 | 
				
			||||||
     if self.radius > 1080/2 {
 | 
					     self.draw_circle(display,self.x,self.y,radius.try_into().unwrap(),rgb.r,rgb.g,rgb.b);
 | 
				
			||||||
         self.radius = 1;
 | 
					 | 
				
			||||||
     } 
 | 
					 | 
				
			||||||
    }   
 | 
					    }   
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -286,22 +282,23 @@ fn main() {
 | 
				
			||||||
//        Box::new(BouncingImage::new("images/spade.png", 32, -12, 1, 0, 0)),
 | 
					//        Box::new(BouncingImage::new("images/spade.png", 32, -12, 1, 0, 0)),
 | 
				
			||||||
//        Box::new(BouncingImage::new("images/dvdvideo.png", 20, 6, 5, 1000, 800)),
 | 
					//        Box::new(BouncingImage::new("images/dvdvideo.png", 20, 6, 5, 1000, 800)),
 | 
				
			||||||
//        Box::new(BouncingImage::new("images/hackaday.png", 40, 18, 3, 500, 800)),
 | 
					//        Box::new(BouncingImage::new("images/hackaday.png", 40, 18, 3, 500, 800)),
 | 
				
			||||||
        Box::new(Circle::new(1920/2,1080/2,128))
 | 
					        Box::new(Circle::new(1920/2,1080/2))
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let mut display = Display::new(DISPLAY_HOST, DISPLAY_PORT);
 | 
					    let mut display = Display::new(DISPLAY_HOST, DISPLAY_PORT);
 | 
				
			||||||
    let mut frame_counter: u32 = 0;
 | 
					    let mut frame_counter: u32 = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // display.blank_screen();
 | 
					    // display.blank_screen();
 | 
				
			||||||
 | 
					    let mut tick:u32 = 0;
 | 
				
			||||||
    loop {
 | 
					    loop {
 | 
				
			||||||
        for (i, bb) in images.iter_mut().enumerate() {
 | 
					        for (i, bb) in images.iter_mut().enumerate() {
 | 
				
			||||||
            if bb.rate() > 0 && frame_counter % bb.rate() != 0 {
 | 
					            if bb.rate() > 0 && frame_counter % bb.rate() != 0 {
 | 
				
			||||||
                continue;
 | 
					                continue;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            bb.draw_and_move(&mut display);
 | 
					            bb.draw_and_move(&mut display,tick);
 | 
				
			||||||
        }
 | 
					                    }
 | 
				
			||||||
        display.flush_frame();
 | 
					        display.flush_frame();
 | 
				
			||||||
 | 
					        tick+=1;
 | 
				
			||||||
        frame_counter += 1;
 | 
					        frame_counter += 1;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        // A small delay to control the frame rate
 | 
					        // A small delay to control the frame rate
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue