Rendering UI

This commit is contained in:
Coeuvre 2014-05-27 13:26:12 +08:00
parent 5bf12185a8
commit 8b2a972202
6 changed files with 59 additions and 10 deletions

BIN
bin/assets/comment1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
bin/assets/comment2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
bin/assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -10,6 +10,10 @@ pub struct App<'a> {
board: Board<'a>, board: Board<'a>,
number_renderer: Option<NumberRenderer>, number_renderer: Option<NumberRenderer>,
settings: &'a Settings, settings: &'a Settings,
logo: Option<Image>,
comment1: Option<Image>,
comment2: Option<Image>,
} }
impl<'a> App<'a> { impl<'a> App<'a> {
@ -18,16 +22,62 @@ impl<'a> App<'a> {
board: Board::new(settings), board: Board::new(settings),
number_renderer: None, number_renderer: None,
settings: settings, 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> { impl<'a> Game for App<'a> {
fn load(&mut self, asset_store: &mut AssetStore) { fn load(&mut self, asset_store: &mut AssetStore) {
self.number_renderer = Some(NumberRenderer::new(asset_store)); 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) { 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); self.board.render(self.number_renderer.get_ref(), c, gl);
} }

View file

@ -92,16 +92,6 @@ impl<'a> Board<'a> {
} }
pub fn render(&self, number_renderer: &NumberRenderer, c: &Context, gl: &mut Gl) { 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( number_renderer.render(
self.score as u32, self.score as u32,
self.settings.best_rect[0] + self.settings.best_rect[2] / 2.0, self.settings.best_rect[0] + self.settings.best_rect[2] / 2.0,

View file

@ -14,6 +14,8 @@ pub struct Settings {
pub asset_folder: String, pub asset_folder: String,
pub window_size: [u32, ..2], pub window_size: [u32, ..2],
pub window_background_color: [f32, ..3], pub window_background_color: [f32, ..3],
pub comment1_offset_y: f64,
pub comment2_offset_y: f64,
pub board_padding: f64, pub board_padding: f64,
pub board_size: [f64, ..2], pub board_size: [f64, ..2],
pub board_offset_y: f64, pub board_offset_y: f64,
@ -57,6 +59,8 @@ impl Settings {
} }
Settings { Settings {
asset_folder: s.asset_folder.clone(), asset_folder: s.asset_folder.clone(),
comment1_offset_y: s.comment1_offset_y,
comment2_offset_y: s.comment2_offset_y,
window_size: [ window_size: [
(s.board_padding * 2.0 + board_size[0]) as u32, (s.board_padding * 2.0 + board_size[0]) as u32,
(s.board_padding * 2.0 + board_size[1] + s.board_offset_y) 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) // r g b (0 - 255)
window_background_color: Vec<f32>, window_background_color: Vec<f32>,
comment1_offset_y: f64,
comment2_offset_y: f64,
board_padding: f64, board_padding: f64,
board_offset_y: f64, board_offset_y: f64,
@ -180,6 +187,8 @@ impl SettingsInJson {
SettingsInJson { SettingsInJson {
asset_folder: "assets".to_strbuf(), asset_folder: "assets".to_strbuf(),
window_background_color: vec![255.0, 248.0, 239.0], 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_padding: 12.0,
board_offset_y: 128.0, board_offset_y: 128.0,
tile_width: 4, tile_width: 4,