-
Notifications
You must be signed in to change notification settings - Fork 62
Expand file tree
/
Copy pathDynamicSyncFieldMBListBuilder.cs
More file actions
103 lines (88 loc) · 5.15 KB
/
DynamicSyncFieldMBListBuilder.cs
File metadata and controls
103 lines (88 loc) · 5.15 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
using GameInterface.DynamicSync.Templates;
using GameInterface.Services.ObjectManager;
using System;
using System.Collections.Generic;
using System.Reflection;
namespace GameInterface.DynamicSync.Builders
{
public class DynamicSyncFieldMBListBuilder : DynamicSyncBuilderBase
{
private readonly IObjectManager objectManager;
public DynamicSyncFieldMBListBuilder(IObjectManager objectManager, DynamicSyncRegistry dynamicSyncRegistry) : base(dynamicSyncRegistry)
{
this.objectManager = objectManager;
}
public string GetTranspiler(FieldInfo fieldInfo)
{
string setTemplate = DynamicSyncUtils.GetSetTranspiler(fieldInfo);
string changeTemplate = TemplateParser.Parse("Patches.FieldMBListChangeTranspilerTemplate", GetTemplateData(fieldInfo));
return string.Join(Environment.NewLine, setTemplate, changeTemplate);
}
public IEnumerable<string> GetMessages(FieldInfo fieldInfo)
{
var templateData = GetTemplateData(fieldInfo);
string localMessage = DynamicSyncUtils.GetLocalSetMessage(fieldInfo);
string localAddMessage = TemplateParser.Parse("Messages.LocalCollectionAddMessageTemplate", templateData);
string localRemoveMessage = TemplateParser.Parse("Messages.LocalCollectionRemoveMessageTemplate", templateData);
string networkMessage;
string networkAddMessage;
string networkRemoveMessage;
if (objectManager.IsTypeManaged(GetElementType(fieldInfo.FieldType)))
{
networkMessage = TemplateParser.Parse("Messages.NetworkCollectionSetReferenceMessageTemplate", templateData);
networkAddMessage = TemplateParser.Parse("Messages.NetworkCollectionAddReferenceMessageTemplate", templateData);
networkRemoveMessage = TemplateParser.Parse("Messages.NetworkCollectionRemoveReferenceMessageTemplate", templateData);
}
else
{
networkMessage = TemplateParser.Parse("Messages.NetworkCollectionSetValueMessageTemplate", templateData);
networkAddMessage = TemplateParser.Parse("Messages.NetworkCollectionAddValueMessageTemplate", templateData);
networkRemoveMessage = TemplateParser.Parse("Messages.NetworkCollectionRemoveValueMessageTemplate", templateData);
}
DynamicSyncConfiguration.ExportFile($"{fieldInfo.DeclaringType.Name}/{fieldInfo.DeclaringType.Name}_{fieldInfo.Name}_SetLocalMessage.cs", localMessage);
DynamicSyncConfiguration.ExportFile($"{fieldInfo.DeclaringType.Name}/{fieldInfo.DeclaringType.Name}_{fieldInfo.Name}_SetNetworkMessage.cs", networkMessage);
DynamicSyncConfiguration.ExportFile($"{fieldInfo.DeclaringType.Name}/{fieldInfo.DeclaringType.Name}_{fieldInfo.Name}_AddLocalMessage.cs", localAddMessage);
DynamicSyncConfiguration.ExportFile($"{fieldInfo.DeclaringType.Name}/{fieldInfo.DeclaringType.Name}_{fieldInfo.Name}_AddNetworkMessage.cs", networkAddMessage);
DynamicSyncConfiguration.ExportFile($"{fieldInfo.DeclaringType.Name}/{fieldInfo.DeclaringType.Name}_{fieldInfo.Name}_RemoveLocalMessage.cs", localRemoveMessage);
DynamicSyncConfiguration.ExportFile($"{fieldInfo.DeclaringType.Name}/{fieldInfo.DeclaringType.Name}_{fieldInfo.Name}_RemoveNetworkMessage.cs", networkRemoveMessage);
yield return localMessage;
yield return localAddMessage;
yield return localRemoveMessage;
yield return networkMessage;
yield return networkAddMessage;
yield return networkRemoveMessage;
}
public string GetSubscription(FieldInfo fieldInfo)
{
var templateData = GetTemplateData(fieldInfo);
if (objectManager.IsTypeManaged(GetElementType(fieldInfo.FieldType)))
return TemplateParser.Parse("Handlers.SubscribeCollectionReferenceTemplate", templateData);
else
return TemplateParser.Parse("Handlers.SubscribeCollectionValueTemplate", templateData);
}
private string GetMbListTypeName(Type type)
{
return $"MBList<{type.GetGenericArguments()[0].Name}>";
}
private Type GetElementType(Type type)
{
return type.GetGenericArguments()[0];
}
private object GetTemplateData(FieldInfo fieldInfo)
{
var serializers = GetSerializerMethodNames(GetElementType(fieldInfo.FieldType));
return new
{
MemberDeclaringType = fieldInfo.DeclaringType.Name,
MemberName = fieldInfo.Name,
MemberType = GetMbListTypeName(fieldInfo.FieldType),
ElementType = GetElementType(fieldInfo.FieldType).Name,
Libraries = DynamicSyncUtils.GetLibraries(fieldInfo),
SerializeMethod = serializers.serialize,
DeserializeMethod = serializers.deserialize,
ReadOnly = fieldInfo.IsInitOnly,
ReadOnlySetterIndex = fieldInfo.IsInitOnly ? GetReadOnlyFieldSetter(fieldInfo) : (int?)null
};
}
}
}