vec2.lua 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. local ffi = require("ffi")
  2. ffi.cdef
  3. [[
  4. typedef struct
  5. {
  6. float x;
  7. float y;
  8. }
  9. Vec2;
  10. Vec2& vec2(float nx, float ny);
  11. Vec2& vec2_add(Vec2& self, const Vec2& a);
  12. Vec2& vec2_subtract(Vec2& self, const Vec2& a);
  13. Vec2& vec2_multiply(Vec2& self, float k);
  14. Vec2& vec2_divide(Vec2& self, float k);
  15. float vec2_dot(Vec2& self, const Vec2& a);
  16. bool vec2_equals(Vec2& self, const Vec2& other);
  17. bool vec2_lower(Vec2& self, const Vec2& other);
  18. bool vec2_greater(Vec2& self, const Vec2& other);
  19. float vec2_length(Vec2& self);
  20. float vec2_squared_length(Vec2& self);
  21. void vec2_set_length(Vec2& self, float len);
  22. Vec2& vec2_normalize(Vec2& self);
  23. Vec2& vec2_negate(Vec2& self);
  24. float vec2_get_distance_to(Vec2& self, const Vec2& a);
  25. float vec2_get_angle_between(Vec2& self, const Vec2& a);
  26. void vec2_zero(Vec2& self);
  27. ]]
  28. Vec2 = {}
  29. Vec2.vec2 = lib.vec2
  30. Vec2.add = lib.vec2_add
  31. Vec2.subtract = lib.vec2_subtract
  32. Vec2.multiply = lib.vec2_multiply
  33. Vec2.divide = lib.vec2_divide
  34. Vec2.dot = lib.vec2_dot
  35. Vec2.equals = lib.vec2_equals
  36. Vec2.lower = lib.vec2_lower
  37. Vec2.greater = lib.vec2_greater
  38. Vec2.length = lib.vec2_length
  39. Vec2.squared_length = lib.vec2_squared_length
  40. Vec2.set_length = lib.vec2_set_length
  41. Vec2.normalize = lib.vec2_normalize
  42. Vec2.negate = lib.vec2_negate
  43. Vec2.get_distance_to = lib.vec2_get_distance_to
  44. Vec2.get_angle_between = lib.vec2_get_angle_between
  45. Vec2.zero = lib.vec2_zero