lotrointerface.com
Search Downloads

LoTROInterface SVN KragenBars

[/] [trunk/] [KragenPlugs/] [KragenBars/] [ItemSlot.lua] - Blame information for rev 118

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

All times are GMT -5. The time now is 08:13 PM.


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