Struct gemini_engine::elements::view::Vec2D
source · pub struct Vec2D {
pub x: isize,
pub y: isize,
}Expand description
A pair of isize used for coordinates, size or direction on a 2D plane
Fields§
§x: isizeX-coordinate
y: isizeY-coordinate
Implementations§
source§impl Vec2D
impl Vec2D
sourcepub const fn new(x: isize, y: isize) -> Self
pub const fn new(x: isize, y: isize) -> Self
Create a Vec2D from the provided isize values
Examples found in repository?
examples/multi-movement.rs (line 15)
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
const BLOCK_SIZE: Vec2D = Vec2D::new(4, 2);
const FILL_CHAR: ColChar = ColChar::SOLID;
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 (line 19)
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 AddAssign for Vec2D
impl AddAssign for Vec2D
source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the
+= operation. Read moresource§impl DivAssign<isize> for Vec2D
impl DivAssign<isize> for Vec2D
source§fn div_assign(&mut self, rhs: isize)
fn div_assign(&mut self, rhs: isize)
Performs the
/= operation. Read moresource§impl DivAssign for Vec2D
impl DivAssign for Vec2D
source§fn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
Performs the
/= operation. Read moresource§impl MulAssign<isize> for Vec2D
impl MulAssign<isize> for Vec2D
source§fn mul_assign(&mut self, rhs: isize)
fn mul_assign(&mut self, rhs: isize)
Performs the
*= operation. Read moresource§impl MulAssign for Vec2D
impl MulAssign for Vec2D
source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
Performs the
*= operation. Read moresource§impl PartialEq for Vec2D
impl PartialEq for Vec2D
source§impl PartialOrd for Vec2D
impl PartialOrd for Vec2D
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for
self and other) and is used by the <=
operator. Read moresource§impl RemAssign for Vec2D
impl RemAssign for Vec2D
source§fn rem_assign(&mut self, rhs: Self)
fn rem_assign(&mut self, rhs: Self)
Performs the
%= operation. Read moresource§impl SubAssign for Vec2D
impl SubAssign for Vec2D
source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
Performs the
-= operation. Read moreimpl Copy for Vec2D
impl Eq for Vec2D
impl StructuralPartialEq for Vec2D
Auto Trait Implementations§
impl Freeze for Vec2D
impl RefUnwindSafe for Vec2D
impl Send for Vec2D
impl Sync for Vec2D
impl Unpin for Vec2D
impl UnwindSafe for Vec2D
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