aboutsummaryrefslogtreecommitdiff
path: root/src/classes/vectors.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/classes/vectors.rs')
-rw-r--r--src/classes/vectors.rs44
1 files changed, 38 insertions, 6 deletions
diff --git a/src/classes/vectors.rs b/src/classes/vectors.rs
index 76760bc..14c5a59 100644
--- a/src/classes/vectors.rs
+++ b/src/classes/vectors.rs
@@ -1,14 +1,46 @@
use crate::object::{Value, parser::FromValue};
-use glam::{Mat4, Quat, Vec3};
+use glam::{Mat4, Quat, Vec2, Vec3, Vec4};
+use serde::Serialize;
+impl FromValue for Vec2 {
+ fn from_value(v: Value) -> anyhow::Result<Self> {
+ let mut fields = v.as_class("Vector2f").unwrap();
+ Ok(Self::new(fields.field("x")?, fields.field("y")?))
+ }
+}
impl FromValue for Vec3 {
fn from_value(v: Value) -> anyhow::Result<Self> {
let mut fields = v.as_class("Vector3f").unwrap();
- Ok(Self {
- x: fields.field("x")?,
- y: fields.field("y")?,
- z: fields.field("z")?,
- })
+ Ok(Self::new(
+ fields.field("x")?,
+ fields.field("y")?,
+ fields.field("z")?,
+ ))
+ }
+}
+impl FromValue for Vec4 {
+ fn from_value(v: Value) -> anyhow::Result<Self> {
+ let mut fields = v.as_class("Vector4f")?;
+ Ok(Self::new(
+ fields.field("x")?,
+ fields.field("y")?,
+ fields.field("z")?,
+ fields.field("w")?,
+ ))
+ }
+}
+
+#[derive(Debug, Serialize)]
+pub struct ColorRGBA(pub Vec4);
+impl FromValue for ColorRGBA {
+ fn from_value(v: Value) -> anyhow::Result<Self> {
+ let mut fields = v.as_class("ColorRGBA")?;
+ Ok(ColorRGBA(Vec4::new(
+ fields.field("r")?,
+ fields.field("g")?,
+ fields.field("b")?,
+ fields.field("a")?,
+ )))
}
}