BsScriptInputConfiguration.cpp 4.8 KB

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