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> { 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);

View File

@ -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);

View File

@ -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!();
} }

View File

@ -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);
} }

View File

@ -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) {