luaur_vm/functions/
luaopen_vector.rs1use crate::functions::createmetatable_lveclib::createmetatable;
5use crate::functions::lua_l_register::lua_l_register;
6use crate::functions::lua_pushvector_lapi::lua_pushvector_lua_state_f32_f32_f32_f32;
7use crate::functions::lua_pushvector_lapi_alt_b::lua_pushvector_lua_state_f32_f32_f32;
8use crate::functions::lua_setfield::lua_setfield;
9use crate::functions::vector_abs::vector_abs;
10use crate::functions::vector_angle::vector_angle;
11use crate::functions::vector_ceil::vector_ceil;
12use crate::functions::vector_clamp::vector_clamp;
13use crate::functions::vector_create::vector_create;
14use crate::functions::vector_cross::vector_cross;
15use crate::functions::vector_dot::vector_dot;
16use crate::functions::vector_floor::vector_floor;
17use crate::functions::vector_lerp::vector_lerp;
18use crate::functions::vector_magnitude::vector_magnitude;
19use crate::functions::vector_max::vector_max;
20use crate::functions::vector_min::vector_min;
21use crate::functions::vector_normalize::vector_normalize;
22use crate::functions::vector_sign::vector_sign;
23use crate::macros::lua_vector_size::LUA_VECTOR_SIZE;
24use crate::records::lua_l_reg::LuaLReg;
25use crate::type_aliases::lua_state::lua_State;
26
27struct VectorFuncs([LuaLReg; 15]);
28unsafe impl Sync for VectorFuncs {}
29
30static VECTOR_FUNCS: VectorFuncs = VectorFuncs([
31 LuaLReg {
32 name: c"create".as_ptr(),
33 func: Some(vector_create),
34 },
35 LuaLReg {
36 name: c"magnitude".as_ptr(),
37 func: Some(vector_magnitude),
38 },
39 LuaLReg {
40 name: c"normalize".as_ptr(),
41 func: Some(vector_normalize),
42 },
43 LuaLReg {
44 name: c"cross".as_ptr(),
45 func: Some(vector_cross),
46 },
47 LuaLReg {
48 name: c"dot".as_ptr(),
49 func: Some(vector_dot),
50 },
51 LuaLReg {
52 name: c"angle".as_ptr(),
53 func: Some(vector_angle),
54 },
55 LuaLReg {
56 name: c"floor".as_ptr(),
57 func: Some(vector_floor),
58 },
59 LuaLReg {
60 name: c"ceil".as_ptr(),
61 func: Some(vector_ceil),
62 },
63 LuaLReg {
64 name: c"abs".as_ptr(),
65 func: Some(vector_abs),
66 },
67 LuaLReg {
68 name: c"sign".as_ptr(),
69 func: Some(vector_sign),
70 },
71 LuaLReg {
72 name: c"clamp".as_ptr(),
73 func: Some(vector_clamp),
74 },
75 LuaLReg {
76 name: c"max".as_ptr(),
77 func: Some(vector_max),
78 },
79 LuaLReg {
80 name: c"min".as_ptr(),
81 func: Some(vector_min),
82 },
83 LuaLReg {
84 name: c"lerp".as_ptr(),
85 func: Some(vector_lerp),
86 },
87 LuaLReg {
88 name: core::ptr::null(),
89 func: None,
90 },
91]);
92
93#[allow(non_snake_case)]
94pub unsafe fn luaopen_vector(L: *mut lua_State) -> core::ffi::c_int {
95 lua_l_register(L, c"vector".as_ptr(), VECTOR_FUNCS.0.as_ptr());
96
97 if LUA_VECTOR_SIZE == 4 {
98 lua_pushvector_lua_state_f32_f32_f32_f32(L, 0.0, 0.0, 0.0, 0.0);
99 lua_setfield(L, -2, c"zero".as_ptr());
100 lua_pushvector_lua_state_f32_f32_f32_f32(L, 1.0, 1.0, 1.0, 1.0);
101 lua_setfield(L, -2, c"one".as_ptr());
102 } else {
103 lua_pushvector_lua_state_f32_f32_f32(L, 0.0, 0.0, 0.0);
104 lua_setfield(L, -2, c"zero".as_ptr());
105 lua_pushvector_lua_state_f32_f32_f32(L, 1.0, 1.0, 1.0);
106 lua_setfield(L, -2, c"one".as_ptr());
107 }
108
109 createmetatable(L);
110
111 1
112}