-
Notifications
You must be signed in to change notification settings - Fork 461
Expand file tree
/
Copy pathNetworkUpdateLoopSystem.cs
More file actions
129 lines (107 loc) · 4.1 KB
/
NetworkUpdateLoopSystem.cs
File metadata and controls
129 lines (107 loc) · 4.1 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using UnityEngine;
namespace MLAPI
{
/// <summary>
/// NetworkUpdateLoopBehaviour
/// Derive from this class if you need to register a NetworkedBehaviour based class
/// </summary>
public class NetworkUpdateLoopBehaviour:NetworkedBehaviour,INetworkUpdateLoopSystem
{
protected virtual Action InternalRegisterNetworkUpdateStage(NetworkUpdateManager.NetworkUpdateStages stage )
{
return null;
}
public Action RegisterUpdate(NetworkUpdateManager.NetworkUpdateStages stage )
{
return InternalRegisterNetworkUpdateStage(stage);
}
protected void RegisterUpdateLoopSystem()
{
NetworkUpdateManager.NetworkLoopRegistration(this);
}
protected void OnNetworkLoopSystemRemove()
{
if(onNetworkLoopSystemDestroyed != null)
{
onNetworkLoopSystemDestroyed.Invoke(this);
}
}
Action<INetworkUpdateLoopSystem> onNetworkLoopSystemDestroyed;
public void RegisterUpdateLoopSystemDestroyCallback(Action<INetworkUpdateLoopSystem> networkLoopSystemDestroyedCallback)
{
onNetworkLoopSystemDestroyed = networkLoopSystemDestroyedCallback;
}
}
/// <summary>
/// UpdateLoopBehaviour
/// Derive from this class if you only require MonoBehaviour functionality
/// </summary>
public class UpdateLoopBehaviour:MonoBehaviour,INetworkUpdateLoopSystem
{
protected virtual Action InternalRegisterNetworkUpdateStage(NetworkUpdateManager.NetworkUpdateStages stage )
{
return null;
}
public Action RegisterUpdate(NetworkUpdateManager.NetworkUpdateStages stage )
{
return InternalRegisterNetworkUpdateStage(stage);
}
protected void RegisterUpdateLoopSystem()
{
NetworkUpdateManager.NetworkLoopRegistration(this);
}
protected void OnNetworkLoopSystemRemove()
{
if(onNetworkLoopSystemDestroyed != null)
{
onNetworkLoopSystemDestroyed.Invoke(this);
}
}
Action<INetworkUpdateLoopSystem> onNetworkLoopSystemDestroyed;
public void RegisterUpdateLoopSystemDestroyCallback(Action<INetworkUpdateLoopSystem> networkLoopSystemDestroyedCallback)
{
onNetworkLoopSystemDestroyed = networkLoopSystemDestroyedCallback;
}
}
/// <summary>
/// GenericUpdateLoopSystem
/// Derive from this class for generic (non-MonoBehaviour) classes
/// </summary>
public class GenericUpdateLoopSystem:INetworkUpdateLoopSystem
{
protected virtual Action InternalRegisterNetworkUpdateStage(NetworkUpdateManager.NetworkUpdateStages stage )
{
return null;
}
public Action RegisterUpdate(NetworkUpdateManager.NetworkUpdateStages stage )
{
return InternalRegisterNetworkUpdateStage(stage);
}
protected void RegisterUpdateLoopSystem()
{
NetworkUpdateManager.NetworkLoopRegistration(this);
}
protected void OnNetworkLoopSystemRemove()
{
if(onNetworkLoopSystemDestroyed != null)
{
onNetworkLoopSystemDestroyed.Invoke(this);
}
}
Action<INetworkUpdateLoopSystem> onNetworkLoopSystemDestroyed;
public void RegisterUpdateLoopSystemDestroyCallback(Action<INetworkUpdateLoopSystem> networkLoopSystemDestroyedCallback)
{
onNetworkLoopSystemDestroyed = networkLoopSystemDestroyedCallback;
}
}
/// <summary>
/// INetworkUpdateLoopSystem
/// Use this interface if you need a custom class beyond the scope of GenericUpdateLoopSystem, UpdateLoopBehaviour, and NetworkUpdateLoopBehaviour
/// </summary>
public interface INetworkUpdateLoopSystem
{
Action RegisterUpdate(NetworkUpdateManager.NetworkUpdateStages stage );
void RegisterUpdateLoopSystemDestroyCallback(Action<INetworkUpdateLoopSystem> networkLoopSystemDestroyedCallbsack);
}
}