diff --git a/bin/assets/comment1.png b/bin/assets/comment1.png new file mode 100644 index 0000000..57218c7 Binary files /dev/null and b/bin/assets/comment1.png differ diff --git a/bin/assets/comment2.png b/bin/assets/comment2.png new file mode 100644 index 0000000..fc56c4c Binary files /dev/null and b/bin/assets/comment2.png differ diff --git a/bin/assets/logo.png b/bin/assets/logo.png new file mode 100644 index 0000000..00bdbab Binary files /dev/null and b/bin/assets/logo.png differ diff --git a/src/app.rs b/src/app.rs index 4d04f92..7abad63 100644 --- a/src/app.rs +++ b/src/app.rs @@ -10,6 +10,10 @@ pub struct App<'a> { board: Board<'a>, number_renderer: Option, settings: &'a Settings, + + logo: Option, + comment1: Option, + comment2: Option, } impl<'a> App<'a> { @@ -18,16 +22,62 @@ impl<'a> App<'a> { board: Board::new(settings), number_renderer: None, settings: settings, + + logo: None, + comment1: None, + comment2: None, } } } +impl<'a> App<'a> { + fn render_ui(&self, c: &Context, gl: &mut Gl) { + // logo + c.trans(self.settings.board_padding, self.settings.board_padding) + .image(self.logo.unwrap()) + .rgb(self.settings.text_dark_color[0], + self.settings.text_dark_color[1], + self.settings.text_dark_color[2]) + .draw(gl); + + c.view() + .rect(self.settings.best_rect[0], + self.settings.best_rect[1], + self.settings.best_rect[2], + self.settings.best_rect[3]) + .rgba(self.settings.label_color[0], + self.settings.label_color[1], + self.settings.label_color[2], + 1.0) + .fill(gl); + + self.render_comment(self.comment1.get_ref(), self.settings.comment1_offset_y, c, gl); + self.render_comment(self.comment2.get_ref(), self.settings.comment2_offset_y, c, gl); + } + + fn render_comment(&self, comment: &Image, y: f64, c: &Context, gl: &mut Gl) { + let w = self.settings.window_size[0] as f64 - 2.0 * self.settings.board_padding; + let h = comment.texture_height as f64 * w / comment.texture_width as f64; + c.rect(self.settings.board_padding, y, w, h) + .image(*comment) + .rgb(self.settings.text_dark_color[0], + self.settings.text_dark_color[1], + self.settings.text_dark_color[2]) + .draw(gl); + } +} + impl<'a> Game for App<'a> { fn load(&mut self, asset_store: &mut AssetStore) { self.number_renderer = Some(NumberRenderer::new(asset_store)); + + self.logo = Some(asset_store.load_image("logo.png").unwrap()); + self.comment1 = Some(asset_store.load_image("comment1.png").unwrap()); + self.comment2 = Some(asset_store.load_image("comment2.png").unwrap()); } fn render(&self, _ext_dt: f64, c: &Context, gl: &mut Gl) { + self.render_ui(c, gl); self.board.render(self.number_renderer.get_ref(), c, gl); } diff --git a/src/board.rs b/src/board.rs index 9ec25b1..98cd604 100644 --- a/src/board.rs +++ b/src/board.rs @@ -92,16 +92,6 @@ impl<'a> Board<'a> { } pub fn render(&self, number_renderer: &NumberRenderer, c: &Context, gl: &mut Gl) { - c.view() - .rect(self.settings.best_rect[0], - self.settings.best_rect[1], - self.settings.best_rect[2], - self.settings.best_rect[3]) - .rgba(self.settings.label_color[0], - self.settings.label_color[1], - self.settings.label_color[2], - 1.0) - .fill(gl); number_renderer.render( self.score as u32, self.settings.best_rect[0] + self.settings.best_rect[2] / 2.0, diff --git a/src/settings.rs b/src/settings.rs index 1c970a2..363e3c6 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -14,6 +14,8 @@ pub struct Settings { pub asset_folder: String, pub window_size: [u32, ..2], pub window_background_color: [f32, ..3], + pub comment1_offset_y: f64, + pub comment2_offset_y: f64, pub board_padding: f64, pub board_size: [f64, ..2], pub board_offset_y: f64, @@ -57,6 +59,8 @@ impl Settings { } Settings { asset_folder: s.asset_folder.clone(), + comment1_offset_y: s.comment1_offset_y, + comment2_offset_y: s.comment2_offset_y, window_size: [ (s.board_padding * 2.0 + board_size[0]) as u32, (s.board_padding * 2.0 + board_size[1] + s.board_offset_y) as u32, @@ -130,6 +134,9 @@ struct SettingsInJson { // r g b (0 - 255) window_background_color: Vec, + comment1_offset_y: f64, + comment2_offset_y: f64, + board_padding: f64, board_offset_y: f64, @@ -180,6 +187,8 @@ impl SettingsInJson { SettingsInJson { asset_folder: "assets".to_strbuf(), window_background_color: vec![255.0, 248.0, 239.0], + comment1_offset_y: 72.0, + comment2_offset_y: 100.0, board_padding: 12.0, board_offset_y: 128.0, tile_width: 4,