BsScriptInputConfiguration.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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(false);
  37. ScriptInputConfiguration* nativeInstance = new (bs_alloc<ScriptInputConfiguration>()) ScriptInputConfiguration(instance, inputConfig);
  38. return nativeInstance;
  39. }
  40. void ScriptInputConfiguration::internal_CreateInstance(MonoObject* object)
  41. {
  42. InputConfigurationPtr inputConfig = VirtualInput::createConfiguration();
  43. ScriptInputConfiguration* nativeInstance = new (bs_alloc<ScriptInputConfiguration>()) ScriptInputConfiguration(object, inputConfig);
  44. }
  45. void ScriptInputConfiguration::internal_RegisterButton(ScriptInputConfiguration* thisPtr, MonoString* name, ButtonCode buttonCode,
  46. ButtonModifier modifiers, bool repeatable)
  47. {
  48. String nameStr = MonoUtil::monoToString(name);
  49. thisPtr->getInternalValue()->registerButton(nameStr, buttonCode, modifiers, repeatable);
  50. }
  51. void ScriptInputConfiguration::internal_UnregisterButton(ScriptInputConfiguration* thisPtr, MonoString* name)
  52. {
  53. String nameStr = MonoUtil::monoToString(name);
  54. thisPtr->getInternalValue()->unregisterButton(nameStr);
  55. }
  56. void ScriptInputConfiguration::internal_RegisterAxis(ScriptInputConfiguration* thisPtr, MonoString* name, InputAxis type, float deadZone,
  57. float sensitivity, bool invert)
  58. {
  59. String nameStr = MonoUtil::monoToString(name);
  60. VIRTUAL_AXIS_DESC axisDesc;
  61. axisDesc.type = (UINT32)type;
  62. axisDesc.deadZone = deadZone;
  63. axisDesc.invert = invert;
  64. axisDesc.sensitivity = sensitivity;
  65. thisPtr->getInternalValue()->registerAxis(nameStr, axisDesc);
  66. }
  67. void ScriptInputConfiguration::internal_UnregisterAxis(ScriptInputConfiguration* thisPtr, MonoString* name)
  68. {
  69. String nameStr = MonoUtil::monoToString(name);
  70. thisPtr->getInternalValue()->unregisterAxis(nameStr);
  71. }
  72. void ScriptInputConfiguration::internal_SetRepeatInterval(ScriptInputConfiguration* thisPtr, UINT64 milliseconds)
  73. {
  74. thisPtr->getInternalValue()->setRepeatInterval(milliseconds);
  75. }
  76. UINT64 ScriptInputConfiguration::internal_GetRepeatInterval(ScriptInputConfiguration* thisPtr)
  77. {
  78. return thisPtr->getInternalValue()->getRepeatInterval();
  79. }
  80. void ScriptInputConfiguration::_onManagedInstanceDeleted()
  81. {
  82. UINT64 configId = (UINT64)mInputConfig.get();
  83. ScriptInputConfigurations.erase(configId);
  84. ScriptObject::_onManagedInstanceDeleted();
  85. }
  86. ScriptVirtualAxis::ScriptVirtualAxis(MonoObject* instance)
  87. :ScriptObject(instance)
  88. { }
  89. void ScriptVirtualAxis::initRuntimeData()
  90. {
  91. metaData.scriptClass->addInternalCall("Internal_InitVirtualAxis", &ScriptVirtualAxis::internal_InitVirtualAxis);
  92. }
  93. UINT32 ScriptVirtualAxis::internal_InitVirtualAxis(MonoString* name)
  94. {
  95. String nameStr = MonoUtil::monoToString(name);
  96. VirtualAxis vb(nameStr);
  97. return vb.axisIdentifier;
  98. }
  99. }