BsCRenderable.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "Renderer/BsRenderable.h"
  6. #include "Math/BsBounds.h"
  7. #include "Scene/BsComponent.h"
  8. namespace bs
  9. {
  10. /** @addtogroup Components
  11. * @{
  12. */
  13. /**
  14. * @copydoc Renderable
  15. *
  16. * @note Wraps a TRenderable as a Component.
  17. */
  18. class BS_CORE_EXPORT BS_SCRIPT_EXPORT(m:Rendering,n:Renderable) CRenderable : public Component
  19. {
  20. public:
  21. /** @copydoc Renderable::setMesh */
  22. BS_SCRIPT_EXPORT(n:Mesh,pr:setter)
  23. void setMesh(HMesh mesh);
  24. /** @copydoc Renderable::getMesh */
  25. BS_SCRIPT_EXPORT(n:Mesh,pr:getter)
  26. HMesh getMesh() const { return mInternal->getMesh(); }
  27. /** @copydoc Renderable::setMaterial */
  28. BS_SCRIPT_EXPORT(n:SetMaterial)
  29. void setMaterial(UINT32 idx, HMaterial material) { mInternal->setMaterial(idx, material); }
  30. /** @copydoc Renderable::setMaterial */
  31. BS_SCRIPT_EXPORT(n:SetMaterial)
  32. void setMaterial(HMaterial material) { mInternal->setMaterial(material); }
  33. /** @copydoc Renderable::getMaterial */
  34. BS_SCRIPT_EXPORT(n:GetMaterial)
  35. HMaterial getMaterial(UINT32 idx) const { return mInternal->getMaterial(idx); }
  36. /** @copydoc Renderable::setMaterials */
  37. BS_SCRIPT_EXPORT(n:Materials,pr:setter)
  38. void setMaterials(const Vector<HMaterial>& materials) { mInternal->setMaterials(materials); }
  39. /** @copydoc Renderable::getMaterials */
  40. BS_SCRIPT_EXPORT(n:Materials,pr:getter)
  41. const Vector<HMaterial>& getMaterials() { return mInternal->getMaterials(); }
  42. /** @copydoc Renderable::setLayer */
  43. BS_SCRIPT_EXPORT(n:Layers,pr:setter)
  44. void setLayer(UINT64 layer) { mInternal->setLayer(layer); }
  45. /** @copydoc Renderable::getLayer */
  46. BS_SCRIPT_EXPORT(n:Layers,pr:getter)
  47. UINT64 getLayer() const { return mInternal->getLayer(); }
  48. /** Gets world bounds of the mesh rendered by this object. */
  49. BS_SCRIPT_EXPORT(n:Bounds,pr:getter)
  50. Bounds getBounds() const;
  51. /** @copydoc Component::calculateBounds */
  52. bool calculateBounds(Bounds& bounds) override;
  53. /** @name Internal
  54. * @{
  55. */
  56. /** Returns the internal renderable that is used for majority of operations by this component. */
  57. SPtr<Renderable> _getRenderable() const { return mInternal; }
  58. /** Registers an Animation component that will be used for animating the renderable's mesh. */
  59. void _registerAnimation(const HAnimation& animation);
  60. /** Removes the Animation component, making the renderable rendered as a static object. */
  61. void _unregisterAnimation();
  62. /** @} */
  63. private:
  64. mutable SPtr<Renderable> mInternal;
  65. HAnimation mAnimation;
  66. /************************************************************************/
  67. /* COMPONENT OVERRIDES */
  68. /************************************************************************/
  69. protected:
  70. friend class SceneObject;
  71. CRenderable(const HSceneObject& parent);
  72. /** @copydoc Component::onInitialized */
  73. void onInitialized() override;
  74. /** @copydoc Component::onDestroyed */
  75. void onDestroyed() override;
  76. public:
  77. /** @copydoc Component::update */
  78. void update() override;
  79. /************************************************************************/
  80. /* RTTI */
  81. /************************************************************************/
  82. public:
  83. friend class CRenderableRTTI;
  84. static RTTITypeBase* getRTTIStatic();
  85. RTTITypeBase* getRTTI() const override;
  86. protected:
  87. CRenderable(); // Serialization only
  88. };
  89. /** @} */
  90. }