BsScriptEditorInput.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "BsScriptEditorInput.h"
  2. #include "BsMonoManager.h"
  3. #include "BsMonoClass.h"
  4. #include "BsMonoMethod.h"
  5. #include "BsMonoUtil.h"
  6. #include "BsDebug.h"
  7. #include "BsInput.h"
  8. #include "BsScriptVector2I.h"
  9. namespace BansheeEngine
  10. {
  11. ScriptEditorInput::OnButtonEventThunkDef ScriptEditorInput::OnButtonPressedThunk;
  12. ScriptEditorInput::OnButtonEventThunkDef ScriptEditorInput::OnButtonReleasedThunk;
  13. ScriptEditorInput::OnCharInputEventThunkDef ScriptEditorInput::OnCharInputThunk;
  14. ScriptEditorInput::OnPointerEventThunkDef ScriptEditorInput::OnPointerPressedThunk;
  15. ScriptEditorInput::OnPointerEventThunkDef ScriptEditorInput::OnPointerReleasedThunk;
  16. ScriptEditorInput::OnPointerEventThunkDef ScriptEditorInput::OnPointerMovedThunk;
  17. ScriptEditorInput::OnPointerEventThunkDef ScriptEditorInput::OnPointerDoubleClickThunk;
  18. HEvent ScriptEditorInput::OnButtonPressedConn;
  19. HEvent ScriptEditorInput::OnButtonReleasedConn;
  20. HEvent ScriptEditorInput::OnCharInputConn;
  21. HEvent ScriptEditorInput::OnPointerPressedConn;
  22. HEvent ScriptEditorInput::OnPointerReleasedConn;
  23. HEvent ScriptEditorInput::OnPointerMovedConn;
  24. HEvent ScriptEditorInput::OnPointerDoubleClickConn;
  25. ScriptEditorInput::ScriptEditorInput(MonoObject* instance)
  26. :ScriptObject(instance)
  27. { }
  28. void ScriptEditorInput::initRuntimeData()
  29. {
  30. OnButtonPressedThunk = (OnButtonEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerButtonDown", "ButtonCode,int")->getThunk();
  31. OnButtonReleasedThunk = (OnButtonEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerButtonUp", "ButtonCode,int")->getThunk();
  32. OnCharInputThunk = (OnCharInputEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerCharInput", "int")->getThunk();
  33. OnPointerPressedThunk = (OnPointerEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerPointerPressed", "Vector2I,Vector2I,PointerButton,bool,bool,bool,single")->getThunk();
  34. OnPointerReleasedThunk = (OnPointerEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerPointerReleased", "Vector2I,Vector2I,PointerButton,bool,bool,bool,single")->getThunk();
  35. OnPointerMovedThunk = (OnPointerEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerPointerMove", "Vector2I,Vector2I,PointerButton,bool,bool,bool,single")->getThunk();
  36. OnPointerDoubleClickThunk = (OnPointerEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerPointerDoubleClick", "Vector2I,Vector2I,PointerButton,bool,bool,bool,single")->getThunk();
  37. }
  38. void ScriptEditorInput::startUp()
  39. {
  40. Input& input = Input::instance();
  41. OnButtonPressedConn = input.onButtonDown.connect(&ScriptEditorInput::onButtonDown);
  42. OnButtonReleasedConn = input.onButtonUp.connect(&ScriptEditorInput::onButtonUp);
  43. OnCharInputConn = input.onCharInput.connect(&ScriptEditorInput::onCharInput);
  44. OnPointerPressedConn = input.onPointerPressed.connect(&ScriptEditorInput::onPointerPressed);
  45. OnPointerReleasedConn = input.onPointerReleased.connect(&ScriptEditorInput::onPointerReleased);
  46. OnPointerMovedConn = input.onPointerMoved.connect(&ScriptEditorInput::onPointerMoved);
  47. OnPointerDoubleClickConn = input.onPointerDoubleClick.connect(&ScriptEditorInput::onPointerDoubleClick);
  48. }
  49. void ScriptEditorInput::shutDown()
  50. {
  51. OnButtonPressedConn.disconnect();
  52. OnButtonReleasedConn.disconnect();
  53. OnCharInputConn.disconnect();
  54. OnPointerPressedConn.disconnect();
  55. OnPointerReleasedConn.disconnect();
  56. OnPointerMovedConn.disconnect();
  57. OnPointerDoubleClickConn.disconnect();
  58. }
  59. void ScriptEditorInput::onButtonDown(const ButtonEvent& ev)
  60. {
  61. MonoUtil::invokeThunk(OnButtonPressedThunk, ev.buttonCode, ev.deviceIdx);
  62. }
  63. void ScriptEditorInput::onButtonUp(const ButtonEvent& ev)
  64. {
  65. MonoUtil::invokeThunk(OnButtonReleasedThunk, ev.buttonCode, ev.deviceIdx);
  66. }
  67. void ScriptEditorInput::onCharInput(const TextInputEvent& ev)
  68. {
  69. MonoUtil::invokeThunk(OnCharInputThunk, ev.textChar);
  70. }
  71. void ScriptEditorInput::onPointerMoved(const PointerEvent& ev)
  72. {
  73. MonoObject* screenPos = ScriptVector2I::box(ev.screenPos);
  74. MonoObject* delta = ScriptVector2I::box(ev.delta);
  75. MonoUtil::invokeThunk(OnPointerMovedThunk, screenPos, delta,
  76. ev.button, ev.shift, ev.control, ev.alt, ev.mouseWheelScrollAmount);
  77. }
  78. void ScriptEditorInput::onPointerPressed(const PointerEvent& ev)
  79. {
  80. MonoObject* screenPos = ScriptVector2I::box(ev.screenPos);
  81. MonoObject* delta = ScriptVector2I::box(ev.delta);
  82. MonoUtil::invokeThunk(OnPointerPressedThunk, screenPos, delta,
  83. ev.button, ev.shift, ev.control, ev.alt, ev.mouseWheelScrollAmount);
  84. }
  85. void ScriptEditorInput::onPointerReleased(const PointerEvent& ev)
  86. {
  87. MonoObject* screenPos = ScriptVector2I::box(ev.screenPos);
  88. MonoObject* delta = ScriptVector2I::box(ev.delta);
  89. MonoUtil::invokeThunk(OnPointerReleasedThunk, screenPos, delta,
  90. ev.button, ev.shift, ev.control, ev.alt, ev.mouseWheelScrollAmount);
  91. }
  92. void ScriptEditorInput::onPointerDoubleClick(const PointerEvent& ev)
  93. {
  94. MonoObject* screenPos = ScriptVector2I::box(ev.screenPos);
  95. MonoObject* delta = ScriptVector2I::box(ev.delta);
  96. MonoUtil::invokeThunk(OnPointerDoubleClickThunk, screenPos, delta,
  97. ev.button, ev.shift, ev.control, ev.alt, ev.mouseWheelScrollAmount);
  98. }
  99. }