forked from ngld/OverlayPlugin
-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathTriggIntegration.cs
More file actions
113 lines (98 loc) · 3.96 KB
/
TriggIntegration.cs
File metadata and controls
113 lines (98 loc) · 3.96 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Advanced_Combat_Tracker;
using Newtonsoft.Json.Linq;
namespace RainbowMage.OverlayPlugin
{
class TriggIntegration
{
private PluginMain _plugin;
public delegate void CustomCallbackDelegate(object o, string param);
private ActPluginData GetPluginData()
{
return ActGlobals.oFormActMain.ActPlugins.FirstOrDefault(plugin =>
{
if (!plugin.cbEnabled.Checked || plugin.pluginObj == null)
return false;
return plugin.lblPluginTitle.Text == "Triggernometry.dll";
});
}
public TriggIntegration(TinyIoCContainer container)
{
var logger = container.Resolve<ILogger>();
_plugin = container.Resolve<PluginMain>();
try
{
var trigg = GetPluginData();
if (trigg == null || trigg.pluginObj == null)
return;
var triggType = trigg.pluginObj.GetType();
var deleType = triggType.GetNestedType("CustomCallbackDelegate")
?? throw new MissingMemberException(triggType.FullName, "CustomCallbackDelegate");
var registerType = triggType.GetMethod(
"RegisterNamedCallback",
BindingFlags.Instance | BindingFlags.Public,
null,
new[] { typeof(string), deleType, typeof(object), typeof(string) },
null)
?? throw new MissingMethodException(triggType.FullName, "RegisterNamedCallback(string, CustomCallbackDelegate, object, string)");
var registrant = "OverlayPlugin";
var sendDele = Delegate.CreateDelegate(deleType, this, typeof(TriggIntegration).GetMethod("SendOverlayMessage"));
registerType.Invoke(trigg.pluginObj, new object[] { "OverlayPluginMessage", sendDele, null, registrant });
var hideDele = Delegate.CreateDelegate(deleType, this, typeof(TriggIntegration).GetMethod("HideOverlay"));
registerType.Invoke(trigg.pluginObj, new object[] { "HideOverlay", hideDele, null, registrant });
var showDele = Delegate.CreateDelegate(deleType, this, typeof(TriggIntegration).GetMethod("ShowOverlay"));
registerType.Invoke(trigg.pluginObj, new object[] { "ShowOverlay", showDele, null, registrant });
}
catch (Exception ex)
{
logger.Log(LogLevel.Error, $"Failed to register Triggernometry callback: {ex}");
}
}
public void SendOverlayMessage(object _, string msg)
{
var pos = msg.IndexOf('|');
if (pos < 1) return;
var overlayName = msg.Substring(0, pos);
msg = msg.Substring(pos + 1);
foreach (var overlay in _plugin.Overlays)
{
if (overlay.Name == overlayName)
{
((IEventReceiver)overlay).HandleEvent(JObject.FromObject(new
{
type = "Triggernometry",
message = msg
}));
break;
}
}
}
public void HideOverlay(object _, string msg)
{
foreach (var overlay in _plugin.Overlays)
{
if (overlay.Name == msg)
{
overlay.Config.IsVisible = false;
break;
}
}
}
public void ShowOverlay(object _, string msg)
{
foreach (var overlay in _plugin.Overlays)
{
if (overlay.Name == msg)
{
overlay.Config.IsVisible = true;
break;
}
}
}
}
}