blob: f82a13dc5ebdb5dcf39d563eb0bece55a5fa0db9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#ifndef _COROUTINE_H_
#define _COROUTINE_H_
#if ENABLE_SCRIPTING
#include "Runtime/Scripting/Backend/ScriptingTypes.h"
#include "Runtime/Scripting/ScriptingUtility.h"
#include "Runtime/Utilities/LinkedList.h"
class AsyncOperation;
class MonoBehaviour;
class Object;
struct Coroutine : public ListElement
{
ScriptingObjectPtr m_CoroutineEnumerator;
int m_CoroutineEnumeratorGCHandle;
ScriptingMethodPtr m_CoroutineMethod;
ScriptingMethodPtr m_MoveNext;
ScriptingMethodPtr m_Current;
MonoBehaviour* m_Behaviour;
int m_RefCount;
int m_IsReferencedByMono;
bool m_DoneRunning;
Coroutine* m_ContinueWhenFinished;
Coroutine* m_WaitingFor;
AsyncOperation* m_AsyncOperation;
Coroutine ();
~Coroutine();
void Run ();
void SetMoveNextMethod(ScriptingMethodPtr method);
void SetCurrentMethod(ScriptingMethodPtr method);
static void ContinueCoroutine (Object* o, void* userData);
static void CleanupCoroutine (void* userData);
static void CleanupCoroutineGC (void* userData);
static bool CompareCoroutineMethodName (void* callBackUserData, void* cancelUserdata);
private:
bool InvokeMoveNext(ScriptingExceptionPtr* exception);
void ProcessCoroutineCurrent();
void HandleIEnumerableCurrentReturnValue(ScriptingObjectPtr);
};
#endif //ENABLE_SCRIPTING
#endif
|