BsScriptInputConfiguration.cpp 4.4 KB

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