ESOUI SVN TaosGroupUltimate

[/] [trunk/] [TaosGroupUltimate/] [TaosGroupUltimate.lua] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 Taonnor-14572
--[[
2 Taonnor-14572
        Addon: Taos Group Ultimate
3 Taonnor-14572
        Author: TProg Taonnor
4 Taonnor-14572
        Created by @Taonnor
5 Taonnor-14572
]]--
6 Taonnor-14572
 
7 Taonnor-14572
--[[
8 Taonnor-14572
        Global variables
9 Taonnor-14572
]]--
10 Taonnor-14572
local MAJOR = "1"
11 Taonnor-14572
local MINOR = "0"
12 Taonnor-14572
local PATCH = "0"
13 Taonnor-14572
 
14 Taonnor-14572
local REFRESHRATE = 1000
15 Taonnor-14572
local ACTION_BAR_ULTIMATE_SLOT_INDEX = ACTION_BAR_ULTIMATE_SLOT_INDEX + 1 -- 8, the constant is 7, but its wrong
16 Taonnor-14572
 
17 Taonnor-14572
--[[
18 Taonnor-14572
        Class GroupUltimate
19 Taonnor-14572
]]--
20 Taonnor-14572
GroupUltimate = {}
21 Taonnor-14572
 
22 Taonnor-14572
--[[
23 Taonnor-14572
        Class Members
24 Taonnor-14572
]]--
25 Taonnor-14572
GroupUltimate.Name = "TaosGroupUltimate"
26 Taonnor-14572
GroupUltimate.IsInAvA = false
27 Taonnor-14572
GroupUltimate.LastMapPingTimestamp = GetTimeStamp()
28 Taonnor-14572
GroupUltimate.Default = {
29 Taonnor-14572
                        ["PosX"] = 0,
30 Taonnor-14572
                        ["PosY"] = 0,
31 Taonnor-14572
                        ["Movable"] = true,
32 Taonnor-14572
                }
33 Taonnor-14572
 
34 Taonnor-14572
--[[
35 Taonnor-14572
        UpdateDeath updates SessionDeaths with adding new death
36 Taonnor-14572
]]--
37 Taonnor-14572
function GroupUltimate.UpdateDeath(eventID)
38 Taonnor-14572
        if (GroupUltimate.IsInAvA) then
39 Taonnor-14572
                -- TODO: And alive?!
40 Taonnor-14572
        end
41 Taonnor-14572
end
42 Taonnor-14572
 
43 Taonnor-14572
--[[
44 Taonnor-14572
        UpdateZone updates the IsInAva member and set visibility of GroupUltimateWindow
45 Taonnor-14572
]]--
46 Taonnor-14572
function GroupUltimate.UpdateZone(eventCode)
47 Taonnor-14572
        GroupUltimate.IsInAvA = IsPlayerInAvAWorld()
48 Taonnor-14572
    GroupUltimateWindow:SetHidden(not GroupUltimate.IsInAvA)
49 Taonnor-14572
end
50 Taonnor-14572
 
51 Taonnor-14572
--[[
52 Taonnor-14572
        Called on map ping; Updates ultimate view if possible ping
53 Taonnor-14572
]]--
54 Taonnor-14572
function GroupUltimate.OnMapPing(eventCode, pingEventType, pingType, pingTag, offsetX, offsetY, isLocalPlayerOwner)
55 Taonnor-14572
    if GroupUltimate.IsPossiblePing(offsetX, offsetY) then
56 Taonnor-14572
                GroupUltimate.UpdateUltimateView(pingTag, offsetX, offsetY)
57 Taonnor-14572
    end
58 Taonnor-14572
end
59 Taonnor-14572
 
60 Taonnor-14572
--[[
61 Taonnor-14572
        Called on power changing; Call send data if ultimate
62 Taonnor-14572
]]--
63 Taonnor-14572
function GroupUltimate.OnPowerUpdate(eventCode, unitTag, powerIndex, powerType, powerValue, powerMax, powerEffectiveMax)
64 Taonnor-14572
        if (unitTag ~= 'player') then return end -- only care about the player
65 Taonnor-14572
        if (powerType ~= POWERTYPE_ULTIMATE) then return end -- only care about ultimate
66 Taonnor-14572
 
67 Taonnor-14572
        GroupUltimate.SendData(powerValue)
68 Taonnor-14572
end
69 Taonnor-14572
 
70 Taonnor-14572
--[[
71 Taonnor-14572
        SendData updates session
72 Taonnor-14572
]]--
73 Taonnor-14572
function GroupUltimate.SendData(powerValue)
74 Taonnor-14572
        if (GroupUltimate.IsInAvA) then return end
75 Taonnor-14572
        if IsUnitGrouped("player") then return end
76 Taonnor-14572
 
77 Taonnor-14572
        local currentTimestamp = GetTimeStamp()
78 Taonnor-14572
 
79 Taonnor-14572
        if ((currentTimestamp - roupUltimate.LastMapPingTimestamp) > REFRESHRATE) then
80 Taonnor-14572
                local abilityID = GetSlotBoundId(ACTION_BAR_ULTIMATE_SLOT_INDEX)
81 Taonnor-14572
                local abilityCost = math_max(1, GetSlotAbilityCost(ACTION_BAR_ULTIMATE_SLOT_INDEX))
82 Taonnor-14572
                local relativeUltimate = math.floor((powerValue / abilityCost) * 100)
83 Taonnor-14572
 
84 Taonnor-14572
                if (relativeUltimate > 100) then
85 Taonnor-14572
                        relativeUltimate = 100
86 Taonnor-14572
                end
87 Taonnor-14572
 
88 Taonnor-14572
                d("abilityID: " tostring(abilityID)) -- TODO: eventually needed mapping to correct x values for map pings!
89 Taonnor-14572
                d("relativeUltimate: " tostring(relativeUltimate))
90 Taonnor-14572
                PingMap(MAP_PIN_TYPE_PING, MAP_TYPE_LOCATION_CENTERED, abilityID, relativeUltimate)
91 Taonnor-14572
 
92 Taonnor-14572
                GroupUltimate.LastMapPingTimestamp = GetTimeStamp()
93 Taonnor-14572
        end
94 Taonnor-14572
end
95 Taonnor-14572
 
96 Taonnor-14572
--[[
97 Taonnor-14572
        UpdateUltimates updates ultimate view
98 Taonnor-14572
]]--
99 Taonnor-14572
function GroupUltimate.UpdateUltimateView(pingTag, ultimateId, ultimateValue)
100 Taonnor-14572
        local senderName = GetUnitName(pingTag)
101 Taonnor-14572
        local ultimateName = GetAbilityName(ultimateId)
102 Taonnor-14572
        local ultimatePercent = ultimateValue
103 Taonnor-14572
        -- GetAbilityIcon(number abilityId) -> Icon?!
104 Taonnor-14572
 
105 Taonnor-14572
        ApSessionFurtherWindowValueSenderName:SetText(senderName)
106 Taonnor-14572
        ApSessionFurtherWindowValueUltimate:SetText(ultimateName)
107 Taonnor-14572
        ApSessionFurtherWindowValueUltimatePercent:SetText(ultimatePercent)
108 Taonnor-14572
end
109 Taonnor-14572
 
110 Taonnor-14572
--[[
111 Taonnor-14572
        Check if map ping is in possible range
112 Taonnor-14572
]]--
113 Taonnor-14572
function GroupUltimate.IsPossiblePing(offsetx, offsety)
114 Taonnor-14572
        return true -- TODO: check in specific range
115 Taonnor-14572
end
116 Taonnor-14572
 
117 Taonnor-14572
--[[
118 Taonnor-14572
        UpdateMovable sets the Movable and MouseEnabled flag in UI elements
119 Taonnor-14572
]]--
120 Taonnor-14572
function GroupUltimate.SetMovable()
121 Taonnor-14572
    GroupUltimateWindow:SetMovable(GroupUltimate.Settings.Movable)
122 Taonnor-14572
        GroupUltimateWindow:SetMouseEnabled(GroupUltimate.Settings.Movable)
123 Taonnor-14572
end
124 Taonnor-14572
 
125 Taonnor-14572
--[[
126 Taonnor-14572
        MakeSettingsWindow creates settings window
127 Taonnor-14572
]]--
128 Taonnor-14572
function GroupUltimate.MakeSettingsWindow()
129 Taonnor-14572
        local panelData = {
130 Taonnor-14572
                type = "panel",
131 Taonnor-14572
                name = "Taos Group Ultimate",
132 Taonnor-14572
                author = "TProg Taonnor",
133 Taonnor-14572
                version = MAJOR .. "." .. MINOR .. "." .. PATCH,
134 Taonnor-14572
                slashCommand = "/taosGroupUltimate",
135 Taonnor-14572
                registerForDefaults = true
136 Taonnor-14572
        }
137 Taonnor-14572
 
138 Taonnor-14572
        local optionsData = {
139 Taonnor-14572
                [1] = {
140 Taonnor-14572
                        type = "header",
141 Taonnor-14572
                        name = GetString(TAS_OPTIONS_HEADER),
142 Taonnor-14572
                },
143 Taonnor-14572
                [2] = {
144 Taonnor-14572
                        type = "checkbox",
145 Taonnor-14572
                        name = GetString(TAS_OPTIONS_DRAG_LABEL),
146 Taonnor-14572
                        tooltip = GetString(TAS_OPTIONS_DRAG_TOOLTIP),
147 Taonnor-14572
                        getFunc = function() return GroupUltimate.Settings.Movable end,
148 Taonnor-14572
                        setFunc = function(value)
149 Taonnor-14572
                                GroupUltimate.Settings.Movable = value
150 Taonnor-14572
                GroupUltimate.SetMovable()
151 Taonnor-14572
                        end,
152 Taonnor-14572
                        default = GroupUltimate.Default.Movable
153 Taonnor-14572
                },
154 Taonnor-14572
        }
155 Taonnor-14572
 
156 Taonnor-14572
        local LAM = LibStub("LibAddonMenu-2.0")
157 Taonnor-14572
        LAM:RegisterAddonPanel("TaosGroupUltimateSettings", panelData)
158 Taonnor-14572
        LAM:RegisterOptionControls("TaosGroupUltimateSettings", optionsData)
159 Taonnor-14572
end
160 Taonnor-14572
 
161 Taonnor-14572
--[[
162 Taonnor-14572
        RestorePosition sets GroupUltimateWindow on settings position
163 Taonnor-14572
]]--
164 Taonnor-14572
function GroupUltimate.RestorePosition()
165 Taonnor-14572
        GroupUltimateWindow:ClearAnchors()
166 Taonnor-14572
        GroupUltimateWindow:SetAnchor(TOPLEFT,
167 Taonnor-14572
                                                                  GuiRoot,
168 Taonnor-14572
                                                                  TOPLEFT,
169 Taonnor-14572
                                                                  ApSession.Settings.PosX,
170 Taonnor-14572
                                                                  ApSession.Settings.PosY)
171 Taonnor-14572
end
172 Taonnor-14572
 
173 Taonnor-14572
--[[
174 Taonnor-14572
        OnGroupUltimateWindowMoveStop saves current GroupUltimateWindow position to settings
175 Taonnor-14572
]]--
176 Taonnor-14572
function GroupUltimate.OnGroupUltimateWindowMoveStop()
177 Taonnor-14572
        local left = GroupUltimateWindow:GetLeft()
178 Taonnor-14572
        local top = GroupUltimateWindow:GetTop()
179 Taonnor-14572
 
180 Taonnor-14572
        GroupUltimate.Settings.PosX = left
181 Taonnor-14572
        GroupUltimate.Settings.PosY = top
182 Taonnor-14572
end
183 Taonnor-14572
 
184 Taonnor-14572
--[[
185 Taonnor-14572
        GroupUltimate:initialize initializes addon
186 Taonnor-14572
]]--
187 Taonnor-14572
function GroupUltimate:initialize()
188 Taonnor-14572
        GroupUltimate.Settings = ZO_SavedVars:NewAccountWide(GroupUltimate.Name, 1 , nil, GroupUltimate.Default)
189 Taonnor-14572
 
190 Taonnor-14572
        GroupUltimate.MakeSettingsWindow()
191 Taonnor-14572
        GroupUltimate.RestorePosition()
192 Taonnor-14572
        GroupUltimate.UpdateZone()
193 Taonnor-14572
    GroupUltimate.SetMovable()
194 Taonnor-14572
 
195 Taonnor-14572
        -- Register events
196 Taonnor-14572
        EVENT_MANAGER:RegisterForEvent(GroupUltimate.name, EVENT_MAP_PING, GroupUltimate.OnMapPing)
197 Taonnor-14572
        EVENT_MANAGER:RegisterForEvent(GroupUltimate.name, EVENT_POWER_UPDATE, GroupUltimate.OnPowerUpdate)
198 Taonnor-14572
        EVENT_MANAGER:RegisterForEvent(GroupUltimate.Name, EVENT_PLAYER_DEAD , GroupUltimate.UpdateDeath) -- grey up icon?
199 Taonnor-14572
        EVENT_MANAGER:RegisterForEvent(GroupUltimate.Name, EVENT_PLAYER_ACTIVATED, GroupUltimate.UpdateZone) -- only cyro?
200 Taonnor-14572
 
201 Taonnor-14572
        -- Start timer
202 Taonnor-14572
        --EVENT_MANAGER:RegisterForUpdate(GroupUltimate.Name, REFRESHRATE, GroupUltimate.SendData) -- eventually not needed, send data via ultimate points changed
203 Taonnor-14572
end
204 Taonnor-14572
 
205 Taonnor-14572
--[[
206 Taonnor-14572
        OnAddOnLoaded if TaosGroupUltimate is loaded, initialize
207 Taonnor-14572
]]--
208 Taonnor-14572
local function OnAddOnLoaded(eventCode, addOnName)
209 Taonnor-14572
        if addOnName == GroupUltimate.Name then
210 Taonnor-14572
                GroupUltimate:initialize()
211 Taonnor-14572
        end
212 Taonnor-14572
end
213 Taonnor-14572
 
214 Taonnor-14572
EVENT_MANAGER:RegisterForEvent(GroupUltimate.Name, EVENT_ADD_ON_LOADED, OnAddOnLoaded);