radiantkit_core/components/
transform.rs1use serde::{Deserialize, Serialize};
2
3use crate::{RadiantComponent, RadiantTransformable};
4
5#[derive(Serialize, Deserialize, Debug, Clone)]
6pub struct TransformComponent {
7 position: [f32; 3],
8 scale: [f32; 3],
9 rotation: f32,
10}
11
12impl TransformComponent {
13 pub fn new() -> Self {
14 Self {
15 position: [0.0, 0.0, 0.0],
16 scale: [1.0, 1.0, 1.0],
17 rotation: 0.0,
18 }
19 }
20}
21
22impl RadiantTransformable for TransformComponent {
23 fn transform_xy(&mut self, position: &[f32; 2]) {
24 self.position = [
25 self.position[0] + position[0],
26 self.position[1] + position[1],
27 0.0,
28 ]
29 }
30
31 fn transform_scale(&mut self, scale: &[f32; 2]) {
32 self.scale = [self.scale[0] + scale[0], self.scale[1] + scale[1], 0.0]
33 }
34
35 fn set_xy(&mut self, position: &[f32; 2]) {
36 self.position = [position[0], position[1], 0.0];
37 }
38
39 fn set_scale(&mut self, scale: &[f32; 2]) {
40 self.scale = [scale[0], scale[1], 0.0];
41 }
42
43 fn set_rotation(&mut self, rotation: f32) {
44 self.rotation = rotation;
45 }
46
47 fn get_xy(&self) -> [f32; 2] {
48 [self.position[0], self.position[1]]
49 }
50
51 fn get_scale(&self) -> [f32; 2] {
52 [self.scale[0], self.scale[1]]
53 }
54
55 fn get_rotation(&self) -> f32 {
56 self.rotation
57 }
58}
59
60impl RadiantComponent for TransformComponent {}