From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/Camera/OcclusionPortal.cpp | 60 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Runtime/Camera/OcclusionPortal.cpp (limited to 'Runtime/Camera/OcclusionPortal.cpp') 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 +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 -- cgit v1.1-26-g67d0