Nasal-Interpreter/module/libmat.nas

62 lines
2.4 KiB
Plaintext

var libmat=func(){
var dl=dylib.dlopen("libmat."~(os.platform()=="windows"?"dll":"so"));
var vec2=dl.nas_vec2;
var vec3=dl.nas_vec3;
var (vec2add,vec2sub,vec2mul,vec2div,vec2neg,vec2norm,vec2len,vec2dot)=(
dl.nas_vec2_add,
dl.nas_vec2_sub,
dl.nas_vec2_mult,
dl.nas_vec2_div,
dl.nas_vec2_neg,
dl.nas_vec2_norm,
dl.nas_vec2_len,
dl.nas_vec2_dot
);
var (vec3add,vec3sub,vec3mul,vec3div,vec3neg,vec3norm,vec3len,vec3dot)=(
dl.nas_vec3_add,
dl.nas_vec3_sub,
dl.nas_vec3_mult,
dl.nas_vec3_div,
dl.nas_vec3_neg,
dl.nas_vec3_norm,
dl.nas_vec3_len,
dl.nas_vec3_dot
);
var (rotate_x,rotate_y,rotate_z)=(
dl.nas_rotate_x,
dl.nas_rotate_y,
dl.nas_rotate_z
);
var (invoke_i,invoke_ii,invoke_iii)=(
dylib.limitcall(1),
dylib.limitcall(2),
dylib.limitcall(3)
);
return {
vec2:{
new: func(x,y){return invoke_ii(vec2,x,y);},
add: func(v0,v1){return invoke_ii(vec2add,v0,v1);},
sub: func(v0,v1){return invoke_ii(vec2sub,v0,v1);},
mul: func(v0,v1){return invoke_ii(vec2mul,v0,v1);},
div: func(v0,v1){return invoke_ii(vec2div,v0,v1);},
neg: func(v0){return invoke_i(vec2neg,v0);},
norm: func(v0){return invoke_i(vec2norm,v0);},
len: func(v0){return invoke_i(vec2len,v0);},
dot: func(v0,v1){return invoke_ii(vec2dot,v0,v1);}
},
vec3:{
new: func(x,y,z){return invoke_iii(vec3,x,y,z);},
add: func(v0,v1){return invoke_ii(vec3add,v0,v1);},
sub: func(v0,v1){return invoke_ii(vec3sub,v0,v1);},
mul: func(v0,v1){return invoke_ii(vec3mul,v0,v1);},
div: func(v0,v1){return invoke_ii(vec3div,v0,v1);},
neg: func(v0){return invoke_i(vec3neg,v0);},
norm: func(v0){return invoke_i(vec3norm,v0);},
len: func(v0){return invoke_i(vec3len,v0);},
rx: func(v0,angle){return invoke_ii(rotate_x,v0,angle);},
ry: func(v0,angle){return invoke_ii(rotate_y,v0,angle);},
rz: func(v0,angle){return invoke_ii(rotate_z,v0,angle);},
dot: func(v0,v1){return invoke_ii(vec3dot,v0,v1);}
}
};
}();