diff options
| -rw-r--r-- | src/render.rs | 85 | 
1 files changed, 67 insertions, 18 deletions
| diff --git a/src/render.rs b/src/render.rs index 938d1ec..dbd3761 100644 --- a/src/render.rs +++ b/src/render.rs @@ -1,6 +1,5 @@  use crate::font::BakedFont;  use crate::generated::fonts::{FONT_CHERRY_BOMB_ONE, FONT_GALMURI}; -use crate::interpolation::KeyFrame;  use rand::Rng;  use sdl2::pixels::{Color, PixelFormatEnum};  use sdl2::rect::Rect; @@ -14,31 +13,81 @@ pub fn render(    texture_creator: &TextureCreator<WindowContext>,    time_seconds: f64,  ) { -  let i = ((time_seconds * 60.0) % 255.0).round() as u8; +  let i = ((time_seconds * 60.0) % 510.0).round(); +  let i = if i > 255.0 { +    (255.0 - (i - 255.0)) as u8 +  } else { +    i as u8 +  };    let sin_offset = time_seconds * 0.1; +  let win_size = canvas.window().drawable_size(); +    canvas.set_draw_color(Color::RGB(12, 12, 12));    canvas.clear();    let mut offset: f32 = 0.0; -  for c in "UwU-Space".chars() { -    let char = FONT_CHERRY_BOMB_ONE.get_char(c); -    canvas -      .copy( -        &char -          .to_texture(&texture_creator, Color::RGB(i, 64, 255 - i)) -          .unwrap(), -        None, -        char.to_rect(offset as i32 + 16, 16), + +  { +    let bounce_time_offset = 1.5; +    let bounce_speed = 90.0; +    let padding_x = 16.0; +    let padding_y = 16.0; +    let (offset_x, offset_y) = if time_seconds > bounce_time_offset { +      let mut uwu_width = padding_x; +      let mut uwu_height: f32 = padding_y * 2.0; +      for c in "UwU-Space".chars() { +        let char = FONT_CHERRY_BOMB_ONE.get_char(c); +        uwu_width += char.advance_width; +        if f32::from(char.height) > uwu_height { +          uwu_height = char.height.into(); +        } +      } +      let virtual_screen_size = ( +        f64::from(win_size.0) - f64::from(uwu_width + padding_x), +        f64::from(win_size.1) - f64::from(uwu_height + padding_y), +      ); +      let t = (time_seconds - bounce_time_offset) * bounce_speed; +      let offset_x = t % (virtual_screen_size.0 * 2.0); +      let offset_x = if offset_x > virtual_screen_size.0 { +        virtual_screen_size.0 * 2.0 - offset_x +      } else { +        offset_x +      }; + +      let offset_y = t % (virtual_screen_size.1 * 2.0); +      let offset_y = if offset_y > virtual_screen_size.1 { +        virtual_screen_size.1 * 2.0 - offset_y +      } else { +        offset_y +      }; + +      ( +        (f64::from(padding_x) + offset_x).round() as i32, +        (f64::from(padding_y) + offset_y).round() as i32,        ) -      .unwrap(); -    offset += char.advance_width; +    } else { +      (padding_x.round() as i32, padding_y.round() as i32) +    }; +    for c in "UwU-Space".chars() { +      let char = FONT_CHERRY_BOMB_ONE.get_char(c); +      canvas +        .copy( +          &char +            .to_texture(&texture_creator, Color::RGB(i, 64, 255 - i)) +            .unwrap(), +          None, +          char.to_rect(offset as i32 + offset_x, offset_y), +        ) +        .unwrap(); +      offset += char.advance_width; +    }    }    offset = 0.0;    let mut rng = rand::thread_rng(); -  for c in "sorry for shit demo we have adhd".chars() { +  for c in "sorry for shit invite we have adhd".chars() {      let char = FONT_GALMURI.get_char(c);      canvas        .copy( @@ -48,7 +97,7 @@ pub fn render(          None,          char.to_rect(            offset as i32 + 18 + rng.gen_range(-2..2), -          16 + 36 * 2 + rng.gen_range(-2..2), +          16 + 36 + rng.gen_range(-2..2),          ),        )        .unwrap(); @@ -96,7 +145,7 @@ pub fn render(      let sin_texture = Texture::from_surface(&sin_surface, &texture_creator).unwrap();      canvas -      .copy(&sin_texture, None, Rect::new(0, 0, 512, 256)) +      .copy(&sin_texture, None, Rect::new(0, 0, win_size.0, win_size.1))        .unwrap();    }    offset = 0.0; @@ -108,9 +157,9 @@ pub fn render(            .to_texture(&texture_creator, Color::RGB(i, 64, 255 - i))            .unwrap(),          None, -        char.to_rect(offset as i32 + 18, 16 + 36), +        char.to_rect(offset as i32 + 18, win_size.1 as i32 - 32),        )        .unwrap(); -    offset += char.advance_width; +    offset += char.advance_width / 1.1;    }  } |