flickerstreak@175
|
1 local addonName, addonTable = ...
|
flickerstreak@175
|
2 local ReAction = addonTable.ReAction
|
flickerstreak@218
|
3 local L = ReAction.L
|
flickerstreak@159
|
4 local format = string.format
|
flickerstreak@159
|
5
|
flickerstreak@159
|
6 --
|
flickerstreak@159
|
7 -- VExitButton Button class
|
flickerstreak@159
|
8 --
|
flickerstreak@218
|
9 local buttonTypeID = "VehicleExit"
|
flickerstreak@159
|
10 local Super = ReAction.Button
|
flickerstreak@218
|
11 local VExitButton = setmetatable(
|
flickerstreak@218
|
12 {
|
flickerstreak@218
|
13 defaultBarConfig = {
|
flickerstreak@218
|
14 type = buttonTypeID ,
|
flickerstreak@218
|
15 btnWidth = 36,
|
flickerstreak@218
|
16 btnHeight = 36,
|
flickerstreak@218
|
17 btnRows = 1,
|
flickerstreak@218
|
18 btnColumns = 1,
|
flickerstreak@222
|
19 spacing = 3,
|
flickerstreak@222
|
20 buttons = { }
|
flickerstreak@218
|
21 },
|
flickerstreak@218
|
22
|
flickerstreak@218
|
23 barType = L["Exit Vehicle Floater"],
|
Flick@231
|
24 buttonTypeID = buttonTypeID
|
flickerstreak@218
|
25 },
|
flickerstreak@218
|
26 { __index = Super } )
|
flickerstreak@223
|
27
|
flickerstreak@159
|
28 ReAction.Button.VehicleExit = VExitButton
|
flickerstreak@223
|
29 ReAction:RegisterBarType(VExitButton)
|
flickerstreak@159
|
30
|
Flick@234
|
31 function VExitButton:New( config, bar, idx )
|
flickerstreak@159
|
32 local name = format("ReAction_%s_VehicleExit_%d",bar:GetName(),idx)
|
flickerstreak@159
|
33
|
flickerstreak@159
|
34 self = Super.New(self, name, config, bar, idx, "SecureFrameTemplate, ActionButtonTemplate", "Button")
|
flickerstreak@159
|
35
|
flickerstreak@159
|
36 -- frame setup
|
flickerstreak@159
|
37 local f = self:GetFrame()
|
flickerstreak@159
|
38 self.frames.icon:SetTexture("Interface\\Vehicles\\UI-Vehicles-Button-Exit-Up")
|
flickerstreak@159
|
39 self.frames.icon:SetTexCoord(0.140625, 0.859375, 0.140625, 0.859375)
|
flickerstreak@159
|
40
|
flickerstreak@159
|
41 -- attribute setup
|
flickerstreak@159
|
42 -- (none)
|
flickerstreak@159
|
43
|
flickerstreak@159
|
44 -- non secure scripts
|
flickerstreak@159
|
45 f:SetScript("OnClick", VehicleExit)
|
flickerstreak@159
|
46 f:SetScript("OnEnter", function(frame) GameTooltip_AddNewbieTip(frame, LEAVE_VEHICLE, 1.0, 1.0, 1.0, nil) end)
|
flickerstreak@159
|
47 f:SetScript("OnLeave", GameTooltip_Hide)
|
flickerstreak@159
|
48 f:SetScript("OnEvent", function(frame, evt, ...) self:OnEvent(evt,...) end)
|
flickerstreak@159
|
49
|
flickerstreak@159
|
50 -- event registration
|
flickerstreak@159
|
51 f:EnableMouse(true)
|
flickerstreak@159
|
52 f:RegisterForClicks("AnyUp")
|
flickerstreak@159
|
53 f:RegisterEvent("UPDATE_BINDINGS")
|
flickerstreak@159
|
54
|
flickerstreak@159
|
55 -- attach to skinner
|
flickerstreak@159
|
56 bar:SkinButton(self)
|
flickerstreak@159
|
57
|
flickerstreak@159
|
58 self:Refresh()
|
flickerstreak@159
|
59 self:UpdateHotkey()
|
flickerstreak@159
|
60
|
flickerstreak@159
|
61 return self
|
flickerstreak@159
|
62 end
|
flickerstreak@159
|
63
|
Flick@234
|
64 function VExitButton:SetupBar(bar)
|
Flick@234
|
65 Super.SetupBar(self,bar)
|
Flick@234
|
66 self:UpdateRegistration(bar)
|
Flick@234
|
67 end
|
Flick@234
|
68
|
flickerstreak@159
|
69 function VExitButton:GetActionID()
|
flickerstreak@159
|
70 return 1
|
flickerstreak@159
|
71 end
|
flickerstreak@159
|
72
|
Flick@249
|
73 function VExitButton:AcquireActionID()
|
Flick@249
|
74 -- don't use pool
|
Flick@249
|
75 end
|
Flick@249
|
76
|
Flick@249
|
77 function VExitButton:ReleaseActionID()
|
Flick@249
|
78 -- don't use pool
|
Flick@249
|
79 end
|
Flick@249
|
80
|
flickerstreak@159
|
81 function VExitButton:Refresh()
|
flickerstreak@159
|
82 Super.Refresh(self)
|
flickerstreak@159
|
83 -- it seems that setscale kills the texcoord, have to refresh it
|
flickerstreak@159
|
84 self.frames.icon:SetTexCoord(0.140625, 0.859375, 0.140625, 0.859375)
|
flickerstreak@159
|
85 end
|
flickerstreak@159
|
86
|
flickerstreak@159
|
87 function VExitButton:OnEvent(event, ...)
|
flickerstreak@159
|
88 if self[event] then
|
flickerstreak@159
|
89 self[event](self, event, ...)
|
flickerstreak@159
|
90 end
|
flickerstreak@159
|
91 end
|
flickerstreak@159
|
92
|
flickerstreak@159
|
93 function VExitButton:UPDATE_BINDINGS()
|
flickerstreak@159
|
94 self:UpdateHotkey()
|
flickerstreak@159
|
95 end
|
Flick@234
|
96
|
Flick@234
|
97 function VExitButton:UpdateRegistration(bar)
|
Flick@234
|
98 -- auto show/hide when on a vehicle
|
Flick@234
|
99 local config = bar:GetConfig()
|
Flick@234
|
100 local f = bar:GetFrame()
|
Flick@234
|
101 if config.withControls then
|
Flick@234
|
102 if bar.vehicleExitStateRegistered then
|
Flick@234
|
103 UnregisterStateDriver(f, "unitexists")
|
Flick@234
|
104 bar.vehicleExitStateRegistered = false
|
Flick@234
|
105 end
|
Flick@234
|
106 bar:RegisterUnitWatch("vehicle",true)
|
Flick@234
|
107 else
|
Flick@234
|
108 bar:RegisterUnitWatch("vehicle",false)
|
Flick@234
|
109 if not bar.vehicleExitStateRegistered then
|
Flick@234
|
110 f:SetAttribute("unit","vehicle")
|
Flick@234
|
111 RegisterStateDriver(f, "unitexists", "[target=vehicle,exists,novehicleui] show; hide") -- spoof onstate-unitexists
|
Flick@234
|
112 bar.vehicleExitStateRegistered = true
|
Flick@234
|
113 end
|
Flick@234
|
114 end
|
Flick@234
|
115 end
|
Flick@234
|
116
|