/Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.h

https://github.com/multitheftauto/mtasa-blue · C Header · 92 lines · 72 code · 9 blank · 11 comment · 0 complexity · 4fbfec3c82e5070b7bf08e01076fe50a MD5 · raw file

  1. /*****************************************************************************
  2. *
  3. * PROJECT: Multi Theft Auto
  4. * LICENSE: See LICENSE in the top level directory
  5. * FILE: mods/shared_logic/luadefs/CLuaDrawingDefs.cpp
  6. * PURPOSE: Lua drawing definitions class
  7. *
  8. * Multi Theft Auto is available from http://www.multitheftauto.com/
  9. *
  10. *****************************************************************************/
  11. #pragma once
  12. #include <optional>
  13. #include <variant>
  14. #include <utility>
  15. #include <optional>
  16. class CLuaDrawingDefs : public CLuaDefs
  17. {
  18. public:
  19. static void LoadFunctions();
  20. static void AddClass(lua_State* luaVM);
  21. LUA_DECLARE(DxDrawLine);
  22. LUA_DECLARE(DxDrawLine3D);
  23. LUA_DECLARE(DxDrawMaterialLine3D);
  24. LUA_DECLARE(DxDrawMaterialSectionLine3D);
  25. LUA_DECLARE(DxDrawText);
  26. LUA_DECLARE(DxDrawRectangle);
  27. LUA_DECLARE(DxDrawCircle);
  28. LUA_DECLARE(DxDrawImage);
  29. LUA_DECLARE(DxDrawImageSection);
  30. LUA_DECLARE(DxDrawPrimitive);
  31. LUA_DECLARE(DxDrawMaterialPrimitive);
  32. LUA_DECLARE(DxDrawPrimitive3D);
  33. LUA_DECLARE(DxDrawMaterialPrimitive3D);
  34. static CVector2D OOP_DxGetTextSize(
  35. // font can be called with a std::nullopt to grab the FONT_DEFAULT, see DxGetTextSize
  36. std::variant<CClientDxFont*, eFontType> font, const std::string text, const std::optional<float> optWidth,
  37. const std::optional<std::variant<CVector2D, float>> optScaleXY, const std::optional<bool> optWordBreak, const std::optional<bool> optColorCoded);
  38. static inline std::tuple<float, float> DxGetTextSize(std::string text, std::optional<float> optWidth,
  39. std::optional<std::variant<CVector2D, float>> optScaleXY,
  40. std::optional<std::variant<CClientDxFont*, eFontType>> optFont, std::optional<bool> optWordBreak,
  41. std::optional<bool> optColorCoded)
  42. {
  43. const auto size = OOP_DxGetTextSize(std::move(optFont.value_or(FONT_DEFAULT)), std::move(text), std::move(optWidth), std::move(optScaleXY),
  44. std::move(optWordBreak), std::move(optColorCoded));
  45. return {size.fX, size.fY};
  46. };
  47. LUA_DECLARE_OOP(DxGetTextWidth);
  48. LUA_DECLARE_OOP(DxGetFontHeight);
  49. LUA_DECLARE(DxCreateFont);
  50. LUA_DECLARE(DxCreateTexture);
  51. LUA_DECLARE(DxCreateShader);
  52. LUA_DECLARE(DxCreateRenderTarget);
  53. LUA_DECLARE(DxCreateScreenSource);
  54. LUA_DECLARE(DxGetMaterialSize);
  55. LUA_DECLARE(DxSetShaderValue);
  56. LUA_DECLARE(DxSetShaderTessellation);
  57. LUA_DECLARE(DxSetShaderTransform);
  58. LUA_DECLARE(DxSetRenderTarget);
  59. LUA_DECLARE(DxUpdateScreenSource);
  60. LUA_DECLARE(DxGetStatus);
  61. LUA_DECLARE(DxSetTestMode);
  62. LUA_DECLARE(DxGetTexturePixels);
  63. LUA_DECLARE(DxSetTexturePixels);
  64. LUA_DECLARE(DxGetPixelsSize);
  65. LUA_DECLARE(DxGetPixelsFormat);
  66. LUA_DECLARE(DxConvertPixels);
  67. LUA_DECLARE(DxGetPixelColor);
  68. LUA_DECLARE(DxSetPixelColor);
  69. LUA_DECLARE(DxSetBlendMode);
  70. LUA_DECLARE(DxGetBlendMode);
  71. LUA_DECLARE(DxSetAspectRatioAdjustmentEnabled);
  72. LUA_DECLARE(DxIsAspectRatioAdjustmentEnabled);
  73. LUA_DECLARE(DxSetTextureEdge);
  74. static bool DxDrawWiredSphere(lua_State* const luaVM, const CVector position, const float radius, const std::optional<SColor> color,
  75. const std::optional<float> lineWidth, const std::optional<unsigned int> iterations);
  76. private:
  77. static void AddDxMaterialClass(lua_State* luaVM);
  78. static void AddDxTextureClass(lua_State* luaVM);
  79. static void AddDxFontClass(lua_State* luaVM);
  80. static void AddDxShaderClass(lua_State* luaVM);
  81. static void AddDxScreenSourceClass(lua_State* luaVM);
  82. static void AddDxRenderTargetClass(lua_State* luaVM);
  83. };