3 releases (breaking)
0.3.0 | Jun 10, 2022 |
---|---|
0.2.0 | Jun 3, 2022 |
0.1.0 | Apr 27, 2022 |
#22 in #legacy
40KB
1K
SLoC
ManyVecs
A library providing Vector structs inspired by GLSL. These are useful for working with coordinates, geometry, game development, and more. Some features include:
- In-depth unit testing
- Support of component operators (addition, subtraction, etc.)
- Useful methods, like magnitude and normalization
This is not related to the standard library Vec
type.
Try it out!
use manyvecs::legacy::Vec2;
// Vec2 stores two numbers, X and Y
let v = Vec2::<f32>::new(2.0, -0.5);
println!("{}, {}", v.x(), v.y());
// "2.0, -0.5"
// Operators work on vectors!
// They are applied componenet-wise.
println!("{}", v + 1.0);
// "Vec2(3.0, 0.5)"
// You can even create vecs from tuples
Vec2::from((2.0, 3.0));
These are just a few examples, you can find the complete documentation at docs.rs.
Features
Versions 0.1.0 and 0.2.0 use a generic-based struct for its vectors. Version 0.3.0 onwards is introducing a macro-based struct. This is a breaking change, which is why you can configure these changes with features.
Note: In 1.0.0, generic-based vectors will be removed entirely.
Feature | Description |
---|---|
legacy |
The legacy feature enables generic-based vectors. It is toggled on by default for backward compatability. |
macroed |
The macroed feature enables macro-based vectors. It is toggled off by default. |
To enable macro-based vectors, include the following in your Cargo.toml
.
[dependencies]
manyvecs = { version = "~0.Y.Z", features = ["macroed"] }
To enable just the macro vector, include the following instead.
[dependencies]
manyvecs = { version = "~0.Y.Z", default-features = false, features = ["macroed"] }
Exporting Content
The macroed and legacy features are designed to work side-by-side. Each have their own public module. If just legacy is enabled and not macroed, the contents of the legacy module will be exported to the root of the crate. Take a look at the following code in lib.rs
.
#[cfg(feature = "legacy")]
#[cfg(not(feature = "macroed"))]
pub use self::legacy::*;
The same applies for using just macroed and not legacy. This is important if you know you will not be using the other feature, as you can just use manyvecs::Vec2
instead of manyvecs::macroed::Vec2
.
Stability Notice
This library is currently unstable. It is recommended that you only allow patches in your dependency on ManyVecs.
# Cargo.toml
[dependencies]
manyvecs = "~0.Y.Z"
See more about the tilde requirement here.
License
ManyVecs is developed and distributed under the MIT license.
Contributing
Contributions are welcome! This is my (BD103's) first Rust crate ever published, so there is definitely room to improve.
Unless explicitly stated, any contribution intentionally submitted for inclusion to this project will be licensed as above, without any additional terms or conditions.
Dependencies
~38KB