-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTaskFactoryScriptableObject.cs
More file actions
60 lines (55 loc) · 1.81 KB
/
TaskFactoryScriptableObject.cs
File metadata and controls
60 lines (55 loc) · 1.81 KB
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
namespace Gilzoide.TaskFactoryObject
{
[CreateAssetMenuAttribute(fileName = "TaskFactory", menuName = "TaskFactoryObject/TaskFactory")]
public class TaskFactoryScriptableObject : ScriptableObject, ITaskFactoryObject
{
public TaskFactoryConfig TaskFactoryConfig;
public TaskFactoryConfig FactoryConfig => TaskFactoryConfig;
public TaskScheduler Scheduler
{
get
{
if (_taskScheduler == null)
{
_cancellationTokenSource = new CancellationTokenSource();
_taskScheduler = TaskFactoryConfig.CreateScheduler(_cancellationTokenSource.Token);
}
return _taskScheduler;
}
}
public TaskFactory Factory
{
get
{
if (_taskFactory == null)
{
TaskScheduler scheduler = Scheduler;
_taskFactory = TaskFactoryConfig.CreateFactory(scheduler, _cancellationTokenSource.Token);
}
return _taskFactory;
}
}
private CancellationTokenSource _cancellationTokenSource;
private TaskScheduler _taskScheduler;
private TaskFactory _taskFactory;
void OnDisable()
{
DestroyFactory();
}
[ContextMenu("Destroy TaskFactory")]
public void DestroyFactory()
{
if (_cancellationTokenSource != null)
{
_cancellationTokenSource.Cancel();
_cancellationTokenSource.Dispose();
_cancellationTokenSource = null;
}
_taskFactory = null;
_taskScheduler = null;
}
}
}