BsScriptSpriteTexture.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptSpriteTexture.h"
  4. #include "BsScriptResourceManager.h"
  5. #include "BsScriptMeta.h"
  6. #include "BsMonoField.h"
  7. #include "BsMonoClass.h"
  8. #include "BsMonoManager.h"
  9. #include "BsSpriteTexture.h"
  10. #include "BsScriptTexture2D.h"
  11. namespace bs
  12. {
  13. ScriptSpriteTexture::ScriptSpriteTexture(MonoObject* instance,const HSpriteTexture& texture)
  14. :TScriptResource(instance, texture)
  15. {
  16. }
  17. void ScriptSpriteTexture::initRuntimeData()
  18. {
  19. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptSpriteTexture::internal_createInstance);
  20. metaData.scriptClass->addInternalCall("Internal_GetTexture", &ScriptSpriteTexture::internal_GetTexture);
  21. metaData.scriptClass->addInternalCall("Internal_SetTexture", &ScriptSpriteTexture::internal_SetTexture);
  22. metaData.scriptClass->addInternalCall("Internal_GetOffset", &ScriptSpriteTexture::internal_GetOffset);
  23. metaData.scriptClass->addInternalCall("Internal_SetOffset", &ScriptSpriteTexture::internal_SetOffset);
  24. metaData.scriptClass->addInternalCall("Internal_GetScale", &ScriptSpriteTexture::internal_GetScale);
  25. metaData.scriptClass->addInternalCall("Internal_SetScale", &ScriptSpriteTexture::internal_SetScale);
  26. metaData.scriptClass->addInternalCall("Internal_GetWidth", &ScriptSpriteTexture::internal_GetWidth);
  27. metaData.scriptClass->addInternalCall("Internal_GetHeight", &ScriptSpriteTexture::internal_GetHeight);
  28. }
  29. MonoObject* ScriptSpriteTexture::toManaged(const HSpriteTexture& texture)
  30. {
  31. if (texture == nullptr)
  32. return nullptr;
  33. ScriptSpriteTexture* scriptSpriteTex;
  34. ScriptResourceManager::instance().getScriptResource(texture, &scriptSpriteTex, true);
  35. return scriptSpriteTex->getManagedInstance();
  36. }
  37. void ScriptSpriteTexture::internal_createInstance(MonoObject* instance, MonoObject* texture, Vector2* offset, Vector2* scale)
  38. {
  39. ScriptTexture2D* scriptTexture = ScriptTexture2D::toNative(texture);
  40. ScriptSpriteTexture* scriptInstance;
  41. if (scriptTexture == nullptr)
  42. {
  43. ScriptResourceManager::instance().createScriptResource(instance, SpriteTexture::dummy(), &scriptInstance);
  44. }
  45. else
  46. {
  47. HSpriteTexture spriteTexture = SpriteTexture::create(*offset, *scale, scriptTexture->getHandle());
  48. ScriptResourceManager::instance().createScriptResource(instance, spriteTexture, &scriptInstance);
  49. }
  50. }
  51. MonoObject* ScriptSpriteTexture::internal_GetTexture(ScriptSpriteTexture* thisPtr)
  52. {
  53. HSpriteTexture spriteTexture = thisPtr->getHandle();
  54. if (!spriteTexture.isLoaded())
  55. return nullptr;
  56. HTexture texture = spriteTexture->getTexture();
  57. if (!texture.isLoaded())
  58. return nullptr;
  59. ScriptTexture2D* scriptTexture = nullptr;
  60. ScriptResourceManager::instance().getScriptResource(texture, &scriptTexture, true);
  61. return scriptTexture->getManagedInstance();
  62. }
  63. void ScriptSpriteTexture::internal_SetTexture(ScriptSpriteTexture* thisPtr, ScriptTexture2D* value)
  64. {
  65. HSpriteTexture spriteTexture = thisPtr->getHandle();
  66. if (!spriteTexture.isLoaded())
  67. return;
  68. HTexture texture;
  69. if (value != nullptr)
  70. texture = value->getHandle();
  71. spriteTexture->setTexture(texture);
  72. }
  73. void ScriptSpriteTexture::internal_GetOffset(ScriptSpriteTexture* thisPtr, Vector2* value)
  74. {
  75. HSpriteTexture spriteTexture = thisPtr->getHandle();
  76. if (!spriteTexture.isLoaded())
  77. {
  78. *value = Vector2::ZERO;
  79. return;
  80. }
  81. *value = spriteTexture->getOffset();
  82. }
  83. void ScriptSpriteTexture::internal_SetOffset(ScriptSpriteTexture* thisPtr, Vector2* value)
  84. {
  85. HSpriteTexture spriteTexture = thisPtr->getHandle();
  86. if (!spriteTexture.isLoaded())
  87. return;
  88. spriteTexture->setOffset(*value);
  89. }
  90. void ScriptSpriteTexture::internal_GetScale(ScriptSpriteTexture* thisPtr, Vector2* value)
  91. {
  92. HSpriteTexture spriteTexture = thisPtr->getHandle();
  93. if (!spriteTexture.isLoaded())
  94. {
  95. *value = Vector2::ZERO;
  96. return;
  97. }
  98. *value = spriteTexture->getScale();
  99. }
  100. void ScriptSpriteTexture::internal_SetScale(ScriptSpriteTexture* thisPtr, Vector2* value)
  101. {
  102. HSpriteTexture spriteTexture = thisPtr->getHandle();
  103. if (!spriteTexture.isLoaded())
  104. return;
  105. spriteTexture->setScale(*value);
  106. }
  107. UINT32 ScriptSpriteTexture::internal_GetWidth(ScriptSpriteTexture* thisPtr)
  108. {
  109. HSpriteTexture spriteTexture = thisPtr->getHandle();
  110. if (!spriteTexture.isLoaded())
  111. return 0;
  112. return spriteTexture->getWidth();
  113. }
  114. UINT32 ScriptSpriteTexture::internal_GetHeight(ScriptSpriteTexture* thisPtr)
  115. {
  116. HSpriteTexture spriteTexture = thisPtr->getHandle();
  117. if (!spriteTexture.isLoaded())
  118. return 0;
  119. return spriteTexture->getHeight();
  120. }
  121. MonoObject* ScriptSpriteTexture::createInstance()
  122. {
  123. return metaData.scriptClass->createInstance();
  124. }
  125. }