-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTopBases.cs
108 lines (92 loc) · 3.61 KB
/
TopBases.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
using System.Collections.Concurrent;
using ExileCore;
using ExileCore.PoEMemory.Elements.InventoryElements;
using ExileCore.Shared.Cache;
using SharpDX;
using System.Collections.Generic;
using ExileCore.Shared.Enums;
using System.Linq;
using ImGuiNET;
namespace TopBases;
public class TopBases : BaseSettingsPlugin<TopBasesSettings>
{
private CachedValue<bool> ingameUIisVisible;
private static readonly ConcurrentDictionary<NormalInventoryItem, RectangleF> topBases =
new ConcurrentDictionary<NormalInventoryItem, RectangleF>();
public override void OnLoad()
{
CanUseMultiThreading = true;
}
public override bool Initialise()
{
var _ingameUI = GameController.IngameState.IngameUi;
ingameUIisVisible = new TimeCache<bool>(() =>
{
return _ingameUI.SyndicatePanel.IsVisibleLocal
|| _ingameUI.TreePanel.IsVisibleLocal
|| _ingameUI.Atlas.IsVisibleLocal;
}, 250);
return true;
}
public override Job Tick()
{
if (Settings.MultiThreading)
return GameController.MultiThreadManager.AddJob(TickLogic, Name);
TickLogic();
return null;
}
private void TickLogic()
{
var _playerInventory = GameController.Game.IngameState.IngameUi.InventoryPanel;
var _serverInventory = GameController.Game.IngameState.IngameUi.HaggleWindow;
var _topBasesList = new List<NormalInventoryItem>();
if (_playerInventory.IsVisibleLocal)
{
foreach (var item in _playerInventory[InventoryIndex.PlayerInventory].VisibleInventoryItems)
{
var BIT = GameController.Files.BaseItemTypes.Translate(item.Item.Path);
var _tags = BIT.Tags;
if (BIT == null) continue;
if (_tags.Contains("top_tier_base_item_type"))
_topBasesList.Add(item);
}
}
if (_serverInventory.IsVisibleLocal)
{
foreach (var item in _serverInventory.InventoryItems)
{
var BIT = GameController.Files.BaseItemTypes.Translate(item.Item.Path);
var _tags = BIT.Tags;
if (BIT == null) continue;
if (_tags.Contains("top_tier_base_item_type"))
_topBasesList.Add(item);
}
}
foreach (var key in topBases.Keys.Where(x => !_topBasesList.Contains(x)))
topBases.TryRemove(key, out _);
foreach (var item in _topBasesList)
{
var _rectangle = item?.GetClientRect();
if (_rectangle == null) continue;
topBases.AddOrUpdate(item, (RectangleF)_rectangle, (key, oldValue) => (RectangleF)_rectangle);
}
}
public override void Render()
{
if (ingameUIisVisible.Value) return;
var inventoryPanel = GameController.Game.IngameState.IngameUi.InventoryPanel;
var serverInventory = GameController.Game.IngameState.IngameUi.HaggleWindow;
foreach (var item in topBases.Keys)
{
var color = inventoryPanel.IsVisibleLocal && inventoryPanel[InventoryIndex.PlayerInventory].VisibleInventoryItems.Contains(item) ? Settings.InventoryColor.Value :
serverInventory.IsVisibleLocal && serverInventory.InventoryItems.Contains(item) ? Settings.ServerColor.Value :
Color.White;
Graphics.DrawFrame(topBases[item], color, Settings.BorderThickness);
}
}
public override void DrawSettings()
{
base.DrawSettings();
ImGui.Separator();
}
}