Skip to main content

classicube_sys\vectors/
mod.rs

1mod ivec;
2mod matrix;
3mod vec;
4
5pub use self::{ivec::*, matrix::*, vec::*};
6use crate::{
7    bindings::{Math_Cos, Math_Sin},
8    std_types::c_double,
9};
10
11/// Sets the x, y, and z components of a 3D vector
12#[macro_export]
13macro_rules! Vec3_Set {
14    ($v:expr, $x:expr, $y:expr, $z:expr) => {
15        $v.x = $x;
16        $v.y = $y;
17        $v.z = $z;
18    };
19}
20
21/// Whether all components of a 3D vector are 0
22#[macro_export]
23macro_rules! Vec3_IsZero {
24    ($v:expr) => {
25        #[allow(clippy::float_cmp, clippy::cast_precision_loss)]
26        {
27            $v.x == 0 as _ && $v.y == 0 as _ && $v.z == 0 as _
28        }
29    };
30}
31
32#[macro_export]
33macro_rules! Vec3_AddBy {
34    ($dst:expr, $value:expr) => {
35        $crate::Vec3_Add($dst, $dst, $value)
36    };
37}
38
39#[macro_export]
40macro_rules! Vec3_SubBy {
41    ($dst:expr, $value:expr) => {
42        $crate::Vec3_Sub($dst, $dst, $value)
43    };
44}
45
46#[macro_export]
47macro_rules! Vec3_Mul1By {
48    ($dst:expr, $value:expr) => {
49        $crate::Vec3_Mul1($dst, $dst, $value)
50    };
51}
52
53#[macro_export]
54macro_rules! Vec3_Mul3By {
55    ($dst:expr, $value:expr) => {
56        $crate::Vec3_Mul3($dst, $dst, $value)
57    };
58}
59
60#[must_use]
61pub fn Tan_Simple(x: c_double) -> c_double {
62    unsafe { Math_Sin(x) / Math_Cos(x) }
63}