Add new Center enum for center config
This commit is contained in:
parent
e921ea74d9
commit
d10ce2552d
@ -56,7 +56,7 @@ impl Application<ExampleState> for ExampleApp {
|
|||||||
fn init(canvas: &mut Canvas) -> Result<ExampleState, &'static str> {
|
fn init(canvas: &mut Canvas) -> Result<ExampleState, &'static str> {
|
||||||
use canvas::{
|
use canvas::{
|
||||||
utils::Size,
|
utils::Size,
|
||||||
sprite::Sprite,
|
sprite::{Sprite, Center},
|
||||||
};
|
};
|
||||||
|
|
||||||
//// 20 x 20 sprite of a picture
|
//// 20 x 20 sprite of a picture
|
||||||
@ -64,7 +64,7 @@ impl Application<ExampleState> for ExampleApp {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
let mut tex_sprite = canvas.create_texture_sprite(Size {w: 1280, h: 720});
|
let mut tex_sprite = canvas.create_texture_sprite(Size {w: 1280, h: 720});
|
||||||
tex_sprite.set_texture(texture.clone(), Some(Position {x: 0, y: 0}), 1.0);
|
tex_sprite.set_texture(texture.clone(), Some(Position {x: 0, y: 0}), 1.0);
|
||||||
tex_sprite.set_center(Position {x:-1280/2, y:-720/2});
|
tex_sprite.set_center(Center::BotLeft);
|
||||||
tex_sprite.set_position(Position {x: 0, y: 0});
|
tex_sprite.set_position(Position {x: 0, y: 0});
|
||||||
|
|
||||||
let mut sub_sprite = canvas.create_texture_sprite(Size {w: 100, h: 100});
|
let mut sub_sprite = canvas.create_texture_sprite(Size {w: 100, h: 100});
|
||||||
@ -74,12 +74,12 @@ impl Application<ExampleState> for ExampleApp {
|
|||||||
|
|
||||||
let mut sub_sprite2 = canvas.create_texture_sprite(Size {w: 200, h: 200});
|
let mut sub_sprite2 = canvas.create_texture_sprite(Size {w: 200, h: 200});
|
||||||
sub_sprite2.set_texture(texture.clone(), Some(Position {x: 100, y: 0}), 1.0);
|
sub_sprite2.set_texture(texture.clone(), Some(Position {x: 100, y: 0}), 1.0);
|
||||||
sub_sprite2.set_center(Position {x:100, y:100});
|
sub_sprite2.set_center(Center::Custom(Position {x:100, y:100}));
|
||||||
sub_sprite2.set_rotation(0.0);
|
sub_sprite2.set_rotation(0.0);
|
||||||
sub_sprite2.set_position(Position {x: 100, y: 100});
|
sub_sprite2.set_position(Position {x: 100, y: 100});
|
||||||
|
|
||||||
let mut txt_sprite = canvas.create_text_sprite("00", Size {w: 100, h: 100}, 22.0);
|
let mut txt_sprite = canvas.create_text_sprite("00", Size {w: 100, h: 100}, 22.0);
|
||||||
txt_sprite.set_center(Position {x:-50, y:50});
|
txt_sprite.set_center(Center::BotLeft);
|
||||||
txt_sprite.set_position(Position {x:100, y:100});
|
txt_sprite.set_position(Position {x:100, y:100});
|
||||||
txt_sprite.set_scale(1.0);
|
txt_sprite.set_scale(1.0);
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,16 @@ use crate::{
|
|||||||
|
|
||||||
//--External imports--------------------------------------------------------------------------------
|
//--External imports--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
//--Center enum-------------------------------------------------------------------------------------
|
||||||
|
pub enum Center {
|
||||||
|
Geometric,
|
||||||
|
TopLeft,
|
||||||
|
TopRight,
|
||||||
|
BotLeft,
|
||||||
|
BotRight,
|
||||||
|
Custom(Position),
|
||||||
|
}
|
||||||
|
|
||||||
//--Sprite trait------------------------------------------------------------------------------------
|
//--Sprite trait------------------------------------------------------------------------------------
|
||||||
|
|
||||||
/// The interface for everything that can be rendered by the engine.
|
/// The interface for everything that can be rendered by the engine.
|
||||||
@ -31,7 +41,7 @@ pub trait Sprite {
|
|||||||
fn set_position(&mut self, position: Position);
|
fn set_position(&mut self, position: Position);
|
||||||
|
|
||||||
/// Sets the center of the [`Sprite`] for rotations as well as translations
|
/// Sets the center of the [`Sprite`] for rotations as well as translations
|
||||||
fn set_center(&mut self, center: Position);
|
fn set_center(&mut self, center: Center);
|
||||||
|
|
||||||
/// Sets the rotation of the [`Sprite`] on the screen
|
/// Sets the rotation of the [`Sprite`] on the screen
|
||||||
fn set_rotation(&mut self, rotation: f32);
|
fn set_rotation(&mut self, rotation: f32);
|
||||||
|
|||||||
@ -5,7 +5,7 @@ use log::{debug, error, info, trace, warn};
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
renderer::WgpuRenderer,
|
renderer::WgpuRenderer,
|
||||||
sprite::Sprite,
|
sprite::{Sprite, Center},
|
||||||
shape::Shape,
|
shape::Shape,
|
||||||
utils::{Pixel, Position, Size},
|
utils::{Pixel, Position, Size},
|
||||||
};
|
};
|
||||||
@ -39,7 +39,7 @@ impl Sprite for ShapeSprite {
|
|||||||
todo!();
|
todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_center(&mut self, _center: Position) {
|
fn set_center(&mut self, _center: Center) {
|
||||||
todo!();
|
todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@ use log::{debug, error, info, trace, warn};
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
renderer::WgpuRenderer,
|
renderer::WgpuRenderer,
|
||||||
sprite::Sprite,
|
sprite::{Sprite, Center},
|
||||||
utils::{Pixel, Color, Position, Size},
|
utils::{Pixel, Color, Position, Size},
|
||||||
};
|
};
|
||||||
use super::TextureSprite;
|
use super::TextureSprite;
|
||||||
@ -149,7 +149,7 @@ impl Sprite for TextSprite {
|
|||||||
self.texture_sprite.set_position(position);
|
self.texture_sprite.set_position(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_center(&mut self, center: Position) {
|
fn set_center(&mut self, center: Center) {
|
||||||
self.texture_sprite.set_center(center);
|
self.texture_sprite.set_center(center);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@ use log::{debug, error, info, trace, warn};
|
|||||||
|
|
||||||
//--Internal imports--------------------------------------------------------------------------------
|
//--Internal imports--------------------------------------------------------------------------------
|
||||||
|
|
||||||
use super::Sprite;
|
use super::{Sprite, Center};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
texture::TextureHandle,
|
texture::TextureHandle,
|
||||||
@ -148,8 +148,28 @@ impl Sprite for TextureSprite {
|
|||||||
self.matrix.set_position(position);
|
self.matrix.set_position(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_center(&mut self, center: Position) {
|
fn set_center(&mut self, center: Center) {
|
||||||
self.matrix.set_center(center);
|
let center_pos = match center {
|
||||||
|
Center::Geometric => Position {x: 0, y: 0},
|
||||||
|
Center::TopLeft => Position {
|
||||||
|
x: -(self.inner_size.w as i32) / 2,
|
||||||
|
y: (self.inner_size.h as i32) / 2
|
||||||
|
},
|
||||||
|
Center::TopRight => Position {
|
||||||
|
x: (self.inner_size.w as i32) / 2,
|
||||||
|
y: (self.inner_size.h as i32) / 2
|
||||||
|
},
|
||||||
|
Center::BotLeft => Position {
|
||||||
|
x: -(self.inner_size.w as i32) / 2,
|
||||||
|
y: -(self.inner_size.h as i32) / 2
|
||||||
|
},
|
||||||
|
Center::BotRight => Position {
|
||||||
|
x: (self.inner_size.w as i32) / 2,
|
||||||
|
y: -(self.inner_size.h as i32) / 2
|
||||||
|
},
|
||||||
|
Center::Custom(pos) => pos,
|
||||||
|
};
|
||||||
|
self.matrix.set_center(center_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_rotation(&mut self, rotation: f32) {
|
fn set_rotation(&mut self, rotation: f32) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user