pub struct TextMaterial { /* private fields */ }Expand description
This struct represents a piece of text. You only need to create one peice of text per string you would like to draw as you can draw multpiple instances easily.
Implementations§
Source§impl TextMaterial
impl TextMaterial
Sourcepub fn new(text: &str, colour: Colour, font_size: f32, line_height: f32) -> Self
pub fn new(text: &str, colour: Colour, font_size: f32, line_height: f32) -> Self
Examples found in repository?
9fn main() {
10 let engine = EngineBuilder::new().build().unwrap();
11
12 let text_mat = TextMaterial::new("this is a test", Colour::RED, 20.0, 20.0 * 1.3);
13
14 let text_example = TextExample {
15 text_mat,
16 text: String::new(),
17 };
18
19 engine.run(text_example);
20}More examples
11fn main() {
12 let mut engine = EngineBuilder::new().build().unwrap();
13
14 let comic = Font::new("examples/Comic.ttf", &mut engine, LoadingOp::Blocking);
15 let text_mat = TextMaterial::new("this is a test", Colour::RED, 0.5, 0.5 * 1.3);
16
17 let text_example = TextExample {
18 text_mat,
19 comic,
20 font_size: 0.5,
21 };
22
23 engine.run(text_example);
24}13fn main() {
14 let mut engine = EngineBuilder::new().build().unwrap();
15
16 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
17
18 let material = MaterialBuilder::new()
19 .add_texture(texture)
20 .build(&mut engine);
21
22 let camera = Camera::default();
23
24 let text = TextMaterial::new(
25 "Mouse pos: 0,0 \n Mouse pos: 0, 0",
26 Colour::WHITE,
27 15.0,
28 20.0,
29 );
30
31 let game = CameraExample {
32 material,
33 text,
34 camera,
35 };
36
37 engine.run(game);
38}Sourcepub fn set_text(&mut self, text: &str, colour: Colour, engine: &mut Engine)
pub fn set_text(&mut self, text: &str, colour: Colour, engine: &mut Engine)
Sets the text for the widget, using the defualt font. This only needs to be done once, not every frame like Materials.
Examples found in repository?
More examples
66 fn update(&mut self, engine_handle: &mut Engine) {
67 let dt = engine_handle.get_frame_delta_time();
68 let mouse_pos = engine_handle.get_mouse_position();
69 let size = engine_handle.get_window_size();
70
71 let move_factor = 15.0;
72
73 if engine_handle.is_key_down(Key::A) {
74 self.camera.center.x -= move_factor * dt;
75 }
76
77 if engine_handle.is_key_down(Key::D) {
78 self.camera.center.x += move_factor * dt;
79 }
80
81 if engine_handle.is_key_down(Key::W) {
82 self.camera.center.y += move_factor * dt;
83 }
84
85 if engine_handle.is_key_down(Key::S) {
86 self.camera.center.y -= move_factor * dt;
87 }
88
89 if engine_handle.is_key_down(Key::Left) {
90 self.camera.rotation += move_factor * dt;
91 }
92
93 if engine_handle.is_key_down(Key::Right) {
94 self.camera.rotation -= move_factor * dt;
95 }
96
97 if engine_handle.is_key_down(Key::L) {
98 self.camera.scale += vec2!(2.0 * dt, 2.0 * dt);
99 }
100
101 if engine_handle.is_key_down(Key::K) {
102 self.camera.scale -= vec2!(2.0 * dt, 2.0 * dt);
103 }
104
105 if engine_handle.is_key_pressed(Key::Enter) {
106 self.camera.rotation += 45.0;
107 }
108
109 let trans_mouse = self.camera.transform_point(mouse_pos, size);
110
111 self.text.set_text(
112 &format!(
113 "Screen mouse pos: {:.3}, {:.3}\nWorld mouse pos: {:.3}, {:.3}",
114 mouse_pos.x, mouse_pos.y, trans_mouse.x, trans_mouse.y
115 ),
116 Colour::WHITE,
117 engine_handle,
118 );
119
120 self.text.prepare(engine_handle);
121 }Sourcepub fn set_text_with_font(
&mut self,
text: &str,
colour: Colour,
font: &ResourceId<Font>,
engine: &mut Engine,
)
pub fn set_text_with_font( &mut self, text: &str, colour: Colour, font: &ResourceId<Font>, engine: &mut Engine, )
Sets the text for the widget, but with a font of your choosing. This only needs to be done once, not every frame like Materials
Examples found in repository?
48 fn update(&mut self, engine_handle: &mut Engine) {
49 self.font_size += 2.0 * engine_handle.get_frame_delta_time();
50
51 self.text_mat.set_font_size(self.font_size, engine_handle);
52 self.text_mat
53 .set_line_height(self.font_size * 1.3, engine_handle);
54
55 if engine_handle.is_mouse_key_pressed(MouseKey::Left) {
56 self.text_mat.set_text_with_font(
57 "hello I am talking to you here???",
58 Colour::GREEN,
59 &self.comic,
60 engine_handle,
61 );
62 }
63
64 self.text_mat.prepare(engine_handle);
65 }Sourcepub fn set_bounds(&mut self, position: Vec2<i32>, size: Vec2<i32>)
pub fn set_bounds(&mut self, position: Vec2<i32>, size: Vec2<i32>)
Sets bounds for the text. Any text drawn outside of the bounds will be cropped
Sourcepub fn set_font_size(&mut self, new_size: f32, engine: &mut Engine)
pub fn set_font_size(&mut self, new_size: f32, engine: &mut Engine)
Sets the font size of the text
Examples found in repository?
48 fn update(&mut self, engine_handle: &mut Engine) {
49 self.font_size += 2.0 * engine_handle.get_frame_delta_time();
50
51 self.text_mat.set_font_size(self.font_size, engine_handle);
52 self.text_mat
53 .set_line_height(self.font_size * 1.3, engine_handle);
54
55 if engine_handle.is_mouse_key_pressed(MouseKey::Left) {
56 self.text_mat.set_text_with_font(
57 "hello I am talking to you here???",
58 Colour::GREEN,
59 &self.comic,
60 engine_handle,
61 );
62 }
63
64 self.text_mat.prepare(engine_handle);
65 }Sourcepub fn set_line_height(&mut self, new_height: f32, engine: &mut Engine)
pub fn set_line_height(&mut self, new_height: f32, engine: &mut Engine)
Sets the line hieght of the text
Examples found in repository?
48 fn update(&mut self, engine_handle: &mut Engine) {
49 self.font_size += 2.0 * engine_handle.get_frame_delta_time();
50
51 self.text_mat.set_font_size(self.font_size, engine_handle);
52 self.text_mat
53 .set_line_height(self.font_size * 1.3, engine_handle);
54
55 if engine_handle.is_mouse_key_pressed(MouseKey::Left) {
56 self.text_mat.set_text_with_font(
57 "hello I am talking to you here???",
58 Colour::GREEN,
59 &self.comic,
60 engine_handle,
61 );
62 }
63
64 self.text_mat.prepare(engine_handle);
65 }Sourcepub fn get_measurements(&self) -> Vec2<u32>
pub fn get_measurements(&self) -> Vec2<u32>
Measuers the text contained within the widget
pub fn get_text(&self) -> &str
Sourcepub fn add_instance(
&mut self,
position: Vec2<f32>,
tint: Colour,
render: &Renderer<'_, '_>,
)
pub fn add_instance( &mut self, position: Vec2<f32>, tint: Colour, render: &Renderer<'_, '_>, )
Queues a peice of text at the specified position. Its size will be the size of the entire text.
Examples found in repository?
More examples
33 fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
34 let mut render_handle = render.begin_pass(Colour::BLACK);
35
36 self.text_mat
37 .add_instance(vec2! { 0.0 }, Colour::WHITE, &render_handle);
38 self.text_mat.add_instance_with_rotation(
39 Vec2 { x: 100.0, y: 0.0 },
40 Colour::WHITE,
41 45.0,
42 &render_handle,
43 );
44
45 self.text_mat.draw(&mut render_handle);
46 }47 fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
48 let mut render_handle = render.begin_pass(Colour::BLACK);
49
50 self.material.add_rectangle(
51 Vec2 { x: 0.0, y: 0.0 },
52 Vec2 { x: 300.0, y: 300.0 },
53 Colour::WHITE,
54 &render_handle,
55 );
56
57 self.camera.set_active(&mut render_handle);
58 self.material.draw(&mut render_handle);
59
60 render_handle.reset_camera();
61 self.text
62 .add_instance(vec2!(0.0), Colour::WHITE, &render_handle);
63 self.text.draw(&mut render_handle);
64 }Sourcepub fn add_instance_with_rotation(
&mut self,
position: Vec2<f32>,
tint: Colour,
degrees: f32,
render: &Renderer<'_, '_>,
)
pub fn add_instance_with_rotation( &mut self, position: Vec2<f32>, tint: Colour, degrees: f32, render: &Renderer<'_, '_>, )
Queues a piece of text at the specified postion, with rotation. Its size will be the size of the text.
Examples found in repository?
33 fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
34 let mut render_handle = render.begin_pass(Colour::BLACK);
35
36 self.text_mat
37 .add_instance(vec2! { 0.0 }, Colour::WHITE, &render_handle);
38 self.text_mat.add_instance_with_rotation(
39 Vec2 { x: 100.0, y: 0.0 },
40 Colour::WHITE,
41 45.0,
42 &render_handle,
43 );
44
45 self.text_mat.draw(&mut render_handle);
46 }Sourcepub fn add_instance_with_uv(
&mut self,
position: Vec2<f32>,
size: Vec2<f32>,
uv_pos: Vec2<f32>,
uv_size: Vec2<f32>,
tint: Colour,
render: &Renderer<'_, '_>,
)
pub fn add_instance_with_uv( &mut self, position: Vec2<f32>, size: Vec2<f32>, uv_pos: Vec2<f32>, uv_size: Vec2<f32>, tint: Colour, render: &Renderer<'_, '_>, )
Queues a piece of text at the specified postion. This also allows you to control the uv coordinates to the texture that the text has been rendered to.
Sourcepub fn add_instace_ex(
&mut self,
position: Vec2<f32>,
size: Vec2<f32>,
uv_pos: Vec2<f32>,
uv_size: Vec2<f32>,
degrees: f32,
tint: Colour,
render: &Renderer<'_, '_>,
)
pub fn add_instace_ex( &mut self, position: Vec2<f32>, size: Vec2<f32>, uv_pos: Vec2<f32>, uv_size: Vec2<f32>, degrees: f32, tint: Colour, render: &Renderer<'_, '_>, )
Queues a piece of text at the position with, uv control, and rotation.
Sourcepub fn add_instance_custom(
&mut self,
points: [Vec2<f32>; 4],
uv_points: [Vec2<f32>; 4],
degrees: f32,
tint: Colour,
render: &Renderer<'_, '_>,
)
pub fn add_instance_custom( &mut self, points: [Vec2<f32>; 4], uv_points: [Vec2<f32>; 4], degrees: f32, tint: Colour, render: &Renderer<'_, '_>, )
Queues a peice with complete controll over the points, rotation, and uv coordinates. This can allow for non rectanglular shapes and the points must be in top left, top right, bottom right, bottom left order otherwise it will not draw properly.
Sourcepub fn prepare(&mut self, engine: &mut Engine)
pub fn prepare(&mut self, engine: &mut Engine)
This function needs to be run any time you update the text. This updates the internal texture used to render the text. If this is not run after each change then it wont display the changes.
Examples found in repository?
More examples
48 fn update(&mut self, engine_handle: &mut Engine) {
49 self.font_size += 2.0 * engine_handle.get_frame_delta_time();
50
51 self.text_mat.set_font_size(self.font_size, engine_handle);
52 self.text_mat
53 .set_line_height(self.font_size * 1.3, engine_handle);
54
55 if engine_handle.is_mouse_key_pressed(MouseKey::Left) {
56 self.text_mat.set_text_with_font(
57 "hello I am talking to you here???",
58 Colour::GREEN,
59 &self.comic,
60 engine_handle,
61 );
62 }
63
64 self.text_mat.prepare(engine_handle);
65 }66 fn update(&mut self, engine_handle: &mut Engine) {
67 let dt = engine_handle.get_frame_delta_time();
68 let mouse_pos = engine_handle.get_mouse_position();
69 let size = engine_handle.get_window_size();
70
71 let move_factor = 15.0;
72
73 if engine_handle.is_key_down(Key::A) {
74 self.camera.center.x -= move_factor * dt;
75 }
76
77 if engine_handle.is_key_down(Key::D) {
78 self.camera.center.x += move_factor * dt;
79 }
80
81 if engine_handle.is_key_down(Key::W) {
82 self.camera.center.y += move_factor * dt;
83 }
84
85 if engine_handle.is_key_down(Key::S) {
86 self.camera.center.y -= move_factor * dt;
87 }
88
89 if engine_handle.is_key_down(Key::Left) {
90 self.camera.rotation += move_factor * dt;
91 }
92
93 if engine_handle.is_key_down(Key::Right) {
94 self.camera.rotation -= move_factor * dt;
95 }
96
97 if engine_handle.is_key_down(Key::L) {
98 self.camera.scale += vec2!(2.0 * dt, 2.0 * dt);
99 }
100
101 if engine_handle.is_key_down(Key::K) {
102 self.camera.scale -= vec2!(2.0 * dt, 2.0 * dt);
103 }
104
105 if engine_handle.is_key_pressed(Key::Enter) {
106 self.camera.rotation += 45.0;
107 }
108
109 let trans_mouse = self.camera.transform_point(mouse_pos, size);
110
111 self.text.set_text(
112 &format!(
113 "Screen mouse pos: {:.3}, {:.3}\nWorld mouse pos: {:.3}, {:.3}",
114 mouse_pos.x, mouse_pos.y, trans_mouse.x, trans_mouse.y
115 ),
116 Colour::WHITE,
117 engine_handle,
118 );
119
120 self.text.prepare(engine_handle);
121 }Sourcepub fn draw<'others>(&'others mut self, information: &mut Renderer<'_, 'others>)
pub fn draw<'others>(&'others mut self, information: &mut Renderer<'_, 'others>)
Draws all queued text instances to the screen
Examples found in repository?
More examples
33 fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
34 let mut render_handle = render.begin_pass(Colour::BLACK);
35
36 self.text_mat
37 .add_instance(vec2! { 0.0 }, Colour::WHITE, &render_handle);
38 self.text_mat.add_instance_with_rotation(
39 Vec2 { x: 100.0, y: 0.0 },
40 Colour::WHITE,
41 45.0,
42 &render_handle,
43 );
44
45 self.text_mat.draw(&mut render_handle);
46 }47 fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
48 let mut render_handle = render.begin_pass(Colour::BLACK);
49
50 self.material.add_rectangle(
51 Vec2 { x: 0.0, y: 0.0 },
52 Vec2 { x: 300.0, y: 300.0 },
53 Colour::WHITE,
54 &render_handle,
55 );
56
57 self.camera.set_active(&mut render_handle);
58 self.material.draw(&mut render_handle);
59
60 render_handle.reset_camera();
61 self.text
62 .add_instance(vec2!(0.0), Colour::WHITE, &render_handle);
63 self.text.draw(&mut render_handle);
64 }Auto Trait Implementations§
impl !Freeze for TextMaterial
impl !RefUnwindSafe for TextMaterial
impl Send for TextMaterial
impl Sync for TextMaterial
impl Unpin for TextMaterial
impl !UnwindSafe for TextMaterial
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more