summaryrefslogtreecommitdiff
path: root/Runtime/Camera/OcclusionPortal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Camera/OcclusionPortal.cpp')
-rw-r--r--Runtime/Camera/OcclusionPortal.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/Runtime/Camera/OcclusionPortal.cpp b/Runtime/Camera/OcclusionPortal.cpp
new file mode 100644
index 0000000..ab741bd
--- /dev/null
+++ b/Runtime/Camera/OcclusionPortal.cpp
@@ -0,0 +1,60 @@
+#include "UnityPrefix.h"
+#include "OcclusionPortal.h"
+#include "UnityScene.h"
+#include "Runtime/Serialize/TransferFunctions/SerializeTransfer.h"
+
+OcclusionPortal::OcclusionPortal (MemLabelId label, ObjectCreationMode mode)
+: Super(label, mode)
+{
+ m_Open = true;
+ m_PortalIndex = -1;
+ m_Center = Vector3f(0,0,0);
+ m_Size = Vector3f(1,1,1);
+}
+
+OcclusionPortal::~OcclusionPortal ()
+{
+}
+
+bool OcclusionPortal::CalculatePortalEnabled ()
+{
+ if (!IsActive())
+ return true;
+
+ return m_Open;
+}
+
+void OcclusionPortal::SetIsOpen (bool open)
+{
+ m_Open = open;
+
+ if (m_PortalIndex != -1)
+ GetScene().SetOcclusionPortalEnabled (m_PortalIndex, CalculatePortalEnabled());
+}
+
+void OcclusionPortal::Deactivate (DeactivateOperation operation)
+{
+ if (m_PortalIndex != -1)
+ GetScene().SetOcclusionPortalEnabled (m_PortalIndex, true);
+}
+
+void OcclusionPortal::AwakeFromLoad (AwakeFromLoadMode mode)
+{
+ Super::AwakeFromLoad(mode);
+
+ if (m_PortalIndex != -1)
+ GetScene().SetOcclusionPortalEnabled (m_PortalIndex, CalculatePortalEnabled());
+}
+
+template<class TransferFunction>
+void OcclusionPortal::Transfer (TransferFunction& transfer)
+{
+ Super::Transfer (transfer);
+ TRANSFER (m_Open);
+ transfer.Align();
+ TRANSFER (m_Center);
+ TRANSFER (m_Size);
+}
+
+IMPLEMENT_OBJECT_SERIALIZE (OcclusionPortal)
+IMPLEMENT_CLASS (OcclusionPortal) \ No newline at end of file