lotrointerface.com
Search Downloads

LoTROInterface SVN KragenBars

[/] [trunk/] [KragenPlugs/] [KragenBars/] [SkillSlot.lua] - Blame information for rev 127

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 Kragenwar-3044
import "Turbine.UI";
2 Kragenwar-3044
import "Turbine.UI.Lotro";
3 Kragenwar-3044
import "KragenPlugs.Utils";
4 Kragenwar-3044
import "KragenPlugs.Utils.Extensions";
5 Kragenwar-3044
import "KragenPlugs.KragenBars";
6 Kragenwar-3044
 
7 Kragenwar-3044
SkillSlot = class ( KragenPlugs.Utils.Extensions.SimpleWindow );
8 Kragenwar-3044
 
9 Kragenwar-3044
function SkillSlot:Constructor ( parent, x, y, active, level, hex )
10 Kragenwar-3044
        KragenPlugs.Utils.Extensions.SimpleWindow.Constructor( self );
11 Kragenwar-3044
 
12 Kragenwar-3044
        -- declare variables
13 Kragenwar-3044
        self.parent     = parent;
14 Kragenwar-3044
    self.x              = x;
15 Kragenwar-3044
        self.y          = y;
16 Kragenwar-3044
        self.active     = active;
17 Kragenwar-3044
        self.level              = level;
18 Kragenwar-3044
        self.hex                = hex;
19 Kragenwar-3044
        self.effectid   = 0;
20 Kragenwar-3044
        self.state      = false;
21 Kragenwar-3044
        self.hover              = false;
22 Kragenwar-3044
        self.incombat   = true;
23 Kragenwar-3044
        self.outcombat  = true;
24 99 Kragenwar-3044
        self.bordervisible = false;
25 82 Kragenwar-3044
        self.edit               = false;
26 87 Kragenwar-3044
        self.swap = true;
27 6 Kragenwar-3044
 
28 Kragenwar-3044
        -- convert level and hex into a table
29 Kragenwar-3044
        if (type(level) ~= "table") then
30 Kragenwar-3044
                self.level = { level };
31 Kragenwar-3044
                self.hex    = { hex };
32 Kragenwar-3044
        else
33 Kragenwar-3044
            self.level = level;
34 Kragenwar-3044
            self.hex = hex;
35 Kragenwar-3044
        end
36 Kragenwar-3044
 
37 Kragenwar-3044
        -- QUICKSLOT
38 Kragenwar-3044
        self.quickslot = Turbine.UI.Lotro.Quickslot();
39 Kragenwar-3044
        self.quickslot:SetParent(self);
40 21 Kragenwar-3044
        self.quickslot:SetSize(35, 35);
41 6 Kragenwar-3044
        self.quickslot:SetZOrder(0);
42 Kragenwar-3044
        self.quickslot:SetVisible(true);
43 Kragenwar-3044
 
44 Kragenwar-3044
        -- TIMER
45 Kragenwar-3044
        self.timer = Timer();
46 Kragenwar-3044
        self.timerOn = true;
47 Kragenwar-3044
        self.timerEnd = true;
48 Kragenwar-3044
 
49 Kragenwar-3044
        -- TIMER EVENT
50 Kragenwar-3044
        self.timer.TimerElapsed = function ()
51 Kragenwar-3044
        if (self.timerEnd) then
52 Kragenwar-3044
                self:SetActive( true );
53 19 Kragenwar-3044
                        self:SetHover( true );
54 6 Kragenwar-3044
                else
55 Kragenwar-3044
                    self:SetActive( false );
56 Kragenwar-3044
                    self.parent:SetZOrder(-10);
57 Kragenwar-3044
                end
58 Kragenwar-3044
        end
59 Kragenwar-3044
 
60 77 Kragenwar-3044
        -- COLOR BAND
61 Kragenwar-3044
        self.border = Turbine.UI.Window();
62 Kragenwar-3044
        self.bordervisible = true;
63 Kragenwar-3044
        self.border:SetSize(36, 36);
64 Kragenwar-3044
        self.border:SetPosition(self:PointToScreen(1, 1));
65 Kragenwar-3044
        self.border:SetZOrder(-20);
66 Kragenwar-3044
        self.border:SetVisible(false);
67 Kragenwar-3044
 
68 6 Kragenwar-3044
        -- set properties
69 Kragenwar-3044
        self:SetParent( parent );
70 Kragenwar-3044
        self:SetPosition( (x - 1) * 35, (y - 1) * 35 );
71 21 Kragenwar-3044
        self:SetSize(35, 35);
72 6 Kragenwar-3044
        self:SetVisible(true);
73 Kragenwar-3044
        self:SetFadeSpeed(.3);
74 Kragenwar-3044
        self:SetActive(self.active);
75 Kragenwar-3044
 
76 95 Kragenwar-3044
        self.OnAlt = function(bol)
77 Kragenwar-3044
                if (bol) then
78 Kragenwar-3044
                        self:SetOpacity(1);
79 Kragenwar-3044
                        self.edit = true;
80 Kragenwar-3044
                        self:ResetQuickslot();
81 Kragenwar-3044
                else
82 Kragenwar-3044
                        if (not KragenBars.edit) then
83 Kragenwar-3044
                                self.edit = false;
84 Kragenwar-3044
                                self:Refresh();
85 Kragenwar-3044
                        end
86 Kragenwar-3044
                end
87 94 Kragenwar-3044
        end
88 Kragenwar-3044
 
89 6 Kragenwar-3044
        -- EVENTS
90 Kragenwar-3044
        -- hover mouse enter event
91 Kragenwar-3044
        self.quickslot.MouseEnter = function(sender,args)
92 19 Kragenwar-3044
        if (self.hover and self.active and ( ( vars.player:IsInCombat() and self.incombat ) or ( not vars.player:IsInCombat() and self.outcombat ) )) then
93 6 Kragenwar-3044
                        self:SetOpacity(settings.opacity);
94 Kragenwar-3044
                end
95 95 Kragenwar-3044
                altCheck.Add(self.OnAlt);
96 6 Kragenwar-3044
        end
97 Kragenwar-3044
 
98 Kragenwar-3044
        -- hover mouse leave event
99 Kragenwar-3044
        self.quickslot.MouseLeave = function(sender,args)
100 19 Kragenwar-3044
            if (self.hover and self.active and ( ( vars.player:IsInCombat() and self.incombat ) or ( not vars.player:IsInCombat() and self.outcombat ) )) then
101 6 Kragenwar-3044
                        self:SetOpacity(settings.opacity * .5);
102 Kragenwar-3044
                end
103 95 Kragenwar-3044
                altCheck.Clear();
104 6 Kragenwar-3044
        end
105 Kragenwar-3044
 
106 87 Kragenwar-3044
        self.clicked = false;
107 Kragenwar-3044
        self.quickslot.MouseDown = function(sender, args)
108 Kragenwar-3044
                self.clicked = true;
109 Kragenwar-3044
        end
110 Kragenwar-3044
 
111 Kragenwar-3044
        self.quickslot.DragLeave = function(sender, args)
112 Kragenwar-3044
                if (not settings.lockslots and self.clicked) then
113 Kragenwar-3044
                        self.clicked = false;
114 Kragenwar-3044
                        if (self:IsAltKeyDown()) then
115 Kragenwar-3044
                                self:SetParent(limbo);
116 Kragenwar-3044
                                self.parent = nil;
117 92 Kragenwar-3044
                                self:SetPosition(0,0);
118 Kragenwar-3044
                                self.x = 1;
119 Kragenwar-3044
                                self.y = 1;
120 87 Kragenwar-3044
                        end
121 Kragenwar-3044
                end
122 Kragenwar-3044
        end
123 Kragenwar-3044
 
124 6 Kragenwar-3044
        -- swap positions when skill is dropped on the skill slot
125 Kragenwar-3044
        self.quickslot.DragDrop = function (sender, args)
126 Kragenwar-3044
                self:ResetQuickslot();
127 78 Kragenwar-3044
        --if (args.DragDropInfo:GetShortcut():GetItem() == nil) then
128 82 Kragenwar-3044
                        KragenBars:SwapSlots(self, args.DragDropInfo:GetShortcut():GetData(), args.DragDropInfo:GetShortcut():GetType());
129 78 Kragenwar-3044
                --else
130 Kragenwar-3044
                        --KragenBars:SwapSlots(self, args.DragDropInfo:GetShortcut():GetItem():GetName(), true);
131 Kragenwar-3044
                --end
132 6 Kragenwar-3044
        end
133 Kragenwar-3044
 
134 Kragenwar-3044
end
135 Kragenwar-3044
 
136 Kragenwar-3044
-- SET ACTIVE (To be used in place of SetVisible)
137 Kragenwar-3044
function SkillSlot:SetActive( active )
138 Kragenwar-3044
        self.active = active;
139 82 Kragenwar-3044
 
140 Kragenwar-3044
        if (not self.edit) then
141 Kragenwar-3044
                if ( self.active and ( ( vars.player:IsInCombat() and self.incombat ) or ( not vars.player:IsInCombat() and self.outcombat ) ) ) then
142 Kragenwar-3044
                        if (self.hover) then
143 Kragenwar-3044
                                self:SetOpacity(settings.opacity * .5)
144 Kragenwar-3044
                        else
145 Kragenwar-3044
                                self:SetOpacity(settings.opacity)
146 Kragenwar-3044
                        end
147 95 Kragenwar-3044
                        self.border:SetVisible(self.bordervisible);
148 82 Kragenwar-3044
                        self:ResetQuickslot();
149 6 Kragenwar-3044
                else
150 82 Kragenwar-3044
                        self:SetOpacity(0);
151 Kragenwar-3044
                        self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( Turbine.UI.Lotro.ShortcutType.Undefined, "" ) );
152 Kragenwar-3044
                        self.border:SetVisible(false);
153 6 Kragenwar-3044
                end
154 Kragenwar-3044
        end
155 Kragenwar-3044
 
156 Kragenwar-3044
end
157 Kragenwar-3044
 
158 Kragenwar-3044
-- SET STATE (To be used to track the effect state of buffs/debuffs)
159 Kragenwar-3044
function SkillSlot:SetState( state, visible, id )
160 Kragenwar-3044
 
161 Kragenwar-3044
    -- update state and effect id
162 Kragenwar-3044
        if ( state ) then
163 Kragenwar-3044
                self.state = true;
164 Kragenwar-3044
                self.effectid = id;
165 Kragenwar-3044
        else
166 Kragenwar-3044
                if ( id == self.effectid ) then
167 Kragenwar-3044
                    self.state = false;
168 Kragenwar-3044
                        self.effectid = 0;
169 Kragenwar-3044
                end
170 Kragenwar-3044
 
171 Kragenwar-3044
        end
172 Kragenwar-3044
 
173 Kragenwar-3044
    -- update visibility
174 Kragenwar-3044
        if (self.effectid == 0 or state) then
175 Kragenwar-3044
        self:SetActive(visible);
176 Kragenwar-3044
        end
177 Kragenwar-3044
end
178 Kragenwar-3044
 
179 Kragenwar-3044
-- RESET QUICKSLOT SHORTCUT AND CHECK LEVEL
180 Kragenwar-3044
function SkillSlot:ResetQuickslot()
181 127 Valdacil-446
        local highlevel = 0;
182 83 Kragenwar-3044
        if (self.active or self.edit) then
183 127 Valdacil-446
                if (type(self.level) == "table") then
184 Valdacil-446
                        for k,v in pairs(self.level) do
185 Valdacil-446
                                if (v > highlevel and vars.playerlevel >= v) then
186 Valdacil-446
                                        self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( 6.000000, self.hex[k] ) );
187 Valdacil-446
                                        highlevel = v;
188 Valdacil-446
                                end
189 Valdacil-446
                        end
190 Valdacil-446
                end
191 Valdacil-446
                if (highlevel == 0) then
192 83 Kragenwar-3044
                        self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( Turbine.UI.Lotro.ShortcutType.Undefined, "" ) );
193 Kragenwar-3044
                        self:SetOpacity(0);
194 Kragenwar-3044
                end
195 6 Kragenwar-3044
        end
196 Kragenwar-3044
end
197 Kragenwar-3044
 
198 78 Kragenwar-3044
function SkillSlot:CheckShortcut(code)
199 Kragenwar-3044
        local retval = false;
200 87 Kragenwar-3044
        if (self.swap) then
201 Kragenwar-3044
                if(type(self.hex) == "table") then
202 127 Valdacil-446
                        for k,v in pairs(self.hex) do
203 Valdacil-446
                                if (v == code) then
204 Valdacil-446
                                        retval = true;
205 Valdacil-446
                                end
206 87 Kragenwar-3044
                        end
207 Kragenwar-3044
                else
208 Kragenwar-3044
                        if (self.hex == code) then
209 Kragenwar-3044
                                retval = true;
210 Kragenwar-3044
                        end
211 78 Kragenwar-3044
                end
212 Kragenwar-3044
        end
213 Kragenwar-3044
        return retval;
214 Kragenwar-3044
end
215 Kragenwar-3044
 
216 6 Kragenwar-3044
-- SET HOVER (Set the hover state)
217 Kragenwar-3044
function SkillSlot:SetHover(bol)
218 Kragenwar-3044
        self.hover = bol;
219 Kragenwar-3044
 
220 19 Kragenwar-3044
        if (self.active and ( ( vars.player:IsInCombat() and self.incombat ) or ( not vars.player:IsInCombat() and self.outcombat ) )) then
221 6 Kragenwar-3044
                if (bol) then
222 Kragenwar-3044
                        self:SetOpacity(settings.opacity * .5);
223 Kragenwar-3044
                else
224 Kragenwar-3044
                        self:SetOpacity(settings.opacity);
225 Kragenwar-3044
                end
226 Kragenwar-3044
        end
227 Kragenwar-3044
end
228 Kragenwar-3044
 
229 Kragenwar-3044
-- SET COMBAT (Sets the combat visibility variables)
230 Kragenwar-3044
function SkillSlot:SetCombat( incombat, outcombat )
231 Kragenwar-3044
        self.incombat   = incombat;
232 Kragenwar-3044
        self.outcombat  = outcombat;
233 Kragenwar-3044
        self:SetActive(self.active);
234 Kragenwar-3044
end
235 Kragenwar-3044
 
236 Kragenwar-3044
-- REFRESH COMBAT (Refresh Visibility for combat changes)
237 Kragenwar-3044
function SkillSlot:RefreshCombat()
238 Kragenwar-3044
        self:SetActive( self.active );
239 Kragenwar-3044
end
240 Kragenwar-3044
 
241 Kragenwar-3044
-- LOAD POSITION, RECALL SAVED POSITION AND PARENT
242 Kragenwar-3044
function SkillSlot:LoadPosition(data)
243 Kragenwar-3044
        self.x = data.pos[1];
244 Kragenwar-3044
        self.y = data.pos[2];
245 Kragenwar-3044
        self:SetPosition( (self.x - 1) * 35, (self.y - 1) * 35 );
246 Kragenwar-3044
    self.border:SetPosition(self:PointToScreen(1, 1));
247 Kragenwar-3044
 
248 48 Kragenwar-3044
        if (data.parent == nil) then
249 Kragenwar-3044
                self:SetParent(limbo);
250 92 Kragenwar-3044
                self.parent = nil;
251 Kragenwar-3044
                self:SetPosition(0,0);
252 Kragenwar-3044
                self.x = 1;
253 Kragenwar-3044
                self.y = 1;
254 48 Kragenwar-3044
        else
255 Kragenwar-3044
                self:SetParent(data.parent);
256 Kragenwar-3044
        end
257 Kragenwar-3044
 
258 6 Kragenwar-3044
        self.parent = data.parent;
259 Kragenwar-3044
end
260 Kragenwar-3044
 
261 Kragenwar-3044
-- SWAP POSITION WITH ANOTHER SKILLSLOT (REF)
262 Kragenwar-3044
function SkillSlot:SwapPosition(ref)
263 Kragenwar-3044
        local newx = ref.x;
264 Kragenwar-3044
        local newy = ref.y;
265 Kragenwar-3044
        local newparent = ref.parent;
266 48 Kragenwar-3044
 
267 118 Kragenwar-3044
        if (self.parent ~= ref.parent) then
268 Kragenwar-3044
                if (self.parent ~= nil and self.parent.ChangeSkill ~= nil) then self.parent:ChangeSkill(self, ref); end
269 Kragenwar-3044
                if (ref.parent ~= nil and ref.parent.ChangeSkill ~= nil) then ref.parent:ChangeSkill(ref, self); end
270 78 Kragenwar-3044
        end
271 Kragenwar-3044
 
272 6 Kragenwar-3044
    self:SetPosition( (newx - 1) * 35, (newy - 1) * 35 );
273 48 Kragenwar-3044
        self.border:SetPosition(self:PointToScreen(1, 1));
274 6 Kragenwar-3044
        self:SetParent(newparent);
275 48 Kragenwar-3044
        self:SetParent(newparent);
276 Kragenwar-3044
 
277 Kragenwar-3044
        if (not ref.blank) then
278 Kragenwar-3044
                if (self.parent ~= nil) then
279 Kragenwar-3044
                        ref:SetPosition( (self.x - 1) * 35, (self.y - 1) * 35 );
280 Kragenwar-3044
                        ref.border:SetPosition(ref:PointToScreen(1, 1));
281 Kragenwar-3044
                        ref:SetParent(self.parent);
282 Kragenwar-3044
                else
283 Kragenwar-3044
                        ref:SetParent(limbo);
284 92 Kragenwar-3044
                        ref.parent = nil;
285 Kragenwar-3044
                        ref:SetPosition(0,0);
286 Kragenwar-3044
                        ref.x = 1;
287 Kragenwar-3044
                        ref.y = 1;
288 48 Kragenwar-3044
                end
289 6 Kragenwar-3044
 
290 48 Kragenwar-3044
                ref.x = self.x;
291 Kragenwar-3044
                ref.y = self.y;
292 Kragenwar-3044
                ref.parent = self.parent;
293 Kragenwar-3044
                ref:SetActive(ref.active);
294 Kragenwar-3044
        end
295 Kragenwar-3044
 
296 6 Kragenwar-3044
        self.x = newx;
297 Kragenwar-3044
        self.y = newy;
298 Kragenwar-3044
        self.parent = newparent;
299 48 Kragenwar-3044
        self:SetActive(self.active);
300 6 Kragenwar-3044
end
301 Kragenwar-3044
 
302 87 Kragenwar-3044
function SkillSlot:SetSwap(bol)
303 Kragenwar-3044
        self.swap = bol;
304 Kragenwar-3044
end
305 Kragenwar-3044
 
306 6 Kragenwar-3044
-- UPDATE THE WINDOW STATE
307 Kragenwar-3044
function SkillSlot:Refresh()
308 Kragenwar-3044
        self:SetActive( self.active );
309 Kragenwar-3044
        self:RefreshBorders();
310 83 Kragenwar-3044
        if (self.edit) then
311 Kragenwar-3044
                self:SetOpacity(1);
312 Kragenwar-3044
        end
313 6 Kragenwar-3044
end
314 Kragenwar-3044
 
315 Kragenwar-3044
-- START TIMER
316 Kragenwar-3044
function SkillSlot:StartTimer(duration, bol)
317 Kragenwar-3044
        self.timer:Stop();
318 Kragenwar-3044
        self.timer:SetInterval(duration);
319 Kragenwar-3044
        self.timer:Start();
320 Kragenwar-3044
        self.timerEnd = bol;
321 Kragenwar-3044
end
322 Kragenwar-3044
 
323 Kragenwar-3044
-- ROTATE BAR: SWAP THE SLOTS X AND Y POSITION
324 Kragenwar-3044
function SkillSlot:RotateBar()
325 Kragenwar-3044
        local newx = self.y;
326 Kragenwar-3044
        local newy = self.x;
327 Kragenwar-3044
 
328 Kragenwar-3044
        self:SetPosition( (newx - 1) * 35, (newy - 1) * 35 );
329 Kragenwar-3044
 
330 Kragenwar-3044
        self.x = newx;
331 Kragenwar-3044
        self.y = newy;
332 Kragenwar-3044
end
333 Kragenwar-3044
 
334 77 Kragenwar-3044
function SkillSlot:SetColor(color, alpha)
335 Kragenwar-3044
        if (alpha == nil) then alpha = 1; end
336 6 Kragenwar-3044
        if (color == "purple") then
337 94 Kragenwar-3044
                self.bordervisible = true;
338 77 Kragenwar-3044
        self.border:SetBackColor(Turbine.UI.Color(alpha, .8, .0, 1));
339 94 Kragenwar-3044
        self.border:SetVisible(self.active and self.bordervisible and vars.playerlevel >= self.level[1] and self.parent ~= nil and self.parent ~= limbo and self.parent.parent:IsVisible());
340 6 Kragenwar-3044
 
341 Kragenwar-3044
    elseif (color == "red") then
342 94 Kragenwar-3044
                self.bordervisible = true;
343 77 Kragenwar-3044
        self.border:SetBackColor(Turbine.UI.Color(alpha, .8, 0, 0));
344 94 Kragenwar-3044
        self.border:SetVisible(self.active and self.bordervisible and vars.playerlevel >= self.level[1] and self.parent ~= nil and self.parent ~= limbo and self.parent.parent:IsVisible());
345 6 Kragenwar-3044
 
346 Kragenwar-3044
    elseif (color == "green") then
347 94 Kragenwar-3044
        self.bordervisible = true;
348 Kragenwar-3044
                self.border:SetBackColor(Turbine.UI.Color(alpha, .1, 1, .1));
349 Kragenwar-3044
        self.border:SetVisible(self.active and self.bordervisible and vars.playerlevel >= self.level[1] and self.parent ~= nil and self.parent ~= limbo and self.parent.parent:IsVisible());
350 6 Kragenwar-3044
 
351 77 Kragenwar-3044
        elseif (color == "yellow") then
352 94 Kragenwar-3044
                self.bordervisible = true;
353 77 Kragenwar-3044
                self.border:SetBackColor(Turbine.UI.Color(alpha, 1, 1, 0));
354 94 Kragenwar-3044
        self.border:SetVisible(self.active and self.bordervisible and vars.playerlevel >= self.level[1] and self.parent ~= nil and self.parent ~= limbo and self.parent.parent:IsVisible());
355 77 Kragenwar-3044
 
356 6 Kragenwar-3044
        elseif (color == nil) then
357 77 Kragenwar-3044
                self.border:SetBackColor(Turbine.UI.Color(0, 0, 0, 0));
358 94 Kragenwar-3044
                self.bordervisible = false;
359 6 Kragenwar-3044
                self.border:SetVisible(false);
360 Kragenwar-3044
        end
361 Kragenwar-3044
end
362 Kragenwar-3044
 
363 Kragenwar-3044
function SkillSlot:RefreshBorders()
364 94 Kragenwar-3044
        self.border:SetVisible(self.active and self.bordervisible and vars.playerlevel >= self.level[1] and self.parent ~= nil and self.parent ~= limbo and self.parent.parent:IsVisible());
365 6 Kragenwar-3044
end
366 Kragenwar-3044
 

All times are GMT -5. The time now is 11:29 AM.


Our Network
EQInterface | EQ2Interface | Minion | WoWInterface | ESOUI | LoTROInterface | MMOUI | Swtorui