Add new Center enum for center config

This commit is contained in:
Steins7 2024-02-27 21:53:34 +01:00 committed by Steins7
parent e921ea74d9
commit d10ce2552d
5 changed files with 42 additions and 12 deletions

View File

@ -56,7 +56,7 @@ impl Application<ExampleState> for ExampleApp {
fn init(canvas: &mut Canvas) -> Result<ExampleState, &'static str> {
use canvas::{
utils::Size,
sprite::Sprite,
sprite::{Sprite, Center},
};
//// 20 x 20 sprite of a picture
@ -64,7 +64,7 @@ impl Application<ExampleState> for ExampleApp {
.unwrap();
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_center(Position {x:-1280/2, y:-720/2});
tex_sprite.set_center(Center::BotLeft);
tex_sprite.set_position(Position {x: 0, y: 0});
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});
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_position(Position {x: 100, y: 100});
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_scale(1.0);

View File

@ -19,6 +19,16 @@ use crate::{
//--External imports--------------------------------------------------------------------------------
//--Center enum-------------------------------------------------------------------------------------
pub enum Center {
Geometric,
TopLeft,
TopRight,
BotLeft,
BotRight,
Custom(Position),
}
//--Sprite trait------------------------------------------------------------------------------------
/// 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);
/// 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
fn set_rotation(&mut self, rotation: f32);

View File

@ -5,7 +5,7 @@ use log::{debug, error, info, trace, warn};
use crate::{
renderer::WgpuRenderer,
sprite::Sprite,
sprite::{Sprite, Center},
shape::Shape,
utils::{Pixel, Position, Size},
};
@ -39,7 +39,7 @@ impl Sprite for ShapeSprite {
todo!();
}
fn set_center(&mut self, _center: Position) {
fn set_center(&mut self, _center: Center) {
todo!();
}

View File

@ -5,7 +5,7 @@ use log::{debug, error, info, trace, warn};
use crate::{
renderer::WgpuRenderer,
sprite::Sprite,
sprite::{Sprite, Center},
utils::{Pixel, Color, Position, Size},
};
use super::TextureSprite;
@ -149,7 +149,7 @@ impl Sprite for TextSprite {
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);
}

View File

@ -3,7 +3,7 @@ use log::{debug, error, info, trace, warn};
//--Internal imports--------------------------------------------------------------------------------
use super::Sprite;
use super::{Sprite, Center};
use crate::{
texture::TextureHandle,
@ -148,8 +148,28 @@ impl Sprite for TextureSprite {
self.matrix.set_position(position);
}
fn set_center(&mut self, center: Position) {
self.matrix.set_center(center);
fn set_center(&mut self, 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) {