update font
This commit is contained in:
Binary file not shown.
+30
-12
@@ -1,6 +1,6 @@
|
|||||||
use std::{
|
use std::{
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
fmt::{self, Display, Formatter},
|
fmt::{self, Display, Formatter}, sync::Arc,
|
||||||
};
|
};
|
||||||
|
|
||||||
use button::Button;
|
use button::Button;
|
||||||
@@ -38,6 +38,7 @@ pub struct Game {
|
|||||||
// Constants througout the game
|
// Constants througout the game
|
||||||
texture_res: Texture2D,
|
texture_res: Texture2D,
|
||||||
sounds: Sounds,
|
sounds: Sounds,
|
||||||
|
font: Arc<Font>,
|
||||||
num_squares: usize,
|
num_squares: usize,
|
||||||
heading_text: String,
|
heading_text: String,
|
||||||
|
|
||||||
@@ -92,7 +93,7 @@ enum GameState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Game {
|
impl Game {
|
||||||
pub fn new(texture_res: Texture2D, sounds: Sounds) -> Self {
|
pub fn new(texture_res: Texture2D, sounds: Sounds, font: Font) -> Self {
|
||||||
let num_squares: usize = 4;
|
let num_squares: usize = 4;
|
||||||
let game_mode = GameMode::Medium;
|
let game_mode = GameMode::Medium;
|
||||||
let board = Game::generate_puzzle(game_mode);
|
let board = Game::generate_puzzle(game_mode);
|
||||||
@@ -118,6 +119,7 @@ impl Game {
|
|||||||
window_height: 0.,
|
window_height: 0.,
|
||||||
window_width: 0.,
|
window_width: 0.,
|
||||||
square_width: 0.,
|
square_width: 0.,
|
||||||
|
font: Arc::new(font),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,13 +261,18 @@ impl Game {
|
|||||||
|
|
||||||
fn draw_heading(&self) {
|
fn draw_heading(&self) {
|
||||||
let f = self.heading_font_size.floor() as u16;
|
let f = self.heading_font_size.floor() as u16;
|
||||||
let dims = measure_text(self.heading_text.as_str(), None, f, 1.0);
|
let dims = measure_text(self.heading_text.as_str(), Some(&self.font), f, 1.0);
|
||||||
draw_text(
|
let draw_text_params = TextParams {
|
||||||
|
font_size: f,
|
||||||
|
font: Some(&self.font),
|
||||||
|
color: BLACK,
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
draw_text_ex(
|
||||||
self.heading_text.as_str(),
|
self.heading_text.as_str(),
|
||||||
self.heading_rect.x,
|
self.heading_rect.x,
|
||||||
self.heading_rect.y + dims.offset_y,
|
self.heading_rect.y + dims.offset_y,
|
||||||
self.heading_font_size,
|
draw_text_params,
|
||||||
BLACK,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,20 +289,25 @@ impl Game {
|
|||||||
UiColor::Brown.to_bg_color(),
|
UiColor::Brown.to_bg_color(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let font_size = self.heading_font_size * 0.8;
|
let font_size = self.heading_font_size * 0.6;
|
||||||
let rules = "\
|
let rules = "\
|
||||||
Every move should be a \n\
|
Every move should be a \n\
|
||||||
capture. Win when only \n\
|
capture. Win when only \n\
|
||||||
one piece is left.\n";
|
one piece is left.\n";
|
||||||
let measurement = measure_text(rules, None, font_size as u16, 1.0);
|
let measurement = measure_text(rules, Some(&self.font), font_size as u16, 1.0);
|
||||||
draw_multiline_text(
|
let draw_text_params = TextParams {
|
||||||
|
font_size: font_size as u16,
|
||||||
|
font: Some(&self.font),
|
||||||
|
color: UiColor::Brown.to_fg_color(),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
draw_multiline_text_ex(
|
||||||
rules,
|
rules,
|
||||||
self.board_rect.x + 0.05 * self.square_width,
|
self.board_rect.x + 0.05 * self.square_width,
|
||||||
self.board_rect.y + 0.5 * (self.board_rect.h - measurement.height)
|
self.board_rect.y + 0.5 * (self.board_rect.h - measurement.height)
|
||||||
- 2. * measurement.offset_y,
|
- 2. * measurement.offset_y,
|
||||||
font_size,
|
|
||||||
Some(2.),
|
Some(2.),
|
||||||
UiColor::Brown.to_fg_color(),
|
draw_text_params,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -400,7 +412,7 @@ impl Game {
|
|||||||
|
|
||||||
self.heading_font_size = 0.07 * min_dimension;
|
self.heading_font_size = 0.07 * min_dimension;
|
||||||
let f = self.heading_font_size.floor() as u16;
|
let f = self.heading_font_size.floor() as u16;
|
||||||
let dims = measure_text(self.heading_text.as_str(), None, f, 1.0);
|
let dims = measure_text(self.heading_text.as_str(), Some(&self.font), f, 1.0);
|
||||||
self.heading_rect = Rect::new(
|
self.heading_rect = Rect::new(
|
||||||
board_x + (board_width - dims.width) / 2.0,
|
board_x + (board_width - dims.width) / 2.0,
|
||||||
(board_y - dims.height) / 2.0,
|
(board_y - dims.height) / 2.0,
|
||||||
@@ -444,6 +456,7 @@ impl Game {
|
|||||||
Rect::new(board_x + btn_reset_x_offset, btn_y, btn_w, btn_h),
|
Rect::new(board_x + btn_reset_x_offset, btn_y, btn_w, btn_h),
|
||||||
UiColor::Yellow,
|
UiColor::Yellow,
|
||||||
self.sounds.button.clone(),
|
self.sounds.button.clone(),
|
||||||
|
self.font.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let btn_next_x_offset =
|
let btn_next_x_offset =
|
||||||
@@ -453,6 +466,7 @@ impl Game {
|
|||||||
Rect::new(board_x + btn_next_x_offset, btn_y, btn_w, btn_h),
|
Rect::new(board_x + btn_next_x_offset, btn_y, btn_w, btn_h),
|
||||||
UiColor::Green,
|
UiColor::Green,
|
||||||
self.sounds.button.clone(),
|
self.sounds.button.clone(),
|
||||||
|
self.font.clone(),
|
||||||
);
|
);
|
||||||
next_btn.is_active = false;
|
next_btn.is_active = false;
|
||||||
|
|
||||||
@@ -466,6 +480,7 @@ impl Game {
|
|||||||
),
|
),
|
||||||
UiColor::Brown,
|
UiColor::Brown,
|
||||||
self.sounds.button.clone(),
|
self.sounds.button.clone(),
|
||||||
|
self.font.clone(),
|
||||||
);
|
);
|
||||||
self.rules_btn = vec![rules_button];
|
self.rules_btn = vec![rules_button];
|
||||||
|
|
||||||
@@ -483,6 +498,7 @@ impl Game {
|
|||||||
),
|
),
|
||||||
UiColor::Yellow,
|
UiColor::Yellow,
|
||||||
self.sounds.mode.clone(),
|
self.sounds.mode.clone(),
|
||||||
|
self.font.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let medium_btn = Button::new(
|
let medium_btn = Button::new(
|
||||||
@@ -495,6 +511,7 @@ impl Game {
|
|||||||
),
|
),
|
||||||
UiColor::Yellow,
|
UiColor::Yellow,
|
||||||
self.sounds.mode.clone(),
|
self.sounds.mode.clone(),
|
||||||
|
self.font.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let hard_button = Button::new(
|
let hard_button = Button::new(
|
||||||
@@ -507,6 +524,7 @@ impl Game {
|
|||||||
),
|
),
|
||||||
UiColor::Yellow,
|
UiColor::Yellow,
|
||||||
self.sounds.mode.clone(),
|
self.sounds.mode.clone(),
|
||||||
|
self.font.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
self.mode_btns = HashMap::new();
|
self.mode_btns = HashMap::new();
|
||||||
|
|||||||
+15
-6
@@ -1,3 +1,5 @@
|
|||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use macroquad::{audio::Sound, prelude::*};
|
use macroquad::{audio::Sound, prelude::*};
|
||||||
|
|
||||||
use crate::game::sound::Sounds;
|
use crate::game::sound::Sounds;
|
||||||
@@ -13,10 +15,11 @@ pub struct Button {
|
|||||||
shadow_width: f32,
|
shadow_width: f32,
|
||||||
pub color: UiColor,
|
pub color: UiColor,
|
||||||
sound: Sound,
|
sound: Sound,
|
||||||
|
font: Arc<Font>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Button {
|
impl Button {
|
||||||
pub fn new(text: &str, rect: Rect, color: UiColor, sound: Sound) -> Self {
|
pub fn new(text: &str, rect: Rect, color: UiColor, sound: Sound, font: Arc<Font>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
text: text.to_string(),
|
text: text.to_string(),
|
||||||
is_down: false,
|
is_down: false,
|
||||||
@@ -26,6 +29,7 @@ impl Button {
|
|||||||
shadow_width: 5.0,
|
shadow_width: 5.0,
|
||||||
color,
|
color,
|
||||||
sound,
|
sound,
|
||||||
|
font,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,16 +82,21 @@ impl Button {
|
|||||||
false => Color::from_rgba(100, 100, 100, 255),
|
false => Color::from_rgba(100, 100, 100, 255),
|
||||||
};
|
};
|
||||||
|
|
||||||
let font_size = (0.3 * self.rect.w) as u16;
|
let font_size = (0.2 * self.rect.w) as u16;
|
||||||
let dims = measure_text(&self.text, None, font_size, 1.0);
|
let dims = measure_text(&self.text, Some(&self.font), font_size, 1.0);
|
||||||
let button_draw_offset = self.get_button_draw_offset();
|
let button_draw_offset = self.get_button_draw_offset();
|
||||||
|
|
||||||
draw_text(
|
let text_params = TextParams {
|
||||||
|
font_size: font_size as u16,
|
||||||
|
color: font_color,
|
||||||
|
font: Some(&self.font),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
draw_text_ex(
|
||||||
&self.text,
|
&self.text,
|
||||||
self.rect.x + (self.rect.w - dims.width) * 0.5 + button_draw_offset,
|
self.rect.x + (self.rect.w - dims.width) * 0.5 + button_draw_offset,
|
||||||
self.rect.y + (self.rect.h - dims.height) * 0.5 + dims.offset_y + button_draw_offset,
|
self.rect.y + (self.rect.h - dims.height) * 0.5 + dims.offset_y + button_draw_offset,
|
||||||
font_size as f32,
|
text_params,
|
||||||
font_color,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+26
-9
@@ -5,18 +5,23 @@ use miniquad::date;
|
|||||||
mod game;
|
mod game;
|
||||||
|
|
||||||
fn window_conf() -> Conf {
|
fn window_conf() -> Conf {
|
||||||
let window_name = match std::env::var("TESTING") {
|
|
||||||
Ok(_) => "DEV TESTING MOVE TO WORKSPACE 10",
|
|
||||||
Err(_) => "Solitaire Chess",
|
|
||||||
};
|
|
||||||
|
|
||||||
Conf {
|
Conf {
|
||||||
window_title: window_name.to_string(),
|
window_title: get_window_title(),
|
||||||
fullscreen: false,
|
fullscreen: false,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
fn get_window_title() -> String {
|
||||||
|
String::from("MOVE TO WORKSPACE 10")
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(debug_assertions))]
|
||||||
|
fn get_window_title() -> String {
|
||||||
|
String::from("Solitaire Chess")
|
||||||
|
}
|
||||||
|
|
||||||
#[macroquad::main(window_conf)]
|
#[macroquad::main(window_conf)]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
rand::srand(date::now() as u64);
|
rand::srand(date::now() as u64);
|
||||||
@@ -43,12 +48,24 @@ async fn init() -> Game {
|
|||||||
let texture_res = Texture2D::from_file_with_format(&texture_bytes[..], None);
|
let texture_res = Texture2D::from_file_with_format(&texture_bytes[..], None);
|
||||||
texture_res.set_filter(FilterMode::Nearest);
|
texture_res.set_filter(FilterMode::Nearest);
|
||||||
build_textures_atlas();
|
build_textures_atlas();
|
||||||
|
|
||||||
let click = load_sound!("../assets/click.wav");
|
let click = load_sound!("../assets/click.wav");
|
||||||
let win = load_sound!("../assets/win.wav");
|
let win = load_sound!("../assets/win.wav");
|
||||||
let loss = load_sound!("../assets/loss.wav");
|
let loss = load_sound!("../assets/loss.wav");
|
||||||
let button = load_sound!("../assets/button.wav");
|
let button = load_sound!("../assets/button.wav");
|
||||||
let mode = load_sound!("../assets/mode.wav");
|
let mode = load_sound!("../assets/mode.wav");
|
||||||
let sounds = Sounds { click, win, loss, button, mode };
|
let sounds = Sounds {
|
||||||
let game = Game::new(texture_res, sounds);
|
click,
|
||||||
game
|
win,
|
||||||
|
loss,
|
||||||
|
button,
|
||||||
|
mode,
|
||||||
|
};
|
||||||
|
|
||||||
|
let font_ttf = include_bytes!("../assets/caskaydia.ttf");
|
||||||
|
let Ok(font) = load_ttf_font_from_bytes(font_ttf) else {
|
||||||
|
panic!("Failed to load font");
|
||||||
|
};
|
||||||
|
|
||||||
|
Game::new(texture_res, sounds, font)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user