MathBinds.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. #include "MathUtils.h"
  2. #include "LuaStack.h"
  3. #include "LuaEnvironment.h"
  4. namespace crown
  5. {
  6. extern "C"
  7. {
  8. int32_t math_deg_to_rad(lua_State* L)
  9. {
  10. LuaStack stack(L);
  11. float deg = stack.get_float(1);
  12. stack.push_float(math::deg_to_rad(deg));
  13. return 1;
  14. }
  15. int32_t math_rad_to_deg(lua_State* L)
  16. {
  17. LuaStack stack(L);
  18. float rad = stack.get_float(1);
  19. stack.push_float(math::rad_to_deg(rad));
  20. return 1;
  21. }
  22. int32_t math_next_pow_2(lua_State* L)
  23. {
  24. LuaStack stack(L);
  25. uint32_t x = stack.get_int(1);
  26. stack.push_int(math::next_pow_2(x));
  27. return 1;
  28. }
  29. int32_t math_is_pow_2(lua_State* L)
  30. {
  31. LuaStack stack(L);
  32. uint32_t x = stack.get_int(1);
  33. stack.push_bool(math::is_pow_2(x));
  34. return 1;
  35. }
  36. int32_t math_ceil(lua_State* L)
  37. {
  38. LuaStack stack(L);
  39. float x = stack.get_float(1);
  40. stack.push_float(math::ceil(x));
  41. return 1;
  42. }
  43. int32_t math_floor(lua_State* L)
  44. {
  45. LuaStack stack(L);
  46. float x = stack.get_float(1);
  47. stack.push_float(math::floor(x));
  48. return 1;
  49. }
  50. int32_t math_sqrt(lua_State* L)
  51. {
  52. LuaStack stack(L);
  53. float x = stack.get_float(1);
  54. stack.push_float(math::sqrt(x));
  55. return 1;
  56. }
  57. int32_t math_inv_sqrt(lua_State* L)
  58. {
  59. LuaStack stack(L);
  60. float x = stack.get_float(1);
  61. stack.push_float(math::inv_sqrt(x));
  62. return 1;
  63. }
  64. int32_t math_sin(lua_State* L)
  65. {
  66. LuaStack stack(L);
  67. float x = stack.get_float(1);
  68. stack.push_float(math::sin(x));
  69. return 1;
  70. }
  71. int32_t math_cos(lua_State* L)
  72. {
  73. LuaStack stack(L);
  74. float x = stack.get_float(1);
  75. stack.push_float(math::cos(x));
  76. return 1;
  77. }
  78. int32_t math_asin(lua_State* L)
  79. {
  80. LuaStack stack(L);
  81. float x = stack.get_float(1);
  82. stack.push_float(math::asin(x));
  83. return 1;
  84. }
  85. int32_t math_acos(lua_State* L)
  86. {
  87. LuaStack stack(L);
  88. float x = stack.get_float(1);
  89. stack.push_float(math::acos(x));
  90. return 1;
  91. }
  92. int32_t math_tan(lua_State* L)
  93. {
  94. LuaStack stack(L);
  95. float x = stack.get_float(1);
  96. stack.push_float(math::tan(x));
  97. return 1;
  98. }
  99. int32_t math_atan2(lua_State* L)
  100. {
  101. LuaStack stack(L);
  102. float x = stack.get_float(1);
  103. float y = stack.get_float(2);
  104. stack.push_float(math::atan2(x, y));
  105. return 1;
  106. }
  107. int32_t math_abs(lua_State* L)
  108. {
  109. LuaStack stack(L);
  110. float x = stack.get_float(1);
  111. stack.push_float(math::abs(x));
  112. return 1;
  113. }
  114. int32_t math_fmod(lua_State* L)
  115. {
  116. LuaStack stack(L);
  117. float x = stack.get_float(1);
  118. float y = stack.get_float(2);
  119. stack.push_float(math::fmod(x, y));
  120. return 1;
  121. }
  122. } // extern "C"
  123. void load_math(LuaEnvironment& env)
  124. {
  125. env.load_module_function("Math", "deg_to_rad", math_deg_to_rad);
  126. env.load_module_function("Math", "rad_to_deg", math_rad_to_deg);
  127. env.load_module_function("Math", "next_pow_2", math_next_pow_2);
  128. env.load_module_function("Math", "is_pow_2", math_is_pow_2);
  129. env.load_module_function("Math", "ceil", math_ceil);
  130. env.load_module_function("Math", "floor", math_floor);
  131. env.load_module_function("Math", "sqrt", math_sqrt);
  132. env.load_module_function("Math", "inv_sqrt", math_inv_sqrt);
  133. env.load_module_function("Math", "sin", math_sin);
  134. env.load_module_function("Math", "cos", math_cos);
  135. env.load_module_function("Math", "asin", math_asin);
  136. env.load_module_function("Math", "acos", math_acos);
  137. env.load_module_function("Math", "tan", math_tan);
  138. env.load_module_function("Math", "atan2", math_atan2);
  139. env.load_module_function("Math", "abs", math_abs);
  140. env.load_module_function("Math", "fmod", math_fmod);
  141. }
  142. } // namespace crown