-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathGroupTemplate.cs
76 lines (65 loc) · 2.62 KB
/
GroupTemplate.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
using System.Collections.Generic;
using System.Linq;
using Invert.Core.GraphDesigner;
using uFrame.ECS;
using UniRx;
namespace Invert.uFrame.ECS.Templates
{
public partial class GroupTemplate
{
[ForEach("SelectComponents"), GenerateProperty, WithField]
public IEcsComponentManagerOf<_ITEMTYPE_> _Name_Manager { get; set; }
[GenerateMethod, AsOverride]
public virtual IEnumerable<IObservable<int>> Install(IComponentSystem componentSystem)
{
foreach (var item in Ctx.Data.Observables)
{
var node = item.Node;
Ctx._("componentSystem.PropertyChangedEvent<{0}, {1}>(_ => _.{2}Observable, (c, v) => {{ UpdateItem(c.EntityId); }})",
node.Name,
item.RelatedTypeName,
item.Name);
}
foreach (var item in SelectComponents)
{
Ctx._("{0} = componentSystem.RegisterComponent<{1}>()", item.Name + "Manager", item.Name);
Ctx._("yield return {0}.CreatedObservable.Select(_=>_.EntityId);", item.Name + "Manager");
Ctx._("yield return {0}.RemovedObservable.Select(_=>_.EntityId);", item.Name + "Manager");
}
yield break;
}
[GenerateMethod(CallBase = false), AsOverride]
public bool Match(int entityId)
{
Ctx.CurrentDeclaration._private_(typeof (int), "lastEntityId");
Ctx._("lastEntityId = entityId");
foreach (var item in SelectComponents)
{
Ctx.CurrentDeclaration._private_(item.Name, item.Name);
Ctx._if("({0} = {1}Manager[entityId]) == null", item.Name,item.Name)
.TrueStatements._("return false");
}
if (Ctx.Data.ExpressionNode != null)
{
var exp = Ctx._if(Ctx.Data.ExpressionNode.GetExpression());
exp.TrueStatements._("return true");
exp.FalseStatements._("return false");
}
//return base.Match(entityId);
Ctx._("return true");
return true;
}
[GenerateMethod, AsOverride]
public _CONTEXTITEM_ Select()
{
Ctx._("var item = new {0}();", new _CONTEXTITEM_().TheType(Ctx));
Ctx._("item.EntityId = lastEntityId");
foreach (var item in SelectComponents)
{
Ctx._("item.{0} = {1}", item.Name, item.Name);
}
Ctx._("return item");
return null;
}
}
}