summaryrefslogtreecommitdiff
path: root/engine/src/data_types
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2025-10-18 17:04:28 +0200
committerHampusM <hampus@hampusmat.com>2025-10-18 17:04:28 +0200
commit7083a19bf1029bff21a9550d40cc3260e99aac53 (patch)
tree524a8bd2e75ca712b0536218089804cf9838553b /engine/src/data_types
parent7f3072ed7e016dff359439d7580403e36ad6b325 (diff)
refactor(engine): use winit instead of glfw
Diffstat (limited to 'engine/src/data_types')
-rw-r--r--engine/src/data_types/color.rs1
-rw-r--r--engine/src/data_types/dimens.rs14
-rw-r--r--engine/src/data_types/matrix.rs2
-rw-r--r--engine/src/data_types/vector.rs25
4 files changed, 38 insertions, 4 deletions
diff --git a/engine/src/data_types/color.rs b/engine/src/data_types/color.rs
index cef3b92..c5316e6 100644
--- a/engine/src/data_types/color.rs
+++ b/engine/src/data_types/color.rs
@@ -1,7 +1,6 @@
use std::ops::{Add, Div, Mul, Neg, Sub};
#[derive(Debug, Clone, Default)]
-#[repr(C)]
pub struct Color<Value>
{
pub red: Value,
diff --git a/engine/src/data_types/dimens.rs b/engine/src/data_types/dimens.rs
index d8d0247..8bf239f 100644
--- a/engine/src/data_types/dimens.rs
+++ b/engine/src/data_types/dimens.rs
@@ -1,3 +1,5 @@
+use std::num::NonZeroU32;
+
/// 2D dimensions.
#[derive(Debug, Clone, Copy)]
pub struct Dimens<Value>
@@ -22,6 +24,18 @@ impl<Value> From<(Value, Value)> for Dimens<Value>
}
}
+impl Dimens<u32>
+{
+ #[must_use]
+ pub fn try_into_nonzero(self) -> Option<Dimens<NonZeroU32>>
+ {
+ Some(Dimens {
+ width: NonZeroU32::new(self.width)?,
+ height: NonZeroU32::new(self.height)?,
+ })
+ }
+}
+
/// 3D dimensions.
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct Dimens3<Value>
diff --git a/engine/src/data_types/matrix.rs b/engine/src/data_types/matrix.rs
index 3a29ae2..b754b62 100644
--- a/engine/src/data_types/matrix.rs
+++ b/engine/src/data_types/matrix.rs
@@ -4,7 +4,7 @@ use crate::vector::Vec3;
pub struct Matrix<Value, const ROWS: usize, const COLUMNS: usize>
{
/// Items must be layed out this way for it to work with OpenGL shaders.
- items: [[Value; ROWS]; COLUMNS],
+ pub items: [[Value; ROWS]; COLUMNS],
}
impl<Value, const ROWS: usize, const COLUMNS: usize> Matrix<Value, ROWS, COLUMNS>
diff --git a/engine/src/data_types/vector.rs b/engine/src/data_types/vector.rs
index 100c709..dc6df30 100644
--- a/engine/src/data_types/vector.rs
+++ b/engine/src/data_types/vector.rs
@@ -3,7 +3,6 @@ use std::ops::{Add, AddAssign, Div, Mul, Neg, Sub, SubAssign};
use crate::color::Color;
#[derive(Debug, Default, Clone, Copy, PartialEq)]
-#[repr(C)]
pub struct Vec2<Value>
{
pub x: Value,
@@ -15,6 +14,29 @@ impl Vec2<u32>
pub const ZERO: Self = Self { x: 0, y: 0 };
}
+impl<Value> Add for Vec2<Value>
+where
+ Value: Add<Value, Output = Value>,
+{
+ type Output = Self;
+
+ fn add(self, rhs: Self) -> Self::Output
+ {
+ Self::Output { x: self.x + rhs.x, y: self.y + rhs.y }
+ }
+}
+
+impl<Value> AddAssign for Vec2<Value>
+where
+ Value: Add<Value, Output = Value> + Clone,
+{
+ fn add_assign(&mut self, rhs: Self)
+ {
+ self.x = self.x.clone() + rhs.x;
+ self.y = self.y.clone() + rhs.y;
+ }
+}
+
impl<Value> Add<Value> for Vec2<Value>
where
Value: Add<Output = Value> + Clone,
@@ -76,7 +98,6 @@ where
}
#[derive(Debug, Default, Clone, Copy, PartialEq)]
-#[repr(C)]
pub struct Vec3<Value>
{
pub x: Value,