BsScriptEditorVirtualInput.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "BsScriptEditorVirtualInput.h"
  2. #include "BsMonoManager.h"
  3. #include "BsMonoClass.h"
  4. #include "BsMonoMethod.h"
  5. #include "BsMonoUtil.h"
  6. #include "BsVirtualInput.h"
  7. #include "BsScriptVirtualButton.h"
  8. namespace BansheeEngine
  9. {
  10. ScriptEditorVirtualInput::OnButtonEventThunkDef ScriptEditorVirtualInput::OnButtonUpThunk;
  11. ScriptEditorVirtualInput::OnButtonEventThunkDef ScriptEditorVirtualInput::OnButtonDownThunk;
  12. ScriptEditorVirtualInput::OnButtonEventThunkDef ScriptEditorVirtualInput::OnButtonHeldThunk;
  13. HEvent ScriptEditorVirtualInput::OnButtonPressedConn;
  14. HEvent ScriptEditorVirtualInput::OnButtonReleasedConn;
  15. HEvent ScriptEditorVirtualInput::OnButtonHeldConn;
  16. ScriptEditorVirtualInput::ScriptEditorVirtualInput(MonoObject* instance)
  17. :ScriptObject(instance)
  18. { }
  19. void ScriptEditorVirtualInput::initRuntimeData()
  20. {
  21. OnButtonUpThunk = (OnButtonEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerButtonDown", "VirtualButton,int")->getThunk();
  22. OnButtonDownThunk = (OnButtonEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerButtonUp", "VirtualButton,int")->getThunk();
  23. OnButtonHeldThunk = (OnButtonEventThunkDef)metaData.scriptClass->getMethodExact("Internal_TriggerButtonHeld", "VirtualButton,int")->getThunk();
  24. }
  25. void ScriptEditorVirtualInput::startUp()
  26. {
  27. VirtualInput& input = VirtualInput::instance();
  28. OnButtonPressedConn = input.onButtonDown.connect(&ScriptEditorVirtualInput::onButtonDown);
  29. OnButtonReleasedConn = input.onButtonUp.connect(&ScriptEditorVirtualInput::onButtonUp);
  30. OnButtonHeldConn = input.onButtonHeld.connect(&ScriptEditorVirtualInput::onButtonHeld);
  31. }
  32. void ScriptEditorVirtualInput::shutDown()
  33. {
  34. OnButtonPressedConn.disconnect();
  35. OnButtonReleasedConn.disconnect();
  36. OnButtonHeldConn.disconnect();
  37. }
  38. void ScriptEditorVirtualInput::onButtonDown(const VirtualButton& btn, UINT32 deviceIdx)
  39. {
  40. MonoObject* virtualButton = ScriptVirtualButton::box(btn);
  41. MonoUtil::invokeThunk(OnButtonDownThunk, virtualButton, deviceIdx);
  42. }
  43. void ScriptEditorVirtualInput::onButtonUp(const VirtualButton& btn, UINT32 deviceIdx)
  44. {
  45. MonoObject* virtualButton = ScriptVirtualButton::box(btn);
  46. MonoUtil::invokeThunk(OnButtonUpThunk, virtualButton, deviceIdx);
  47. }
  48. void ScriptEditorVirtualInput::onButtonHeld(const VirtualButton& btn, UINT32 deviceIdx)
  49. {
  50. MonoObject* virtualButton = ScriptVirtualButton::box(btn);
  51. MonoUtil::invokeThunk(OnButtonHeldThunk, virtualButton, deviceIdx);
  52. }
  53. }