BsScriptGUIContentImages.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptGUIContentImages.h"
  4. #include "BsScriptResourceManager.h"
  5. #include "BsScriptSpriteTexture.generated.h"
  6. namespace bs
  7. {
  8. MonoField* ScriptGUIContentImages::mNormalField;
  9. MonoField* ScriptGUIContentImages::mHoverField;
  10. MonoField* ScriptGUIContentImages::mActiveField;
  11. MonoField* ScriptGUIContentImages::mFocusedField;
  12. MonoField* ScriptGUIContentImages::mNormalOnField;
  13. MonoField* ScriptGUIContentImages::mHoverOnField;
  14. MonoField* ScriptGUIContentImages::mActiveOnField;
  15. MonoField* ScriptGUIContentImages::mFocusedOnField;
  16. ScriptGUIContentImages::ScriptGUIContentImages(MonoObject* instance)
  17. :ScriptObject(instance)
  18. { }
  19. void ScriptGUIContentImages::initRuntimeData()
  20. {
  21. mNormalField = metaData.scriptClass->getField("normal");
  22. mHoverField = metaData.scriptClass->getField("hover");
  23. mActiveField = metaData.scriptClass->getField("active");
  24. mFocusedField = metaData.scriptClass->getField("focused");
  25. mNormalOnField = metaData.scriptClass->getField("normalOn");
  26. mHoverOnField = metaData.scriptClass->getField("hoverOn");
  27. mActiveOnField = metaData.scriptClass->getField("activeOn");
  28. mFocusedOnField = metaData.scriptClass->getField("focusedOn");
  29. }
  30. GUIContentImages ScriptGUIContentImages::getNative(MonoObject* instance)
  31. {
  32. GUIContentImages output;
  33. struct Entry
  34. {
  35. Entry(MonoField* field, HSpriteTexture& outputImage)
  36. :field(field), outputImage(outputImage)
  37. { }
  38. MonoField* field;
  39. HSpriteTexture& outputImage;
  40. };
  41. Entry entries[8] =
  42. {
  43. { mNormalField, output.normal },
  44. { mHoverField, output.hover },
  45. { mActiveField, output.active },
  46. { mFocusedField, output.focused },
  47. { mNormalOnField, output.normalOn },
  48. { mHoverOnField, output.hoverOn },
  49. { mActiveOnField, output.activeOn },
  50. { mFocusedOnField, output.focusedOn },
  51. };
  52. for (auto& entry : entries)
  53. {
  54. MonoObject* managedImage;
  55. entry.field->get(instance, &managedImage);
  56. if (managedImage != nullptr)
  57. entry.outputImage = ScriptSpriteTexture::toNative(managedImage)->getHandle();
  58. }
  59. return output;
  60. }
  61. MonoObject* ScriptGUIContentImages::getManaged(const GUIContentImages& images)
  62. {
  63. struct Entry
  64. {
  65. Entry(MonoField* field, const HSpriteTexture& outputImage)
  66. :field(field), image(outputImage)
  67. { }
  68. MonoField* field;
  69. const HSpriteTexture& image;
  70. };
  71. Entry entries[8] =
  72. {
  73. { mNormalField, images.normal },
  74. { mHoverField, images.hover },
  75. { mActiveField, images.active },
  76. { mFocusedField, images.focused },
  77. { mNormalOnField, images.normalOn },
  78. { mHoverOnField, images.hoverOn },
  79. { mActiveOnField, images.activeOn },
  80. { mFocusedOnField, images.focusedOn },
  81. };
  82. MonoObject* output = metaData.scriptClass->createInstance();
  83. for (auto& entry : entries)
  84. {
  85. MonoObject* managedImage = nullptr;
  86. if (entry.image != nullptr)
  87. {
  88. ScriptResourceBase* scriptImage = ScriptResourceManager::instance().getScriptResource(entry.image, true);
  89. managedImage = scriptImage->getManagedInstance();
  90. }
  91. entry.field->set(output, managedImage);
  92. }
  93. return output;
  94. }
  95. }