BsScriptEditorInput.cpp 5.5 KB

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