aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarLarge Libravatar memdmp <memdmpestrogenzone>2025-02-14 21:04:55 +0100
committerLibravatarLarge Libravatar memdmp <memdmpestrogenzone>2025-02-14 21:04:55 +0100
commita903bb7268fb95ea525a24bc8dd251e00312e149 (patch)
treee9496ea0232948b444da8563b7d67890e602dca7
parentbdc418531c91efe14a4e5f0f112ed8dbd8fb9a9a (diff)
downloadcosin25-invite-mountainbytes-a903bb7268fb95ea525a24bc8dd251e00312e149.tar.gz
cosin25-invite-mountainbytes-a903bb7268fb95ea525a24bc8dd251e00312e149.tar.bz2
cosin25-invite-mountainbytes-a903bb7268fb95ea525a24bc8dd251e00312e149.tar.lz
cosin25-invite-mountainbytes-a903bb7268fb95ea525a24bc8dd251e00312e149.zip

feat: bouncy

-rw-r--r--src/render.rs85
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;
}
}