BsScriptSpriteTexture.cpp 5.0 KB

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