ESOUI SVN TaosGroupUltimate

[/] [trunk/] [TaosGroupUltimate/] [logic/] [MapPingHandler.lua] - Blame information for rev 5

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

Line No. Rev Author Line
1 5 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
 
11 Taonnor-14572
local DEBUG_ACTIVE = true
12 Taonnor-14572
local REFRESHRATE = 1000 -- ms; RegisterForUpdate is in miliseconds
13 Taonnor-14572
local REFRESHTIME = 1 -- seconds; GetTimeStamp() difference is in seconds
14 Taonnor-14572
local ACTION_BAR_ULTIMATE_SLOT_INDEX = ACTION_BAR_ULTIMATE_SLOT_INDEX + 1 -- 8, the constant is 7, but its wrong
15 Taonnor-14572
local ABILITY_COEFFICIENT = 100000
16 Taonnor-14572
local ULTIMATE_COEFFICIENT = 1000
17 Taonnor-14572
 
18 Taonnor-14572
--[[
19 Taonnor-14572
        Class MapPingHandler
20 Taonnor-14572
]]--
21 Taonnor-14572
MapPingHandler = {}
22 Taonnor-14572
 
23 Taonnor-14572
--[[
24 Taonnor-14572
        Class Members
25 Taonnor-14572
]]--
26 Taonnor-14572
MapPingHandler.Name = "TGU-MapPingHandler"
27 Taonnor-14572
MapPingHandler.LastMapPingTimestamp = GetTimeStamp() -- Timestamp is in seconds
28 Taonnor-14572
 
29 Taonnor-14572
--[[
30 Taonnor-14572
        Called on map ping
31 Taonnor-14572
]]--
32 Taonnor-14572
function MapPingHandler.OnMapPing(eventCode, pingEventType, pingType, pingTag, offsetX, offsetY, isLocalPlayerOwner)
33 Taonnor-14572
    logDebug("MapPingHandler.OnMapPing()")
34 Taonnor-14572
    logDebug("pingType", pingType)
35 Taonnor-14572
    logDebug("pingTag", pingTag)
36 Taonnor-14572
    logDebug("offsetX", offsetX)
37 Taonnor-14572
    logDebug("offsetY", offsetY)
38 Taonnor-14572
 
39 Taonnor-14572
        if (pingType == MAP_PIN_TYPE_PING and
40 Taonnor-14572
                MapPingHandler.IsPossiblePing(offsetX, offsetY)) then
41 Taonnor-14572
 
42 Taonnor-14572
                local senderGroupNumber = string.sub(pingTag, string.len(pingTag))
43 Taonnor-14572
                local isUnitDead = IsUnitDead(pingTag)
44 Taonnor-14572
                local abilityID = math.floor((offsetX * ABILITY_COEFFICIENT) + 0.5)
45 Taonnor-14572
                local relativeUltimate = math.floor((offsetY * ULTIMATE_COEFFICIENT) + 0.5)
46 Taonnor-14572
                local ultimateName = GetAbilityName(abilityID):gsub("%^n", ""):gsub("%^f", ""):gsub("%^m", "")
47 Taonnor-14572
                -- GetAbilityIcon(number abilityId) -> Icon?!
48 Taonnor-14572
 
49 Taonnor-14572
        logDebug("senderGroupNumber", senderGroupNumber)
50 Taonnor-14572
        logDebug("isUnitDead", isUnitDead)
51 Taonnor-14572
        logDebug("abilityID", abilityID)
52 Taonnor-14572
        logDebug("relativeUltimate", relativeUltimate)
53 Taonnor-14572
        logDebug("ultimateName", ultimateName)
54 Taonnor-14572
 
55 Taonnor-14572
        CALLBACK_MANAGER:FireCallbacks("TGU-MapPingChanged", senderGroupNumber, ultimateName, relativeUltimate, isUnitDead)
56 Taonnor-14572
    end
57 Taonnor-14572
end
58 Taonnor-14572
 
59 Taonnor-14572
--[[
60 Taonnor-14572
        Called on refresh of timer
61 Taonnor-14572
]]--
62 Taonnor-14572
function MapPingHandler.OnTimedUpdate(eventCode)
63 Taonnor-14572
        if (IsUnitGrouped("player") == false) then return end -- only if player is in group
64 Taonnor-14572
 
65 Taonnor-14572
        local current, max, effective_max = GetUnitPower("player", POWERTYPE_ULTIMATE)
66 Taonnor-14572
    local currentTimestamp = GetTimeStamp() -- Timestamp is in seconds
67 Taonnor-14572
 
68 Taonnor-14572
        if ((currentTimestamp - MapPingHandler.LastMapPingTimestamp) > REFRESHTIME) then
69 Taonnor-14572
                local abilityID = MapPingHandler.GetConfiguratedUltimate()
70 Taonnor-14572
                local abilityCost = math.max(1, GetAbilityCost(abilityID))
71 Taonnor-14572
                local relativeUltimate = math.floor((current / abilityCost) * 100)
72 Taonnor-14572
 
73 Taonnor-14572
                if (relativeUltimate > 100) then
74 Taonnor-14572
                        relativeUltimate = 100
75 Taonnor-14572
                end
76 Taonnor-14572
 
77 Taonnor-14572
                local abilityPing = abilityID / ABILITY_COEFFICIENT
78 Taonnor-14572
                local ultimatePing = relativeUltimate / ULTIMATE_COEFFICIENT
79 Taonnor-14572
 
80 Taonnor-14572
                logDebug("abilityPing", abilityPing)
81 Taonnor-14572
                logDebug("ultimatePing", ultimatePing)
82 Taonnor-14572
                PingMap(MAP_PIN_TYPE_PING, MAP_TYPE_LOCATION_CENTERED, abilityPing, ultimatePing)
83 Taonnor-14572
 
84 Taonnor-14572
                MapPingHandler.LastMapPingTimestamp = GetTimeStamp()
85 Taonnor-14572
        end
86 Taonnor-14572
end
87 Taonnor-14572
 
88 Taonnor-14572
--[[
89 Taonnor-14572
        Check if map ping is in possible range
90 Taonnor-14572
]]--
91 Taonnor-14572
function MapPingHandler.IsPossiblePing(offsetX, offsetY)
92 Taonnor-14572
        local isValidPing = (offsetX ~= 0 and offsetY ~= 0)
93 Taonnor-14572
        local isCorrectOffsetX = (offsetX >= 0.01 and offsetX <= 1.00)
94 Taonnor-14572
        local isCorrectOffsetY = (offsetY >= 0.00 and offsetY <= 0.11)
95 Taonnor-14572
 
96 Taonnor-14572
        return isValidPing and (isCorrectOffsetX and isCorrectOffsetY)
97 Taonnor-14572
end
98 Taonnor-14572
 
99 Taonnor-14572
function MapPingHandler.GetConfiguratedUltimate()
100 Taonnor-14572
        return GetSlotBoundId(ACTION_BAR_ULTIMATE_SLOT_INDEX)
101 Taonnor-14572
end
102 Taonnor-14572
 
103 Taonnor-14572
--[[
104 Taonnor-14572
        Initialize initializes MapPingHandler
105 Taonnor-14572
]]--
106 Taonnor-14572
function MapPingHandler.Initialize()
107 Taonnor-14572
        -- Register events
108 Taonnor-14572
        EVENT_MANAGER:RegisterForEvent(MapPingHandler.Name, EVENT_MAP_PING, MapPingHandler.OnMapPing)
109 Taonnor-14572
 
110 Taonnor-14572
        -- Start timer
111 Taonnor-14572
        EVENT_MANAGER:RegisterForUpdate(MapPingHandler.Name, REFRESHRATE, MapPingHandler.OnTimedUpdate)
112 Taonnor-14572
end