-
Notifications
You must be signed in to change notification settings - Fork 2
/
ComponentGroupManagerTemplate.cs
106 lines (86 loc) · 3.93 KB
/
ComponentGroupManagerTemplate.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using System;
using System.CodeDom;
using System.Linq;
using Invert.Core.GraphDesigner;
using uFrame.ECS;
namespace Invert.uFrame.ECS.Templates
{
//public partial class ComponentGroupManagerTemplate
//{
// [GenerateMethod]
// public virtual bool Filter(_ITEMTYPE_ item)
// {
// var filterBegin = Ctx.Data.FilterOutputSlot.OutputTo<ActionNode>();
// if (filterBegin != null)
// {
// filterBegin.WriteCode(Ctx);
// }
// //Ctx.CurrentMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(int), "entityId"));
// Ctx._("return true");
// return false;
// }
// [GenerateMethod]
// public virtual _ITEMTYPE_ CreateGroup()
// {
// //var validateInvoke = new CodeMethodInvokeExpression(
// // new CodeThisReferenceExpression(),
// // "Validate");
// Ctx.CurrentMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(int), "entityId"));
// foreach (var component in Components)
// {
// Ctx.CurrentMethod.Parameters.Add(new CodeParameterDeclarationExpression(component.Name,
// component.Name.ToLower()));
// //validateInvoke.Parameters.Add(new CodeVariableReferenceExpression(component.Name.ToLower()));
// }
// //var condition = new CodeConditionStatement(
// // validateInvoke
// // );
// Ctx._("var group = this.gameObject.AddComponent<{0}>()", Ctx.Data.Name);
// Ctx._("group.EntityId = entityId");
// foreach (var component in Components)
// {
// Ctx._("group.{0} = {1}", component.Name, component.Name.ToLower());
// }
// Ctx._("return group");
// //Ctx.CurrentStatements.Add(condition);
// //Ctx._("return null");
// return null;
// }
// [GenerateMethod, AsOverride]
// public void ComponentCreated(IEcsComponent ecsComponent)
// {
// Ctx._if("Ids.Contains(ecsComponent.EntityId)").TrueStatements._("return");
// //Ctx._if("ecsComponent is ComponentGroup").TrueStatements._("return");
// foreach (var component in Components)
// {
// Ctx._("{0} {1}", component.Name, component.Name.ToLower());
// }
// foreach (var component in Components)
// {
// Ctx._if("!ComponentSystem.TryGetComponent(ecsComponent.EntityId, out {0})", component.Name.ToLower())
// .TrueStatements
// ._("return");
// }
// Ctx._("Ids.Add(ecsComponent.EntityId)");
// CodeMethodInvokeExpression invokeAdd = new CodeMethodInvokeExpression(
// new CodeThisReferenceExpression(),
// "CreateGroup"
// );
// var groupVar = new CodeVariableDeclarationStatement(Ctx.Data.Name, "group", invokeAdd);
// invokeAdd.Parameters.Add(new CodeVariableReferenceExpression("ecsComponent.EntityId"));
// invokeAdd.Parameters.AddRange(
// Components.Select(_ => new CodeVariableReferenceExpression(_.Name.ToLower()))
// .Cast<CodeExpression>().ToArray()
// );
// Ctx.CurrentStatements.Add(groupVar);
// Ctx._("this.OnEvent<ComponentDestroyedEvent>().First(p=> p.Component == {0}).Subscribe(_=>{{ Ids.Remove(group.EntityId); DestroyImmediate(group); }}).DisposeWith(this);",
// String.Join("|| p.Component == ", Components.Select(p => p.Name.ToLower()).ToArray())
// );
// // Put any observables here EXAMPLE:
// //damageable.HealthObservable.Subscribe(health =>
// //{
// // UpdateGroup(group);
// //}).DisposeWith(damageable);
// }
//}
}