Struct gemini_engine::elements::geometry::Line
source · pub struct Line {
pub pos0: Vec2D,
pub pos1: Vec2D,
pub fill_char: ColChar,
}Expand description
Fields§
§pos0: Vec2D§pos1: Vec2D§fill_char: ColCharImplementations§
source§impl Line
impl Line
sourcepub fn new(pos0: Vec2D, pos1: Vec2D, fill_char: ColChar) -> Self
pub fn new(pos0: Vec2D, pos1: Vec2D, fill_char: ColChar) -> Self
Examples found in repository?
examples/complex-scene.rs (line 18)
12 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
fn main() {
let mut view = View::new(60, 10, BACKGROUND_CHAR);
view.coord_numbers_in_render = true;
let mut point = Point::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!(
{
point.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 point position being printed would continue to increase without looping
point.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(&point, 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();
view.display_render().unwrap();
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!("Point position: {}", point.pos);
}
);
}Trait Implementations§
source§impl ViewElement for Line
impl ViewElement for Line
source§fn active_pixels(&self) -> Vec<Point>
fn active_pixels(&self) -> Vec<Point>
Return a vector of every coordinate where a pixel should be placed and its respective
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 outputAuto Trait Implementations§
impl RefUnwindSafe for Line
impl Send for Line
impl Sync for Line
impl Unpin for Line
impl UnwindSafe for Line
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