-
Notifications
You must be signed in to change notification settings - Fork 2
/
ToolSwitcherPlugin.cs
133 lines (111 loc) · 4.05 KB
/
ToolSwitcherPlugin.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using Sandbox.Game.World;
using System;
using VRage.Plugins;
using VRage.Utils;
using VRage.Game;
using VRage.Game.ModAPI;
using VRage.Game.Components;
using Sandbox.ModAPI;
using Sandbox.Game.Entities.Character;
using avaness.ToolSwitcherPlugin.Tools;
using Sandbox.Common.ObjectBuilders.Definitions;
using avaness.ToolSwitcherPlugin.Slot;
using VRage.Input;
using DarkHelmet.BuildVision2;
using avaness.ToolSwitcherPlugin.Definitions;
namespace avaness.ToolSwitcherPlugin
{
public class ToolSwitcherPlugin : IPlugin, IDisposable
{
[MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)]
public class ToolPluginSession : MySessionComponentBase
{
public static ToolPluginSession Instance;
public ToolDefinitions Definitions { get; } = new ToolDefinitions();
private bool start;
private ToolGroup group;
private PlayerCharacter inv;
public override void Init(MyObjectBuilder_SessionComponent sessionComponent)
{
Instance = this;
new BvApiClient();
BvApiClient.Init("ToolSwitcherPlugin");
MyLog.Default.WriteLineAndConsole("Tool Plugin Session loaded.");
}
protected override void UnloadData()
{
if (inv != null)
{
inv.Unload();
}
Instance = null;
}
public override void UpdateAfterSimulation()
{
if (MySession.Static == null)
return;
MyCharacter ch = MySession.Static.LocalCharacter;
if (ch == null)
return;
if (!start)
Start();
int input = MyInput.Static.DeltaMouseScrollWheelValue();
if (ch.ToolbarType == MyToolbarType.Character && inv.Toolbar != null && inv.Inventory != null && IsEnabled())
{
if(inv.Toolbar.NeedsTool)
{
inv.CheckForUpgrade = false;
group.EquipAny(inv);
}
else if(inv.CheckForUpgrade)
{
inv.CheckForUpgrade = false;
group.EquipUpgrade(inv);
}
if(input != 0)
{
group.EquipNext(inv, input > 0);
}
}
}
private void Start()
{
Definitions.Add<MyObjectBuilder_WelderDefinition>();
Definitions.Add<MyObjectBuilder_AngleGrinderDefinition>();
Definitions.Add<MyObjectBuilder_HandDrillDefinition>();
group = new ToolGroup(Definitions);
inv = new PlayerCharacter(MySession.Static.LocalHumanPlayer, Definitions);
DisableModVersion();
start = true;
}
private bool IsEnabled()
{
return MyAPIGateway.Gui.GetCurrentScreen == MyTerminalPageEnum.None && !MyAPIGateway.Gui.IsCursorVisible && !MyAPIGateway.Gui.ChatEntryVisible
&& !MyAPIGateway.Session.IsCameraUserControlledSpectator && string.IsNullOrWhiteSpace(MyAPIGateway.Gui.ActiveGamePlayScreen) && (!BvApiClient.Registered || !BvApiClient.Open);
}
private class ItemEvent
{
public HandItem Item { get; }
public ToolSlot Slot { get; }
public ItemEvent(HandItem item, ToolSlot slot)
{
Item = item;
Slot = slot;
}
}
private void DisableModVersion()
{
MyAPIGateway.Utilities.SendModMessage(2211605465, false);
}
}
public void Dispose()
{
}
public void Init(object gameInstance)
{
}
public void Update()
{
}
}
}