-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGroupUniRxAdditions.cs
executable file
·84 lines (77 loc) · 3.29 KB
/
GroupUniRxAdditions.cs
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
using System;
using UniRx;
namespace Entitas {
public class GroupChangedEventArgs<T> : EventArgs {
public Group group;
public Entity entity;
public int index;
public T component;
}
public class GroupUpdatedEventArgs<T> : EventArgs {
public Group group;
public Entity entity;
public int index;
public T previous;
public T current;
}
public partial class Group {
// Entity added observable
public IObservable<GroupChangedEventArgs<T>> OnEntityAddedAsObservable<T>(){
var entityAdded = Observable.FromEvent<GroupChanged, GroupChangedEventArgs<T>>(handler => {
GroupChanged entityAddedHandler = (group, entity, index, component) => {
if(component is T){
var args = new GroupChangedEventArgs<T>();
args.group = group;
args.entity = entity;
args.index = index;
args.component = (T)component;
handler(args);
}
};
return entityAddedHandler;
},
entityAddedHandler => OnEntityAdded += entityAddedHandler,
entityAddedHandler => OnEntityAdded -= entityAddedHandler);
return entityAdded;
}
// Entity removed observable
public IObservable<GroupChangedEventArgs<T>> OnEntityRemovedAsObservable<T>(){
var entityRemoved = Observable.FromEvent<GroupChanged, GroupChangedEventArgs<T>>(handler => {
GroupChanged entityRemovedHandler = (group, entity, index, component) => {
if(component is T){
var args = new GroupChangedEventArgs<T>();
args.group = group;
args.entity = entity;
args.index = index;
args.component = (T)component;
handler(args);
}
};
return entityRemovedHandler;
},
entityRemovedHandler => OnEntityRemoved += entityRemovedHandler,
entityRemovedHandler => OnEntityRemoved -= entityRemovedHandler);
return entityRemoved;
}
// Entity updated observable
public IObservable<GroupUpdatedEventArgs<T>> OnEntityUpdatedAsObservable<T>(){
var entityUpdated = Observable.FromEvent<GroupUpdated, GroupUpdatedEventArgs<T>>(handler => {
GroupUpdated entityRemovedHandler = (group, entity, index, previous, current) => {
if(previous is T){
var args = new GroupUpdatedEventArgs<T>();
args.group = group;
args.entity = entity;
args.index = index;
args.previous = (T)previous;
args.current = (T)current;
handler(args);
}
};
return entityRemovedHandler;
},
entityUpdatedHandler => OnEntityUpdated += entityUpdatedHandler,
entityUpdatedHandler => OnEntityUpdated -= entityUpdatedHandler);
return entityUpdated;
}
}
}