Struct gemini_engine::elements::geometry::Rect
source · pub struct Rect {
pub pos: Vec2D,
pub size: Vec2D,
pub fill_char: ColChar,
}Expand description
The Rect takes a position and size, and returns a rectangle at that position with the given width and size when blit to a View
Fields§
§pos: Vec2DThe position of the top-left corner of the Rect
size: Vec2DThe size of the Rect, extending from Rect::pos
fill_char: ColCharThe ColChar used to fill the rectangle
Implementations§
source§impl Rect
impl Rect
sourcepub const fn new(pos: Vec2D, size: Vec2D, fill_char: ColChar) -> Self
pub const fn new(pos: Vec2D, size: Vec2D, fill_char: ColChar) -> Self
Create a new rectangle using a given position, size and ColChar
Examples found in repository?
examples/multi-movement.rs (line 22)
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
fn main() {
let mut view = View::new(50, 12, ColChar::BACKGROUND);
let mut blocks = vec![
Rect::new(Vec2D::new(0, 0), BLOCK_SIZE, FILL_CHAR),
Rect::new(Vec2D::new(0, 2), BLOCK_SIZE, FILL_CHAR),
Rect::new(Vec2D::new(0, 4), BLOCK_SIZE, FILL_CHAR),
Rect::new(Vec2D::new(0, 6), BLOCK_SIZE, FILL_CHAR),
Rect::new(Vec2D::new(0, 8), BLOCK_SIZE, FILL_CHAR),
Rect::new(Vec2D::new(0, 10), BLOCK_SIZE, FILL_CHAR),
];
let mut i = 0;
fps_gameloop!(
{
i += 1;
for (j, block) in (0u32..).zip(blocks.iter_mut()) {
if i % 2_u32.pow(j) == 0 {
block.pos.x += 1;
}
}
},
{
view.clear();
for block in &blocks {
view.blit(block, Wrapping::Wrap);
}
let _ = view.display_render();
if blocks
.iter()
.all(|b| b.pos.x % isize::try_from(view.width).expect("Wrapped usize") == 0)
{
thread::sleep(Duration::from_secs(2));
};
},
200.0
);
}More examples
examples/complex-scene.rs (lines 22-26)
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);
}
);
}Trait Implementations§
source§impl ViewElement for Rect
impl ViewElement for Rect
source§fn active_pixels(&self) -> Vec<Pixel>
fn active_pixels(&self) -> Vec<Pixel>
Return a vector of the element’s
Pixels - A ColChar. If your whole object is a solid colour, consider using utils::points_to_pixels() which will add the same ColChar to every point and can then be used as this function’s outputsource§fn active_points(&self) -> Vec<Vec2D>
fn active_points(&self) -> Vec<Vec2D>
Return the positions the
ViewElement occupies, essentially active_pixels() without the ColChars. This has a default setting that extracts the Vec2Ds from active_pixels but you can set it to something else to make it fasterAuto Trait Implementations§
impl RefUnwindSafe for Rect
impl Send for Rect
impl Sync for Rect
impl Unpin for Rect
impl UnwindSafe for Rect
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more