diff options
feat: greetings
Diffstat (limited to 'src')
| -rw-r--r-- | src/render.rs | 145 | 
1 files changed, 116 insertions, 29 deletions
| diff --git a/src/render.rs b/src/render.rs index bd17e2b..9f86681 100644 --- a/src/render.rs +++ b/src/render.rs @@ -26,23 +26,28 @@ fn dvd_logo_offset(t: f64, screen_size_x: f64, screen_size_y: f64) -> (f64, f64)    (offset_x, offset_y)  } -const START_UWUSPACE: f64 = 0.0; -const START_BOUNCE: f64 = 0.5; -const START_SIN: f64 = 1.5; -const START_COMETOCOSIN: f64 = 2.5; -const SCENE_GREETINGS: f64 = 20.0; -const JUST_DVD: f64 = 70.0; +pub const START_UWUSPACE: f64 = 0.0; +pub const START_BOUNCE: f64 = 0.5; +pub const START_SIN: f64 = 1.5; +pub const START_COMETOCOSIN: f64 = 2.5; +pub const SCENE_GREETINGS: f64 = 32.0; +pub const JUST_DVD: f64 = SCENE_GREETINGS + 28.0; + +pub const PRINT_TIME: bool = true;  pub fn render(    canvas: &mut Canvas<Window>,    texture_creator: &TextureCreator<WindowContext>,    time_seconds: f64,  ) { -  let i = ((time_seconds * 60.0) % 510.0).round(); -  let i = if i > 255.0 { -    (255.0 - (i - 255.0)) as u8 +  if PRINT_TIME { +    println!("Time: {time_seconds}\x1b[F"); +  } +  let colourthing = ((time_seconds * 60.0) % 510.0).round(); +  let colourthing = if colourthing > 255.0 { +    (255.0 - (colourthing - 255.0)) as u8    } else { -    i as u8 +    colourthing as u8    };    let win_size = canvas.window().drawable_size(); @@ -92,7 +97,10 @@ pub fn render(          canvas            .copy(              &char -              .to_texture(texture_creator, Color::RGB(i, 64, 255 - i)) +              .to_texture( +                texture_creator, +                Color::RGB(colourthing, 64, 255 - colourthing), +              )                .unwrap(),              None,              char.to_rect(offset as i32 + offset_x, offset_y), @@ -106,24 +114,100 @@ pub fn render(    if time_seconds >= JUST_DVD {      //    } else if time_seconds >= SCENE_GREETINGS { -    let mut offset = 0.0; -    let mut rng = rand::thread_rng(); +    let time_seconds = time_seconds - SCENE_GREETINGS; +    // Greetings +    let greeting_header_duration = 4.0; +    { +      let mut rng = rand::thread_rng(); -    for c in "sorry for shit invite we have adhd".chars() { -      let char = FONT_GALMURI.get_char(c); -      canvas -        .copy( -          &char -            .to_texture(texture_creator, Color::RGB(i, 64, 255 - i)) -            .unwrap(), -          None, -          char.to_rect( -            offset as i32 + 18 + rng.gen_range(-2..2), -            win_size.1 as i32 - 24 + rng.gen_range(-2..2), -          ), -        ) -        .unwrap(); -      offset += char.advance_width; +      let mut i = 0.0; +      let strlen = 26; +      let mut uwuoffset_x = 0.0; +      for c in "Greetings by UwU-Space to:".chars() { +        let is_not_uwu = i <= 12.0 || i >= 22.0; +        let char = if is_not_uwu { +          FONT_GALMURI.get_char(c) +        } else { +          FONT_CHERRY_BOMB_ONE.get_char(c) +        }; +        canvas +          .copy( +            &char +              .to_texture( +                texture_creator, +                Color::RGB(colourthing, 64, 255 - colourthing), +              ) +              .unwrap(), +            None, +            char.to_rect( +              uwuoffset_x as i32 + 18 + rng.gen_range(-2..2), +              (if is_not_uwu { 24 } else { 16 }) + rng.gen_range(-3..3), +            ), +          ) +          .unwrap(); +        uwuoffset_x += char.advance_width; +        i += 1.0; +        if i > (time_seconds * (f64::from(strlen) / greeting_header_duration)).floor() { +          break; +        } +      } +      let mut offset_y = 36; +      let mut line_index = 0; +      for line in [ +        vec!["Venty", "Erdit", "Kaede", "dui"], +        vec!["Deja", "vimja", "cy", "alu"], +        vec!["sashu", "expired bread", "gaben"], +      ] { +        offset_y += 24; +        let mut offset_x = (f64::from(line_index) * 90.0) + f64::from(win_size.0) +          - ((time_seconds - greeting_header_duration) * (f64::from(win_size.0) * 0.078125)); +        line_index += 1; + +        for c in line.join("   ").chars() { +          let char = FONT_GALMURI.get_char(c); +          canvas +            .copy( +              &char +                .to_texture( +                  texture_creator, +                  Color::RGB(colourthing, 64, 255 - colourthing), +                ) +                .unwrap(), +              None, +              char.to_rect( +                offset_x as i32 + 18 + rng.gen_range(-2..2), +                offset_y + rng.gen_range(-2..2), +              ), +            ) +            .unwrap(); +          offset_x += char.advance_width; +        } +      } +    } +    // Sorry for shit invite +    { +      let mut offset = 0.0; +      let mut rng = rand::thread_rng(); + +      for c in "sorry for shit invite we have adhd".chars() { +        let char = FONT_GALMURI.get_char(c); +        canvas +          .copy( +            &char +              .to_texture( +                texture_creator, +                Color::RGB(colourthing, 64, 255 - colourthing), +              ) +              .unwrap(), +            None, +            char.to_rect( +              offset as i32 + 18 + rng.gen_range(-2..2), +              win_size.1 as i32 - 24 + rng.gen_range(-2..2), +            ), +          ) +          .unwrap(); +        offset += char.advance_width; +      }      }    } else {      if time_seconds >= START_SIN { @@ -196,7 +280,10 @@ pub fn render(          canvas            .copy(              &char -              .to_texture(texture_creator, Color::RGB(i, 64, 255 - i)) +              .to_texture( +                texture_creator, +                Color::RGB(colourthing, 64, 255 - colourthing), +              )                .unwrap(),              None,              char.to_rect(offset as i32, win_size.1 as i32 - 32), |