2
0

BsScriptPlatformInfo.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #include "BsScriptPlatformInfo.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoUtil.h"
  8. #include "BsScriptTexture2D.h"
  9. #include "BsScriptResourceManager.h"
  10. namespace BansheeEngine
  11. {
  12. ScriptPlatformInfoBase::ScriptPlatformInfoBase(MonoObject* instance)
  13. :ScriptObjectBase(instance)
  14. { }
  15. ScriptPlatformInfo::ScriptPlatformInfo(MonoObject* instance)
  16. : ScriptObject(instance)
  17. {
  18. }
  19. void ScriptPlatformInfo::initRuntimeData()
  20. {
  21. metaData.scriptClass->addInternalCall("Internal_GetType", &ScriptPlatformInfo::internal_GetType);
  22. metaData.scriptClass->addInternalCall("Internal_GetDefines", &ScriptPlatformInfo::internal_GetDefines);
  23. metaData.scriptClass->addInternalCall("Internal_SetDefines", &ScriptPlatformInfo::internal_SetDefines);
  24. }
  25. MonoObject* ScriptPlatformInfo::create(const SPtr<PlatformInfo>& platformInfo)
  26. {
  27. switch (platformInfo->type)
  28. {
  29. case PlatformType::Windows:
  30. return ScriptWinPlatformInfo::create(std::static_pointer_cast<WinPlatformInfo>(platformInfo));
  31. break;
  32. }
  33. return nullptr;
  34. }
  35. PlatformType ScriptPlatformInfo::internal_GetType(ScriptPlatformInfoBase* thisPtr)
  36. {
  37. return thisPtr->getPlatformInfo()->type;
  38. }
  39. MonoString* ScriptPlatformInfo::internal_GetDefines(ScriptPlatformInfoBase* thisPtr)
  40. {
  41. return MonoUtil::wstringToMono(MonoManager::instance().getDomain(), thisPtr->getPlatformInfo()->defines);
  42. }
  43. void ScriptPlatformInfo::internal_SetDefines(ScriptPlatformInfoBase* thisPtr, MonoString* value)
  44. {
  45. thisPtr->getPlatformInfo()->defines = MonoUtil::monoToWString(value);
  46. }
  47. ScriptWinPlatformInfo::ScriptWinPlatformInfo(MonoObject* instance)
  48. :ScriptObject(instance)
  49. {
  50. mPlatformInfo = bs_shared_ptr_new<WinPlatformInfo>();
  51. }
  52. void ScriptWinPlatformInfo::initRuntimeData()
  53. {
  54. metaData.scriptClass->addInternalCall("Internal_GetIs32Bit", &ScriptWinPlatformInfo::internal_GetIs32Bit);
  55. metaData.scriptClass->addInternalCall("Internal_SetIs32Bit", &ScriptWinPlatformInfo::internal_SetIs32Bit);
  56. metaData.scriptClass->addInternalCall("Internal_GetIcon", &ScriptWinPlatformInfo::internal_GetIcon);
  57. metaData.scriptClass->addInternalCall("Internal_SetIcon", &ScriptWinPlatformInfo::Internal_SetIcon);
  58. }
  59. SPtr<WinPlatformInfo> ScriptWinPlatformInfo::getWinPlatformInfo() const
  60. {
  61. return std::static_pointer_cast<WinPlatformInfo>(mPlatformInfo);
  62. }
  63. MonoObject* ScriptWinPlatformInfo::create(const SPtr<WinPlatformInfo>& platformInfo)
  64. {
  65. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  66. ScriptWinPlatformInfo* scriptObj = ScriptWinPlatformInfo::toNative(managedInstance);
  67. scriptObj->mPlatformInfo = platformInfo;
  68. return managedInstance;
  69. }
  70. bool ScriptWinPlatformInfo::internal_GetIs32Bit(ScriptWinPlatformInfo* thisPtr)
  71. {
  72. return thisPtr->getWinPlatformInfo()->is32bit;
  73. }
  74. void ScriptWinPlatformInfo::internal_SetIs32Bit(ScriptWinPlatformInfo* thisPtr, bool value)
  75. {
  76. thisPtr->getWinPlatformInfo()->is32bit = value;
  77. }
  78. MonoObject* ScriptWinPlatformInfo::internal_GetIcon(ScriptWinPlatformInfo* thisPtr, int size)
  79. {
  80. HTexture icon;
  81. switch (size)
  82. {
  83. case 16:
  84. icon = thisPtr->getWinPlatformInfo()->icon16;
  85. break;
  86. case 32:
  87. icon = thisPtr->getWinPlatformInfo()->icon32;
  88. break;
  89. case 48:
  90. icon = thisPtr->getWinPlatformInfo()->icon48;
  91. break;
  92. case 64:
  93. icon = thisPtr->getWinPlatformInfo()->icon64;
  94. break;
  95. case 96:
  96. icon = thisPtr->getWinPlatformInfo()->icon96;
  97. break;
  98. case 128:
  99. icon = thisPtr->getWinPlatformInfo()->icon128;
  100. break;
  101. case 192:
  102. icon = thisPtr->getWinPlatformInfo()->icon192;
  103. break;
  104. case 256:
  105. icon = thisPtr->getWinPlatformInfo()->icon256;
  106. break;
  107. }
  108. if (icon != nullptr)
  109. {
  110. ScriptTexture2D* scriptTexture;
  111. ScriptResourceManager::instance().getScriptResource(icon, &scriptTexture, true);
  112. return scriptTexture->getManagedInstance();
  113. }
  114. return nullptr;
  115. }
  116. void ScriptWinPlatformInfo::Internal_SetIcon(ScriptWinPlatformInfo* thisPtr, int size, ScriptTexture2D* texturePtr)
  117. {
  118. HTexture icon;
  119. if (texturePtr != nullptr)
  120. icon = texturePtr->getTextureHandle();
  121. switch (size)
  122. {
  123. case 16:
  124. thisPtr->getWinPlatformInfo()->icon16 = icon;
  125. break;
  126. case 32:
  127. thisPtr->getWinPlatformInfo()->icon32 = icon;
  128. break;
  129. case 48:
  130. thisPtr->getWinPlatformInfo()->icon48 = icon;
  131. break;
  132. case 64:
  133. thisPtr->getWinPlatformInfo()->icon64 = icon;
  134. break;
  135. case 96:
  136. thisPtr->getWinPlatformInfo()->icon96 = icon;
  137. break;
  138. case 128:
  139. thisPtr->getWinPlatformInfo()->icon128 = icon;
  140. break;
  141. case 192:
  142. thisPtr->getWinPlatformInfo()->icon192 = icon;
  143. break;
  144. case 256:
  145. thisPtr->getWinPlatformInfo()->icon256 = icon;
  146. break;
  147. }
  148. }
  149. }