BsScriptEditorVirtualInput.cpp 2.7 KB

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