deriving Encodable, Decodable for all structs
This commit is contained in:
parent
eaba571886
commit
825f5f2975
17 changed files with 31 additions and 25 deletions
|
@ -84,7 +84,7 @@ pub trait Aabb<S: BaseNum, V: Vector<S>, P: Point<S, V>> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A two-dimensional AABB, aka a rectangle.
|
/// A two-dimensional AABB, aka a rectangle.
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Aabb2<S> {
|
pub struct Aabb2<S> {
|
||||||
pub min: Point2<S>,
|
pub min: Point2<S>,
|
||||||
pub max: Point2<S>,
|
pub max: Point2<S>,
|
||||||
|
@ -129,7 +129,7 @@ impl<S: BaseNum> fmt::Show for Aabb2<S> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A three-dimensional AABB, aka a rectangular prism.
|
/// A three-dimensional AABB, aka a rectangular prism.
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Aabb3<S> {
|
pub struct Aabb3<S> {
|
||||||
pub min: Point3<S>,
|
pub min: Point3<S>,
|
||||||
pub max: Point3<S>,
|
pub max: Point3<S>,
|
||||||
|
|
|
@ -22,9 +22,11 @@ use approx::ApproxEq;
|
||||||
use num::BaseFloat;
|
use num::BaseFloat;
|
||||||
|
|
||||||
/// An angle, in radians
|
/// An angle, in radians
|
||||||
#[deriving(Clone, PartialEq, PartialOrd, Hash)] pub struct Rad<S> { pub s: S }
|
#[deriving(Clone, PartialEq, PartialOrd, Hash, Encodable, Decodable)]
|
||||||
|
pub struct Rad<S> { pub s: S }
|
||||||
/// An angle, in degrees
|
/// An angle, in degrees
|
||||||
#[deriving(Clone, PartialEq, PartialOrd, Hash)] pub struct Deg<S> { pub s: S }
|
#[deriving(Clone, PartialEq, PartialOrd, Hash, Encodable, Decodable)]
|
||||||
|
pub struct Deg<S> { pub s: S }
|
||||||
|
|
||||||
/// Create a new angle, in radians
|
/// Create a new angle, in radians
|
||||||
#[inline] pub fn rad<S: BaseFloat>(s: S) -> Rad<S> { Rad { s: s } }
|
#[inline] pub fn rad<S: BaseFloat>(s: S) -> Rad<S> { Rad { s: s } }
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
//! `look_at`, `from_angle`, `from_euler`, and `from_axis_angle` methods.
|
//! `look_at`, `from_angle`, `from_euler`, and `from_axis_angle` methods.
|
||||||
//! These are provided for convenience.
|
//! These are provided for convenience.
|
||||||
|
|
||||||
|
extern crate serialize;
|
||||||
|
|
||||||
// Re-exports
|
// Re-exports
|
||||||
|
|
||||||
pub use array::{Array1, Array2, FixedArray};
|
pub use array::{Array1, Array2, FixedArray};
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
use point::Point3;
|
use point::Point3;
|
||||||
use vector::Vector3;
|
use vector::Vector3;
|
||||||
|
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Cylinder<S> {
|
pub struct Cylinder<S> {
|
||||||
pub center: Point3<S>,
|
pub center: Point3<S>,
|
||||||
pub axis: Vector3<S>,
|
pub axis: Vector3<S>,
|
||||||
|
|
|
@ -22,7 +22,7 @@ use plane::Plane;
|
||||||
use point::Point3;
|
use point::Point3;
|
||||||
use vector::{Vector, EuclideanVector};
|
use vector::{Vector, EuclideanVector};
|
||||||
|
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Frustum<S> {
|
pub struct Frustum<S> {
|
||||||
pub left: Plane<S>,
|
pub left: Plane<S>,
|
||||||
pub right: Plane<S>,
|
pub right: Plane<S>,
|
||||||
|
@ -59,7 +59,7 @@ Frustum<S> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct FrustumPoints<S> {
|
pub struct FrustumPoints<S> {
|
||||||
pub near_top_left: Point3<S>,
|
pub near_top_left: Point3<S>,
|
||||||
pub near_top_right: Point3<S>,
|
pub near_top_right: Point3<S>,
|
||||||
|
|
|
@ -24,7 +24,7 @@ use ray::{Ray2};
|
||||||
use intersect::Intersect;
|
use intersect::Intersect;
|
||||||
|
|
||||||
/// A generic directed line segment from `origin` to `dest`.
|
/// A generic directed line segment from `origin` to `dest`.
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Line<P> {
|
pub struct Line<P> {
|
||||||
pub origin: P,
|
pub origin: P,
|
||||||
pub dest: P,
|
pub dest: P,
|
||||||
|
|
|
@ -29,15 +29,15 @@ use vector::{Vector, EuclideanVector};
|
||||||
use vector::{Vector2, Vector3, Vector4};
|
use vector::{Vector2, Vector3, Vector4};
|
||||||
|
|
||||||
/// A 2 x 2, column major matrix
|
/// A 2 x 2, column major matrix
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Matrix2<S> { pub x: Vector2<S>, pub y: Vector2<S> }
|
pub struct Matrix2<S> { pub x: Vector2<S>, pub y: Vector2<S> }
|
||||||
|
|
||||||
/// A 3 x 3, column major matrix
|
/// A 3 x 3, column major matrix
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Matrix3<S> { pub x: Vector3<S>, pub y: Vector3<S>, pub z: Vector3<S> }
|
pub struct Matrix3<S> { pub x: Vector3<S>, pub y: Vector3<S>, pub z: Vector3<S> }
|
||||||
|
|
||||||
/// A 4 x 4, column major matrix
|
/// A 4 x 4, column major matrix
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Matrix4<S> { pub x: Vector4<S>, pub y: Vector4<S>, pub z: Vector4<S>, pub w: Vector4<S> }
|
pub struct Matrix4<S> { pub x: Vector4<S>, pub y: Vector4<S>, pub z: Vector4<S>, pub w: Vector4<S> }
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,14 +18,14 @@
|
||||||
use point::{Point2, Point3};
|
use point::{Point2, Point3};
|
||||||
use vector::{Vector2, Vector3};
|
use vector::{Vector2, Vector3};
|
||||||
|
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Obb2<S> {
|
pub struct Obb2<S> {
|
||||||
pub center: Point2<S>,
|
pub center: Point2<S>,
|
||||||
pub axis: Vector2<S>,
|
pub axis: Vector2<S>,
|
||||||
pub extents: Vector2<S>,
|
pub extents: Vector2<S>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Obb3<S> {
|
pub struct Obb3<S> {
|
||||||
pub center: Point3<S>,
|
pub center: Point3<S>,
|
||||||
pub axis: Vector3<S>,
|
pub axis: Vector3<S>,
|
||||||
|
|
|
@ -40,7 +40,7 @@ use vector::{Vector, EuclideanVector};
|
||||||
/// The `A*x + B*y + C*z - D = 0` form is preferred over the other common
|
/// The `A*x + B*y + C*z - D = 0` form is preferred over the other common
|
||||||
/// alternative, `A*x + B*y + C*z + D = 0`, because it tends to avoid
|
/// alternative, `A*x + B*y + C*z + D = 0`, because it tends to avoid
|
||||||
/// superfluous negations (see _Real Time Collision Detection_, p. 55).
|
/// superfluous negations (see _Real Time Collision Detection_, p. 55).
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Plane<S> {
|
pub struct Plane<S> {
|
||||||
pub n: Vector3<S>,
|
pub n: Vector3<S>,
|
||||||
pub d: S,
|
pub d: S,
|
||||||
|
|
|
@ -27,11 +27,11 @@ use num::{BaseNum, BaseFloat};
|
||||||
use vector::*;
|
use vector::*;
|
||||||
|
|
||||||
/// A point in 2-dimensional space.
|
/// A point in 2-dimensional space.
|
||||||
#[deriving(PartialEq, Clone, Hash)]
|
#[deriving(PartialEq, Clone, Hash, Encodable, Decodable)]
|
||||||
pub struct Point2<S> { pub x: S, pub y: S }
|
pub struct Point2<S> { pub x: S, pub y: S }
|
||||||
|
|
||||||
/// A point in 3-dimensional space.
|
/// A point in 3-dimensional space.
|
||||||
#[deriving(PartialEq, Clone, Hash)]
|
#[deriving(PartialEq, Clone, Hash, Encodable, Decodable)]
|
||||||
pub struct Point3<S> { pub x: S, pub y: S, pub z: S }
|
pub struct Point3<S> { pub x: S, pub y: S, pub z: S }
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ pub trait Projection<S>: ToMatrix4<S> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A perspective projection based on a vertical field-of-view angle.
|
/// A perspective projection based on a vertical field-of-view angle.
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct PerspectiveFov<S, A> {
|
pub struct PerspectiveFov<S, A> {
|
||||||
pub fovy: A,
|
pub fovy: A,
|
||||||
pub aspect: S,
|
pub aspect: S,
|
||||||
|
@ -143,7 +143,7 @@ impl<S: BaseFloat, A: Angle<S>> ToMatrix4<S> for PerspectiveFov<S, A> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A perspective projection with arbitrary left/right/bottom/top distances
|
/// A perspective projection with arbitrary left/right/bottom/top distances
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Perspective<S> {
|
pub struct Perspective<S> {
|
||||||
pub left: S, right: S,
|
pub left: S, right: S,
|
||||||
pub bottom: S, top: S,
|
pub bottom: S, top: S,
|
||||||
|
@ -193,7 +193,7 @@ impl<S: BaseFloat> ToMatrix4<S> for Perspective<S> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An orthographic projection with arbitrary left/right/bottom/top distances
|
/// An orthographic projection with arbitrary left/right/bottom/top distances
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Ortho<S> {
|
pub struct Ortho<S> {
|
||||||
pub left: S, right: S,
|
pub left: S, right: S,
|
||||||
pub bottom: S, top: S,
|
pub bottom: S, top: S,
|
||||||
|
|
|
@ -28,7 +28,7 @@ use vector::{Vector3, Vector, EuclideanVector};
|
||||||
|
|
||||||
/// A [quaternion](https://en.wikipedia.org/wiki/Quaternion) in scalar/vector
|
/// A [quaternion](https://en.wikipedia.org/wiki/Quaternion) in scalar/vector
|
||||||
/// form.
|
/// form.
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Quaternion<S> { pub s: S, pub v: Vector3<S> }
|
pub struct Quaternion<S> { pub s: S, pub v: Vector3<S> }
|
||||||
|
|
||||||
/// Represents types which can be expressed as a quaternion.
|
/// Represents types which can be expressed as a quaternion.
|
||||||
|
|
|
@ -19,7 +19,7 @@ use vector::{Vector, Vector2, Vector3};
|
||||||
|
|
||||||
/// A generic ray starting at `origin` and extending infinitely in
|
/// A generic ray starting at `origin` and extending infinitely in
|
||||||
/// `direction`.
|
/// `direction`.
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Ray<P,V> {
|
pub struct Ray<P,V> {
|
||||||
pub origin: P,
|
pub origin: P,
|
||||||
pub direction: V,
|
pub direction: V,
|
||||||
|
|
|
@ -160,7 +160,7 @@ pub trait Rotation3<S: BaseNum>: Rotation<S, Vector3<S>, Point3<S>>
|
||||||
/// let unit_y3 = rot_half.concat(&rot_half).rotate_vector(&unit_x);
|
/// let unit_y3 = rot_half.concat(&rot_half).rotate_vector(&unit_x);
|
||||||
/// assert!(unit_y3.approx_eq(&unit_y2));
|
/// assert!(unit_y3.approx_eq(&unit_y2));
|
||||||
/// ```
|
/// ```
|
||||||
#[deriving(PartialEq, Clone)]
|
#[deriving(PartialEq, Clone, Encodable, Decodable)]
|
||||||
pub struct Basis2<S> {
|
pub struct Basis2<S> {
|
||||||
mat: Matrix2<S>
|
mat: Matrix2<S>
|
||||||
}
|
}
|
||||||
|
@ -238,7 +238,7 @@ impl<S: BaseFloat> Rotation2<S> for Basis2<S> {
|
||||||
/// inversion, can be implemented more efficiently than the implementations for
|
/// inversion, can be implemented more efficiently than the implementations for
|
||||||
/// `math::Matrix3`. To ensure orthogonality is maintained, the operations have
|
/// `math::Matrix3`. To ensure orthogonality is maintained, the operations have
|
||||||
/// been restricted to a subeset of those implemented on `Matrix3`.
|
/// been restricted to a subeset of those implemented on `Matrix3`.
|
||||||
#[deriving(PartialEq, Clone)]
|
#[deriving(PartialEq, Clone, Encodable, Decodable)]
|
||||||
pub struct Basis3<S> {
|
pub struct Basis3<S> {
|
||||||
mat: Matrix3<S>
|
mat: Matrix3<S>
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ use vector::Vector;
|
||||||
|
|
||||||
use std::num::zero;
|
use std::num::zero;
|
||||||
|
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq, Encodable, Decodable)]
|
||||||
pub struct Sphere<S> {
|
pub struct Sphere<S> {
|
||||||
pub center: Point3<S>,
|
pub center: Point3<S>,
|
||||||
pub radius: S,
|
pub radius: S,
|
||||||
|
|
|
@ -76,6 +76,7 @@ pub trait Transform<S: BaseNum, V: Vector<S>, P: Point<S,V>> {
|
||||||
|
|
||||||
/// A generic transformation consisting of a rotation,
|
/// A generic transformation consisting of a rotation,
|
||||||
/// displacement vector and scale amount.
|
/// displacement vector and scale amount.
|
||||||
|
#[deriving(Encodable, Decodable)]
|
||||||
pub struct Decomposed<S, V, R> {
|
pub struct Decomposed<S, V, R> {
|
||||||
pub scale: S,
|
pub scale: S,
|
||||||
pub rot: R,
|
pub rot: R,
|
||||||
|
@ -158,6 +159,7 @@ impl<S: BaseFloat, R: fmt::Show + Rotation3<S>> fmt::Show for Decomposed<S,Vecto
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A homogeneous transformation matrix.
|
/// A homogeneous transformation matrix.
|
||||||
|
#[deriving(Encodable, Decodable)]
|
||||||
pub struct AffineMatrix3<S> {
|
pub struct AffineMatrix3<S> {
|
||||||
pub mat: Matrix4<S>,
|
pub mat: Matrix4<S>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,7 +183,7 @@ pub trait Vector<S: BaseNum>: Array1<S>
|
||||||
// Utility macro for generating associated functions for the vectors
|
// Utility macro for generating associated functions for the vectors
|
||||||
macro_rules! vec(
|
macro_rules! vec(
|
||||||
($Self:ident <$S:ident> { $($field:ident),+ }, $n:expr) => (
|
($Self:ident <$S:ident> { $($field:ident),+ }, $n:expr) => (
|
||||||
#[deriving(PartialEq, Eq, Clone, Hash)]
|
#[deriving(PartialEq, Eq, Clone, Hash, Encodable, Decodable)]
|
||||||
pub struct $Self<S> { $(pub $field: S),+ }
|
pub struct $Self<S> { $(pub $field: S),+ }
|
||||||
|
|
||||||
impl<$S> $Self<$S> {
|
impl<$S> $Self<$S> {
|
||||||
|
|
Loading…
Reference in a new issue