BsCLight.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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/BsLight.h"
  6. #include "Scene/BsComponent.h"
  7. namespace bs
  8. {
  9. /** @addtogroup Components
  10. * @{
  11. */
  12. /**
  13. * @copydoc Light
  14. *
  15. * @note Wraps Light as a Component.
  16. */
  17. class BS_CORE_EXPORT BS_SCRIPT_EXPORT(m:Rendering,n:Light) CLight : public Component
  18. {
  19. public:
  20. CLight(const HSceneObject& parent, LightType type = LightType::Radial, Color color = Color::White,
  21. float intensity = 100.0f, float range = 1.0f, bool castsShadows = false, Degree spotAngle = Degree(45),
  22. Degree spotFalloffAngle = Degree(40));
  23. virtual ~CLight();
  24. /** @copydoc Light::setType */
  25. BS_SCRIPT_EXPORT(n:Type,pr:setter)
  26. void setType(LightType type) { mInternal->setType(type); }
  27. /** @copydoc Light::getType */
  28. BS_SCRIPT_EXPORT(n:Type,pr:getter)
  29. LightType getType() const { return mInternal->getType(); }
  30. /** @copydoc Light::setCastsShadow */
  31. BS_SCRIPT_EXPORT(n:CastsShadow,pr:setter)
  32. void setCastsShadow(bool castsShadow) { mInternal->setCastsShadow(castsShadow); }
  33. /** @copydoc Light::getCastsShadow */
  34. BS_SCRIPT_EXPORT(n:CastsShadow,pr:getter)
  35. bool getCastsShadow() const { return mInternal->getCastsShadow(); }
  36. /** @copydoc Light::setShadowBias */
  37. BS_SCRIPT_EXPORT(n:ShadowBias,pr:setter)
  38. void setShadowBias(float bias) { mInternal->setShadowBias(bias); }
  39. /** @copydoc Light::setShadowBias() */
  40. BS_SCRIPT_EXPORT(n:ShadowBias,pr:getter)
  41. float getShadowBias() const { return mInternal->getShadowBias(); }
  42. /** @copydoc Light::setColor */
  43. BS_SCRIPT_EXPORT(n:Color,pr:setter)
  44. void setColor(const Color& color) { mInternal->setColor(color); }
  45. /** @copydoc Light::getColor */
  46. BS_SCRIPT_EXPORT(n:Color,pr:getter)
  47. Color getColor() const { return mInternal->getColor(); }
  48. /** @copydoc Light::setAttenuationRadius */
  49. BS_SCRIPT_EXPORT(n:AttenuationRadius,pr:setter)
  50. void setAttenuationRadius(float radius) { mInternal->setAttenuationRadius(radius); }
  51. /** @copydoc Light::getAttenuationRadius */
  52. BS_SCRIPT_EXPORT(n:AttenuationRadius,pr:getter)
  53. float getAttenuationRadius() const { return mInternal->getAttenuationRadius(); }
  54. /** @copydoc Light::setSourceRadius */
  55. BS_SCRIPT_EXPORT(n:SourceRadius,pr:setter)
  56. void setSourceRadius(float radius) { mInternal->setSourceRadius(radius); }
  57. /** @copydoc Light::getSourceRadius */
  58. BS_SCRIPT_EXPORT(n:SourceRadius,pr:getter)
  59. float getSourceRadius() const { return mInternal->getSourceRadius(); }
  60. /** @copydoc Light::setIntensity */
  61. BS_SCRIPT_EXPORT(n:Intensity,pr:setter)
  62. void setIntensity(float intensity) { mInternal->setIntensity(intensity); }
  63. /** @copydoc Light::getIntensity */
  64. BS_SCRIPT_EXPORT(n:Intensity,pr:getter)
  65. float getIntensity() const { return mInternal->getIntensity(); }
  66. /** @copydoc Light::setSpotAngle */
  67. BS_SCRIPT_EXPORT(n:SpotAngle,pr:setter)
  68. void setSpotAngle(const Degree& spotAngle) { mInternal->setSpotAngle(spotAngle); }
  69. /** @copydoc Light::getSpotAngle */
  70. BS_SCRIPT_EXPORT(n:SpotAngle,pr:getter)
  71. Degree getSpotAngle() const { return mInternal->getSpotAngle(); }
  72. /** @copydoc Light::setSpotFalloffAngle */
  73. BS_SCRIPT_EXPORT(n:SpotAngleFalloff,pr:setter)
  74. void setSpotFalloffAngle(const Degree& spotAngle) { mInternal->setSpotFalloffAngle(spotAngle); }
  75. /** @copydoc Light::getSpotFalloffAngle */
  76. BS_SCRIPT_EXPORT(n:SpotAngleFalloff,pr:getter)
  77. Degree getSpotFalloffAngle() const { return mInternal->getSpotFalloffAngle(); }
  78. /** @copydoc Light::setUseAutoAttenuation */
  79. BS_SCRIPT_EXPORT(n:UseAutoAttenuation,pr:setter)
  80. void setUseAutoAttenuation(bool enabled) { mInternal->setUseAutoAttenuation(enabled); }
  81. /** @copydoc Light::getUseAutoAttenuation */
  82. BS_SCRIPT_EXPORT(n:UseAutoAttenuation,pr:getter)
  83. bool getUseAutoAttenuation() const { return mInternal->getUseAutoAttenuation(); }
  84. /** @copydoc Light::getBounds */
  85. BS_SCRIPT_EXPORT(n:Bounds,pr:getter)
  86. Sphere getBounds() const;
  87. /** @name Internal
  88. * @{
  89. */
  90. /** Returns the light that this component wraps. */
  91. SPtr<Light> _getLight() const { return mInternal; }
  92. /** @} */
  93. protected:
  94. mutable SPtr<Light> mInternal;
  95. // Only valid during construction
  96. LightType mType = LightType::Radial;
  97. Color mColor = Color::White;
  98. float mIntensity = 100.0f;
  99. float mRange = 1.0f;
  100. bool mCastsShadows = false;
  101. Degree mSpotAngle = Degree(45);
  102. Degree mSpotFalloffAngle = Degree(40);
  103. /************************************************************************/
  104. /* COMPONENT OVERRIDES */
  105. /************************************************************************/
  106. protected:
  107. friend class SceneObject;
  108. /** @copydoc Component::onInitialized */
  109. void onInitialized() override;
  110. /** @copydoc Component::onDestroyed */
  111. void onDestroyed() override;
  112. /** @copydoc Component::update */
  113. void update() override { }
  114. /************************************************************************/
  115. /* RTTI */
  116. /************************************************************************/
  117. public:
  118. friend class CLightRTTI;
  119. static RTTITypeBase* getRTTIStatic();
  120. RTTITypeBase* getRTTI() const override;
  121. protected:
  122. CLight(); // Serialization only
  123. };
  124. /** @} */
  125. }