1+ local SLDataText = LibStub (" AceAddon-3.0" ):GetAddon (" SLDataText" )
2+ local L = LibStub (" AceLocale-3.0" ):GetLocale (" SLDataText" )
3+ local media = LibStub (" LibSharedMedia-3.0" )
4+ local justTable , strataTable , pointTable = SLDataText .just , SLDataText .strata , SLDataText .point
5+ local db
6+
7+ local MODNAME = " Artifact"
8+ local Artifact = SLDataText :NewModule (MODNAME , " AceEvent-3.0" )
9+
10+ local optGetter , optSetter
11+ do
12+ function optGetter (info )
13+ local key = info [# info ]
14+ return db [key ]
15+ end
16+
17+ function optSetter (info , value )
18+ local key = info [# info ]
19+ db [key ] = value
20+ SLDataText :RefreshModule (Artifact )
21+ end
22+ end
23+
24+ local options
25+ local function getOptions ()
26+ if ( not options ) then options = {
27+ type = " group" ,
28+ name = L [" Artifact" ],
29+ arg = MODNAME ,
30+ get = optGetter ,
31+ set = optSetter ,
32+ args = {
33+ genHeader = {
34+ type = " header" ,
35+ name = L [" GenCorSet" ],
36+ order = 25 ,
37+ },
38+ enabled = {
39+ type = " toggle" ,
40+ name = L [" Enabled" ],
41+ desc = L [" EnabledDesc" ],
42+ get = function () return SLDataText :GetModuleEnabled (MODNAME ) end ,
43+ set = function (info , value )
44+ SLDataText :SetModuleEnabled (MODNAME , value )
45+ if ( SLDataText :GetModuleEnabled (MODNAME ) ) then
46+ Artifact :PLAYER_ENTERING_WORLD ()
47+ end
48+ end ,
49+ order = 50 ,
50+ },
51+ noCombatHide = {
52+ type = " toggle" ,
53+ name = L [" SIC" ],
54+ desc = L [" SICDesc" ],
55+ order = 100 ,
56+ },
57+ dispHeader = {
58+ type = " header" ,
59+ name = L [" DispSet" ],
60+ order = 275 ,
61+ },
62+ secText = {
63+ type = " input" ,
64+ name = L [" SecText" ],
65+ desc = L [" SecTextDesc" ],
66+ width = " double" ,
67+ order = 300 ,
68+ },
69+ useGlobalFont = {
70+ type = " toggle" ,
71+ name = L [" UseGblFont" ],
72+ desc = L [" UseGblFontDesc" ],
73+ order = 300 ,
74+ },
75+ useGlobalFontSize = {
76+ type = " toggle" ,
77+ name = L [" UseGblFSize" ],
78+ desc = L [" UseGblFSizeDesc" ],
79+ order = 350 ,
80+ },
81+ fontFace = {
82+ type = " select" ,
83+ name = L [" Font" ],
84+ desc = L [" FontDesc" ],
85+ disabled = function ()
86+ local isTrue
87+ if ( db .useGlobalFont ) then isTrue = true else isTrue = false end
88+ return isTrue
89+ end ,
90+ values = media :List (" font" ),
91+ get = function ()
92+ for k , v in pairs (media :List (" font" )) do
93+ if db .fontFace == v then
94+ return k
95+ end
96+ end
97+ end ,
98+ set = function (_ , font )
99+ local list = media :List (" font" )
100+ db .fontFace = list [font ]
101+ SLDataText :RefreshModule (Artifact )
102+ end ,
103+ width = " double" ,
104+ order = 600 ,
105+ },
106+ fontSize = {
107+ type = " range" ,
108+ name = L [" FontSize" ],
109+ desc = L [" FontSizeDesc" ],
110+ disabled = function ()
111+ local isTrue
112+ if ( db .useGlobalFontSize ) then isTrue = true else isTrue = false end
113+ return isTrue
114+ end ,
115+ min = 6 , max = 36 , step = 1 ,
116+ width = " double" ,
117+ order = 650 ,
118+ },
119+ posHeader = {
120+ type = " header" ,
121+ name = L [" LaySet" ],
122+ order = 700 ,
123+ },
124+ justify = {
125+ type = " select" ,
126+ name = L [" TextJust" ],
127+ desc = L [" TextJustDesc" ],
128+ values = justTable ,
129+ width = " double" ,
130+ order = 750 ,
131+ },
132+ anchor = {
133+ type = " input" ,
134+ name = L [" ParFrm" ],
135+ desc = L [" ParFrmDesc" ],
136+ get = function () return db .anchor end ,
137+ width = " double" ,
138+ order = 800 ,
139+ },
140+ anchorFrom = {
141+ type = " select" ,
142+ name = L [" AnchFrom" ],
143+ desc = L [" AnchFromDesc" ],
144+ values = pointTable ,
145+ get = function () return db .anchorFrom end ,
146+ width = " double" ,
147+ order = 900 ,
148+ },
149+ offX = {
150+ type = " input" ,
151+ name = L [" XOff" ],
152+ desc = L [" XOffDesc" ],
153+ get = function () return tostring (db .offX ) end ,
154+ width = " double" ,
155+ order = 1000 ,
156+ },
157+ offY = {
158+ type = " input" ,
159+ name = L [" YOff" ],
160+ desc = L [" YOffDesc" ],
161+ get = function () return tostring (db .offY ) end ,
162+ width = " double" ,
163+ order = 1100 ,
164+ },
165+ strata = {
166+ type = " select" ,
167+ name = L [" Strata" ],
168+ desc = L [" StrataDesc" ],
169+ values = strataTable ,
170+ width = " double" ,
171+ order = 1600 ,
172+ },
173+ },
174+ }
175+ end
176+
177+ return options
178+ end
179+
180+ local int = 1
181+ local f
182+ local function buildModule (self )
183+ if ( not f ) then f = CreateFrame (" Frame" ) end
184+ if ( not self .frame ) then self .frame = CreateFrame (" Frame" , " SLDT_Artifact" , UIParent ) end
185+ if ( not self .string ) then self .string = self .frame :CreateFontString (nil , " OVERLAY" ) end
186+
187+ f :SetScript (" OnUpdate" , function (self , elapsed )
188+ int = int - elapsed
189+ if ( int <= 0 ) then
190+ Artifact :Refresh ()
191+ int = 1
192+ end
193+ end )
194+
195+ Artifact :RegisterEvent (" PLAYER_ENTERING_WORLD" )
196+ end
197+
198+ function Artifact :PLAYER_ENTERING_WORLD ()
199+ SLDataText :RefreshModule (self )
200+ self :UnregisterEvent (" PLAYER_ENTERING_WORLD" )
201+ end
202+
203+ function Artifact :OnInitialize ()
204+ self .db = SLDataText .db :RegisterNamespace (MODNAME )
205+ self .db :RegisterDefaults ({
206+ profile = {
207+ noCombatHide = true ,
208+ fontFace = " Arial Narrow" ,
209+ useGlobalFont = true ,
210+ fontSize = 12 ,
211+ useGlobalFontSize = false ,
212+ justify = " CENTER" ,
213+ anchorPoint = " CENTER" ,
214+ anchor = " UIParent" ,
215+ anchorFrom = " CENTER" ,
216+ offX = 200 ,
217+ offY = - 20 ,
218+ strata = " BACKGROUND" ,
219+ },
220+ })
221+ db = self .db .profile
222+ if ( not self .isMoving ) then self .isMoving = false end
223+ self :SetEnabledState (SLDataText :GetModuleEnabled (MODNAME ))
224+ SLDataText :RegisterModuleOptions (MODNAME , getOptions )
225+ end
226+
227+ function Artifact :OnEnable ()
228+ buildModule (self )
229+ if ( not self .frame :IsShown () ) then self .frame :Show () end
230+ end
231+
232+ function Artifact :OnDisable ()
233+ self :UnregisterEvent (" PLAYER_ENTERING_WORLD" )
234+ f :SetScript (" OnUpdate" , nil )
235+ if ( self .frame :IsShown () ) then self .frame :Hide () end
236+ end
237+
238+ function Artifact :Refresh ()
239+ if (not HasArtifactEquipped ()) then
240+ return
241+ end
242+ local sec_text = db .secText
243+ local per_text
244+ local current_ap = select (5 , C_ArtifactUI .GetEquippedArtifactInfo ())
245+ local traits_spent = select (6 , C_ArtifactUI .GetEquippedArtifactInfo ())
246+
247+ local available = 0
248+ local next_rank_cost = C_ArtifactUI .GetCostForPointAtRank (traits_spent + available ) or 0
249+
250+ while current_ap >= next_rank_cost do
251+ current_ap = current_ap - next_rank_cost
252+ available = available + 1
253+ next_rank_cost = C_ArtifactUI .GetCostForPointAtRank (traits_spent + available ) or 0
254+ end
255+
256+ per_rnd = round ((current_ap / next_rank_cost ) * 100 , 1 )
257+
258+ if string.len (sec_text ) > 0 then
259+ local color = SLDataText :GetColor ()
260+ sec_text = " |cff" .. color .. sec_text .. " |r "
261+ end
262+
263+ self .string :SetFormattedText (sec_text .. per_rnd .. " %% (" .. available .. " )" )
264+ end
0 commit comments