diff options
Diffstat (limited to 'Runtime/Misc/AsyncOperation.cpp')
-rw-r--r-- | Runtime/Misc/AsyncOperation.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Runtime/Misc/AsyncOperation.cpp b/Runtime/Misc/AsyncOperation.cpp new file mode 100644 index 0000000..5b05c0d --- /dev/null +++ b/Runtime/Misc/AsyncOperation.cpp @@ -0,0 +1,47 @@ +#include "UnityPrefix.h" +#include "AsyncOperation.h" + +void AsyncOperation::SetCoroutineCallback ( DelayedCall* func, Object* coroutineBehaviour, void* userData, CleanupUserData* cleanup) +{ + m_CoroutineBehaviour = coroutineBehaviour; + m_CoroutineDone = func; + m_CoroutineCleanup = cleanup; + m_CoroutineData = userData; +} + +void AsyncOperation::InvokeCoroutine () +{ + if (m_CoroutineDone != NULL) + { + Object* target = m_CoroutineBehaviour; + if (target) + m_CoroutineDone(target, m_CoroutineData); + m_CoroutineCleanup(m_CoroutineData); + m_CoroutineDone = NULL; + } +} + +void AsyncOperation::CleanupCoroutine () +{ + if (m_CoroutineDone != NULL) + { + m_CoroutineCleanup(m_CoroutineData); + m_CoroutineDone = NULL; + } +} + +AsyncOperation::~AsyncOperation () +{ + AssertIf(m_CoroutineDone != NULL); +} + +void AsyncOperation::Retain () +{ + m_RefCount.Retain(); +} + +void AsyncOperation::Release () +{ + if (m_RefCount.Release()) + delete this; +} |