BsScriptInputConfiguration.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptInputConfiguration.h"
  4. #include "BsMonoManager.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoUtil.h"
  8. #include "Input/BsVirtualInput.h"
  9. namespace bs
  10. {
  11. Map<UINT64, ScriptInputConfiguration*> ScriptInputConfiguration::ScriptInputConfigurations;
  12. ScriptInputConfiguration::ScriptInputConfiguration(MonoObject* instance, const SPtr<InputConfiguration>& inputConfig)
  13. :ScriptObject(instance), mInputConfig(inputConfig)
  14. {
  15. mGCHandle = MonoUtil::newWeakGCHandle(instance);
  16. UINT64 configId = (UINT64)inputConfig.get();
  17. ScriptInputConfigurations[configId] = this;
  18. }
  19. void ScriptInputConfiguration::initRuntimeData()
  20. {
  21. metaData.scriptClass->addInternalCall("Internal_CreateInstance", (void*)&ScriptInputConfiguration::internal_CreateInstance);
  22. metaData.scriptClass->addInternalCall("Internal_RegisterButton", (void*)&ScriptInputConfiguration::internal_RegisterButton);
  23. metaData.scriptClass->addInternalCall("Internal_UnregisterButton", (void*)&ScriptInputConfiguration::internal_UnregisterButton);
  24. metaData.scriptClass->addInternalCall("Internal_RegisterAxis", (void*)&ScriptInputConfiguration::internal_RegisterAxis);
  25. metaData.scriptClass->addInternalCall("Internal_UnregisterAxis", (void*)&ScriptInputConfiguration::internal_UnregisterAxis);
  26. metaData.scriptClass->addInternalCall("Internal_SetRepeatInterval", (void*)&ScriptInputConfiguration::internal_SetRepeatInterval);
  27. metaData.scriptClass->addInternalCall("Internal_GetRepeatInterval", (void*)&ScriptInputConfiguration::internal_GetRepeatInterval);
  28. }
  29. MonoObject* ScriptInputConfiguration::getManagedInstance() const
  30. {
  31. return MonoUtil::getObjectFromGCHandle(mGCHandle);
  32. }
  33. ScriptInputConfiguration* ScriptInputConfiguration::getScriptInputConfig(const SPtr<InputConfiguration>& inputConfig)
  34. {
  35. UINT64 configId = (UINT64)inputConfig.get();
  36. auto iterFind = ScriptInputConfigurations.find(configId);
  37. if (iterFind != ScriptInputConfigurations.end())
  38. return iterFind->second;
  39. return nullptr;
  40. }
  41. ScriptInputConfiguration* ScriptInputConfiguration::createScriptInputConfig(const SPtr<InputConfiguration>& inputConfig)
  42. {
  43. MonoObject* instance = metaData.scriptClass->createInstance(false);
  44. ScriptInputConfiguration* nativeInstance = new (bs_alloc<ScriptInputConfiguration>()) ScriptInputConfiguration(instance, inputConfig);
  45. return nativeInstance;
  46. }
  47. void ScriptInputConfiguration::internal_CreateInstance(MonoObject* object)
  48. {
  49. SPtr<InputConfiguration> inputConfig = VirtualInput::createConfiguration();
  50. new (bs_alloc<ScriptInputConfiguration>()) ScriptInputConfiguration(object, inputConfig);
  51. }
  52. void ScriptInputConfiguration::internal_RegisterButton(ScriptInputConfiguration* thisPtr, MonoString* name, ButtonCode buttonCode,
  53. ButtonModifier modifiers, bool repeatable)
  54. {
  55. String nameStr = MonoUtil::monoToString(name);
  56. thisPtr->getInternalValue()->registerButton(nameStr, buttonCode, modifiers, repeatable);
  57. }
  58. void ScriptInputConfiguration::internal_UnregisterButton(ScriptInputConfiguration* thisPtr, MonoString* name)
  59. {
  60. String nameStr = MonoUtil::monoToString(name);
  61. thisPtr->getInternalValue()->unregisterButton(nameStr);
  62. }
  63. void ScriptInputConfiguration::internal_RegisterAxis(ScriptInputConfiguration* thisPtr, MonoString* name, InputAxis type, float deadZone,
  64. float sensitivity, bool invert)
  65. {
  66. String nameStr = MonoUtil::monoToString(name);
  67. VIRTUAL_AXIS_DESC axisDesc;
  68. axisDesc.type = (UINT32)type;
  69. axisDesc.deadZone = deadZone;
  70. axisDesc.invert = invert;
  71. axisDesc.sensitivity = sensitivity;
  72. thisPtr->getInternalValue()->registerAxis(nameStr, axisDesc);
  73. }
  74. void ScriptInputConfiguration::internal_UnregisterAxis(ScriptInputConfiguration* thisPtr, MonoString* name)
  75. {
  76. String nameStr = MonoUtil::monoToString(name);
  77. thisPtr->getInternalValue()->unregisterAxis(nameStr);
  78. }
  79. void ScriptInputConfiguration::internal_SetRepeatInterval(ScriptInputConfiguration* thisPtr, UINT64 milliseconds)
  80. {
  81. thisPtr->getInternalValue()->setRepeatInterval(milliseconds);
  82. }
  83. UINT64 ScriptInputConfiguration::internal_GetRepeatInterval(ScriptInputConfiguration* thisPtr)
  84. {
  85. return thisPtr->getInternalValue()->getRepeatInterval();
  86. }
  87. void ScriptInputConfiguration::_onManagedInstanceDeleted()
  88. {
  89. UINT64 configId = (UINT64)mInputConfig.get();
  90. ScriptInputConfigurations.erase(configId);
  91. ScriptObject::_onManagedInstanceDeleted();
  92. }
  93. ScriptVirtualAxis::ScriptVirtualAxis(MonoObject* instance)
  94. :ScriptObject(instance)
  95. { }
  96. void ScriptVirtualAxis::initRuntimeData()
  97. {
  98. metaData.scriptClass->addInternalCall("Internal_InitVirtualAxis", (void*)&ScriptVirtualAxis::internal_InitVirtualAxis);
  99. }
  100. UINT32 ScriptVirtualAxis::internal_InitVirtualAxis(MonoString* name)
  101. {
  102. String nameStr = MonoUtil::monoToString(name);
  103. VirtualAxis vb(nameStr);
  104. return vb.axisIdentifier;
  105. }
  106. }