Struct gemini_engine::elements::view::ColChar
source · pub struct ColChar {
pub text_char: char,
pub modifier: Modifier,
}Expand description
We use ColChar to say exactly what each pixel should look like and what colour it should be. That is, the View’s canvas is just a vector of ColChars under the hood. ColChar has the text_char and modifier properties. text_char is the single ascii character used as the “pixel” when the View is rendered, whereas modifier can give that pixel a colour or make it bold/italic
Fields§
§text_char: charThe actual character that will dictate the appearance of the pixel
modifier: ModifierThe modifier that will be applied to the text character
Implementations§
source§impl ColChar
impl ColChar
sourcepub const SOLID: Self = _
pub const SOLID: Self = _
A solid █ character with no Modifier.
Using a sequence like this will create a red █ ColChar
ColChar::SOLID.with_rgb(255,0,0)
sourcepub const BACKGROUND: Self = _
pub const BACKGROUND: Self = _
A less solid ░ character with no Modifier
sourcepub const fn new(text_char: char, modifier: Modifier) -> Self
pub const fn new(text_char: char, modifier: Modifier) -> Self
Create a new ColChar with a text character and a Modifier
sourcepub const fn with_char(self, text_char: char) -> Self
pub const fn with_char(self, text_char: char) -> Self
Return a ColChar with the same modifier and new text_char
sourcepub const fn with_mod(self, modifier: Modifier) -> Self
pub const fn with_mod(self, modifier: Modifier) -> Self
Return a ColChar with the same text_char and new modifier
sourcepub const fn with_rgb(self, r: u8, g: u8, b: u8) -> Self
pub const fn with_rgb(self, r: u8, g: u8, b: u8) -> Self
Return a ColChar with the same text_char and new modifier of the Modifier::Colour enum variant from RGB values
Examples found in repository?
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
fn main() {
let mut view = View::new(60, 10, BACKGROUND_CHAR);
view.coord_numbers_in_render = true;
let mut pixel = Pixel::new(Vec2D::from((5u8, 9u8)), FILL_CHAR);
let mut line = Line::new(Vec2D::new(2, 8), Vec2D::new(28, 7), FILL_CHAR);
let mut line1_direction = -1;
let rect = Rect::new(
Vec2D { x: 11, y: 1 },
Vec2D { x: 9, y: 3 },
ColChar::SOLID.with_rgb(200, 30, 0),
);
let test_image = r"
______
/|_||_\`.__
( _ _ _\
=`-(_)--(_)-' ";
let mut sprite = Sprite::new(
Vec2D::new(30, 1),
test_image,
Modifier::from_rgb(20, 200, 0),
);
let mut blit_elapsed = Duration::default();
let mut render_elapsed = Duration::default();
fps_gameloop!(
{
pixel.pos.x += 2;
// loop the position back to the other side. This can be done with `Wrapping::Wrap` but it won't change the element's actual position, so the pixel position being printed would continue to increase without looping
pixel.pos %= view.size();
line.pos1.y += line1_direction;
line.pos0.y = 10 - line.pos1.y;
if line.pos1.y > 7 {
line1_direction = -1;
} else if line.pos1.y < 3 {
line1_direction = 1;
}
sprite.pos.x += 1;
},
{
view.clear();
let now = Instant::now();
view.blit(&pixel, Wrapping::Panic);
view.blit(&line, Wrapping::Panic);
view.blit(&rect, Wrapping::Panic);
view.blit(&sprite, Wrapping::Wrap);
blit_elapsed = now.elapsed();
let now = Instant::now();
let _ = view.display_render();
render_elapsed = now.elapsed();
},
FPS,
|total_elapsed: Duration, _frame_skip| {
println!(
"Blitting: {:.2?} microseconds | Rendering: {:.2?} microseconds| Total: {:.2?}",
blit_elapsed.as_micros(),
render_elapsed.as_micros(),
total_elapsed.as_micros()
);
println!("Pixel position: {}", pixel.pos);
}
);
}sourcepub fn with_hsv(self, h: u8, s: u8, v: u8) -> Self
pub fn with_hsv(self, h: u8, s: u8, v: u8) -> Self
Return a ColChar with the same text_char and new modifier of the Modifier::Colour enum variant from HSV values
sourcepub const fn with_colour(self, colour: Colour) -> Self
pub const fn with_colour(self, colour: Colour) -> Self
Return a ColChar with the same text_char and new modifier of the Modifier::Colour enum variant from an HSV value