1//************************************ bs::framework - Copyright 2018 Marko Pintera **************************************//
2//*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********//
3#pragma once
4
5#include "BsCorePrerequisites.h"
6#include "Renderer/BsLightProbeVolume.h"
7#include "Scene/BsComponent.h"
8
9namespace bs
10{
11 /** @addtogroup Components-Core
12 * @{
13 */
14
15 /**
16 * @copydoc LightProbeVolume
17 *
18 * @note Wraps LightProbeVolume as a Component.
19 */
20 class BS_CORE_EXPORT BS_SCRIPT_EXPORT(m:Rendering,n:LightProbeVolume) CLightProbeVolume : public Component
21 {
22 public:
23 CLightProbeVolume(const HSceneObject& parent, const AABox& volume = AABox::UNIT_BOX,
24 const Vector3I& cellCount = Vector3I(1, 1, 1));
25 virtual ~CLightProbeVolume();
26
27 /** @copydoc LightProbeVolume::addProbe() */
28 BS_SCRIPT_EXPORT()
29 UINT32 addProbe(const Vector3& position) { return mInternal->addProbe(position); }
30
31 /** @copydoc LightProbeVolume::setProbePosition() */
32 BS_SCRIPT_EXPORT()
33 void setProbePosition(UINT32 handle, const Vector3& position) { mInternal->setProbePosition(handle, position); }
34
35 /** @copydoc LightProbeVolume::getProbePosition() */
36 BS_SCRIPT_EXPORT()
37 Vector3 getProbePosition(UINT32 handle) const { return mInternal->getProbePosition(handle); }
38
39 /** @copydoc LightProbeVolume::removeProbe() */
40 BS_SCRIPT_EXPORT()
41 void removeProbe(UINT32 handle) { mInternal->removeProbe(handle); }
42
43 /** @copydoc LightProbeVolume::getProbes() */
44 BS_SCRIPT_EXPORT()
45 Vector<LightProbeInfo> getProbes() const;
46
47 /** @copydoc LightProbeVolume::renderProbe() */
48 BS_SCRIPT_EXPORT()
49 void renderProbe(UINT32 handle);
50
51 /** @copydoc LightProbeVolume::renderProbes() */
52 BS_SCRIPT_EXPORT()
53 void renderProbes();
54
55 /** @copydoc LightProbeVolume::resize() */
56 BS_SCRIPT_EXPORT()
57 void resize(const AABox& volume, const Vector3I& cellCount = Vector3I(1, 1, 1)) { mInternal->resize(volume, cellCount); }
58
59 /** @copydoc LightProbeVolume::clip() */
60 BS_SCRIPT_EXPORT()
61 void clip() { mInternal->clip(); }
62
63 /** @copydoc LightProbeVolume::reset() */
64 BS_SCRIPT_EXPORT()
65 void reset() { mInternal->reset(); }
66
67 /** @copydoc LightProbeVolume::getGridVolume() */
68 BS_SCRIPT_EXPORT(n:GridVolume,pr:getter)
69 const AABox& getGridVolume() const { return mVolume; }
70
71 /** @copydoc LightProbeVolume::getCellCount() */
72 BS_SCRIPT_EXPORT(n:CellCount,pr:getter)
73 const Vector3I& getCellCount() const { return mCellCount; }
74
75 /** @name Internal
76 * @{
77 */
78
79 /** Returns the light probe volume that this component wraps. */
80 SPtr<LightProbeVolume> _getInternal() const { return mInternal; }
81
82 /** @} */
83
84 protected:
85 mutable SPtr<LightProbeVolume> mInternal;
86
87 // Only valid during construction
88 AABox mVolume;
89 Vector3I mCellCount;
90
91 /************************************************************************/
92 /* COMPONENT OVERRIDES */
93 /************************************************************************/
94 protected:
95 friend class SceneObject;
96
97 /** @copydoc Component::onInitialized */
98 void onInitialized() override;
99
100 /** @copydoc Component::onDestroyed */
101 void onDestroyed() override;
102
103 /** @copydoc Component::update */
104 void update() override { }
105
106 /************************************************************************/
107 /* RTTI */
108 /************************************************************************/
109 public:
110 friend class CLightProbeVolumeRTTI;
111 static RTTITypeBase* getRTTIStatic();
112 RTTITypeBase* getRTTI() const override;
113
114 protected:
115 CLightProbeVolume(); // Serialization only
116 };
117
118 /** @} */
119}