1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
use crate::data_dir; use anyhow::anyhow; use sdl2::{ pixels::Color, rect::Rect, render::{Canvas, RenderTarget, TextureCreator, TextureQuery}, ttf::Font, }; use std::path::PathBuf; pub fn required_file_names() -> Vec<&'static str> { vec![ "anim0", "anim1", "anim2", "anim3", "anim4", "anim5", "back0", "back1", "back2", "back3", "badguy", "border", "credits", "dn", "drop0", "duke", "duke1-b", "duke1", "end", "font1", "font2", "man0", "man1", "man2", "man3", "man4", "numbers", "object0", "object1", "object2", "solid0", "solid1", "solid2", "solid3", "worldal1", "worldal2", "worldal3", "worldal4", "worldal5", "worldal6", "worldal7", "worldal8", "worldal9", "worldala", "worldalb", "worldalc", ] } pub fn original_data_dir() -> PathBuf { data_dir().join("data").join("original") } pub fn display_text<RT: RenderTarget, T>( canvas: &mut Canvas<RT>, x: i32, y: i32, font: &Font, message: &str, texture_creator: &TextureCreator<T>, ) -> crate::Result<()> { let mut destrect = Rect::new(x, y, 0, 0); let color = Color::RGB(255, 255, 255); canvas.set_draw_color(color); for line in message.lines() { let text = font.render(line).blended(color)?; let text = texture_creator.create_texture_from_surface(&text)?; let TextureQuery { width, height, .. } = text.query(); destrect.set_y(destrect.y() + height as i32); destrect.set_width(width); destrect.set_height(height); canvas.copy(&text, None, destrect).map_err(|s| anyhow!(s))?; } canvas.present(); Ok(()) }