radiantkit_core/components/
transform.rs

1use 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 {}