diff options
feat: it worky
Diffstat (limited to 'src')
| -rw-r--r-- | src/font.rs | 41 | ||||
| -rw-r--r-- | src/main.rs | 56 | 
2 files changed, 63 insertions, 34 deletions
diff --git a/src/font.rs b/src/font.rs index d82d5a9..056c691 100644 --- a/src/font.rs +++ b/src/font.rs @@ -41,6 +41,42 @@ pub trait BakedFont {      }    }  } +impl RenderableCharacter { +  /** Alpha value of colour is currently ignored! */ +  pub fn to_surface(&self, colour: Color) -> Surface<'static> { +    let mut surface = Surface::new( +      self.width.into(), +      self.height.into(), +      PixelFormatEnum::RGBA32, +    ) +    .unwrap(); +    surface.with_lock_mut(|buffer: &mut [u8]| { +      let mut idx: usize = 0; +      print!("{} ({}x{})", self.data.len() * 4, self.width, self.height); +      for pixel in self.data { +        let index = idx * 4; +        buffer[index] = colour.r; // Red +        buffer[index + 1] = colour.g; // Green +        buffer[index + 2] = colour.b; // Blue +        buffer[index + 3] = *pixel; // Alpha +        idx += 1; +      } +    }); +    surface +  } +  /** Colour Alpha Channel is ignored */ +  pub fn to_texture<'a>( +    &self, +    texture_creator: &'a TextureCreator<WindowContext>, +    colour: Color, +  ) -> Result<Texture<'a>, TextureValueError> { +    let surface = self.to_surface(colour); +    surface.as_texture(texture_creator) +  } +  pub fn to_rect(&self, x: i32, y: i32) -> Rect { +    Rect::new(x, y, self.width.into(), self.height.into()) +  } +}  pub struct Font<'a> {    pub texture: &'a [u8],    pub glyphs: Vec<*const Glyph>, @@ -151,4 +187,9 @@ mod sprite_sheets {  use std::str::Bytes; +use sdl2::pixels::{Color, PixelFormatEnum}; +use sdl2::rect::Rect; +use sdl2::render::{Canvas, Texture, TextureCreator, TextureValueError}; +use sdl2::surface::Surface; +use sdl2::video::WindowContext;  pub use sprite_sheets::UwUFont; diff --git a/src/main.rs b/src/main.rs index 39f39d2..287847d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,12 +3,12 @@ extern crate sdl2;  mod font;  pub mod generated; -use font::{UwUFont, UWU_WIDTH}; +use font::BakedFont; +use generated::fonts::FONT_CHERRY_BOMB_ONE;  use sdl2::event::Event;  use sdl2::keyboard::Keycode;  use sdl2::pixels::Color;  use sdl2::rect::Rect; -use sdl2::render::TextureCreator;  use std::time::Duration;  pub fn main() { @@ -24,42 +24,30 @@ pub fn main() {    let mut canvas = window.into_canvas().build().unwrap();    let texture_creator = canvas.texture_creator(); -  let uwu_font = font::UwUFont::new(&texture_creator); -  let u_char = uwu_font.u_surface().as_texture(&texture_creator).unwrap(); -  let w_char = uwu_font.w_surface().as_texture(&texture_creator).unwrap(); -  let p_char = uwu_font.p_surface().as_texture(&texture_creator).unwrap(); - -  canvas -    .copy(&u_char, None, UwUFont::pos_to_rect(0, 0)) -    .unwrap(); -  canvas -    .copy(&w_char, None, UwUFont::pos_to_rect(UWU_WIDTH as i32, 0)) -    .unwrap(); -  canvas -    .copy(&u_char, None, UwUFont::pos_to_rect(UWU_WIDTH as i32 * 2, 0)) -    .unwrap(); -  canvas -    .copy(&p_char, None, UwUFont::pos_to_rect(UWU_WIDTH as i32 * 2, 0)) -    .unwrap(); - -  //canvas.clear(); -  let tc = canvas.texture_creator(); -  // let sheet = tc.load_texture_bytes(font::MEOW_FONT.texture).unwrap(); -  /* -  canvas.copy( -    &sheet, -    Rect::new(0, 0, font::UWU_WIDTH, font::UWU_HEIGHT), -    font::UwUFont::pos_to_rect(0, 0), -  ); -  */ -  canvas.draw_rect(Rect::new(100, 100, 200, 200)); +  // let uwu_font = font::UwUFont::new(&texture_creator); +  canvas.clear(); +  let mut offset: u16 = 0; +  for c in "UwUSpace".chars() { +    let char = FONT_CHERRY_BOMB_ONE.get_char(c); +    canvas +      .copy( +        &char +          .to_texture(&texture_creator, Color::RGB(255, 10, 100)) +          .unwrap(), +        None, +        char.to_rect(offset as i32, 0), +      ) +      .unwrap(); +    offset += char.width; +  } +  canvas.draw_rect(Rect::new(100, 100, 200, 200)).unwrap();    canvas.present();    let mut event_pump = sdl_context.event_pump().unwrap();    let mut i = 0;    'running: loop {      i = (i + 1) % 255; -    //canvas.set_draw_color(Color::RGB(i, 64, 255 - i)); -    //canvas.clear(); +    // canvas.set_draw_color(Color::RGB(i, 64, 255 - i)); +    // canvas.clear();      for event in event_pump.poll_iter() {        match event {          Event::Quit { .. } @@ -71,7 +59,7 @@ pub fn main() {        }      }      // The rest of the game loop goes here... -    //canvas.present(); +    // canvas.present();      ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60));    }  }  |