You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

193 lines
7.1 KiB

-- ========================================================================= --
-- SylingTracker --
-- https://www.curseforge.com/wow/addons/sylingtracker --
-- --
-- Repository: --
-- https://github.com/Skamer/SylingTracker --
-- --
-- ========================================================================= --
Syling "SylingTracker.Torghast" ""
-- ========================================================================= --
import "SLT"
-- ========================================================================= --
_Active = false
-- ========================================================================= --
export {
RegisterContentType = API.RegisterContentType,
RegisterModel = API.RegisterModel,
IsInJailersTower = IsInJailersTower,
GetJailersTowerLevel = GetJailersTowerLevel,
GetAnimaPowerRarity = Utils.Torghast.GetAnimaPowerRarity,
GetStepInfo = C_Scenario.GetStepInfo,
GetScenarioWidgetInfo = C_UIWidgetManager.GetScenarioHeaderCurrenciesAndBackgroundWidgetVisualizationInfo,
GetStatusBarWidgetInfo = C_UIWidgetManager.GetStatusBarWidgetVisualizationInfo,
UnitAura = UnitAura
}
-- ========================================================================= --
local _TorghastModel = RegisterModel(Model, "torghast-data")
-- ========================================================================= --
RegisterContentType({
ID = "torghast",
DisplayName = "Torghast",
Description = "TORGHAST_PH_DESCRIPTION",
DefaultOrder = 40,
DefaultModel = _TorghastModel,
DefaultViewClass = TorghastContentView,
Events = "PLAYER_ENTERING_WORLD",
Status = function() return IsInJailersTower() end
})
-- ========================================================================= --
local TORGHAST_WIDGET_ID = 2319
local TORGHAST_TARRAGRUE_WIDGET_ID = 2321
local MAX_BUFF_MAX_DISPLAY = 44
-- ========================================================================= --
__ActiveOnEvents__ "PLAYER_ENTERING_WORLD"
function BecomeActiveOn(self)
return IsInJailersTower()
end
-- ========================================================================= --
function OnActive(self)
self:UpdateDeathAndFantasmCurrency()
self:UpdateAnimaPowers()
self:UpdateLevel()
self:UpdateObjectives()
_TorghastModel:Flush()
end
function OnInactive(self)
_TorghastModel:ClearData()
end
-- ========================================================================= --
__SystemEvent__()
function UPDATE_UI_WIDGET(widgetInfo)
if widgetInfo.widgetID == TORGHAST_WIDGET_ID then
_M:UpdateDeathAndFantasmCurrency()
_TorghastModel:Flush()
elseif widgetInfo.widgetID == TORGHAST_TARRAGRUE_WIDGET_ID then
_M:UpdateTarragrueTimer()
_TorghastModel:Flush()
end
end
__SystemEvent__()
function SCENARIO_UPDATE(isNewStage)
if isNewStage then
_M:UpdateObjectives()
_TorghastModel:Flush()
end
end
__SystemEvent__()
function JAILERS_TOWER_LEVEL_UPDATE(level, type)
_TorghastModel:AddData({ level = level }, "torghast")
_TorghastModel:Flush()
end
__SystemEvent__()
function UNIT_AURA(unit)
if unit == "player" then
_M:UpdateAnimaPowers()
_TorghastModel:Flush()
end
end
-- ========================================================================= --
function UpdateObjectives(self)
local stageName, stageDescription, numObjectives = GetStepInfo()
_TorghastModel:AddData({ stageName = stageName, stageDescription = stageDescription}, "torghast")
end
--- The death and the fantasm currency are provided by the Widget System and represented by
--- a ScenarioHeaderCurrenciesAndBackgroundWidgetVisualizationInfo
--- /dump C_UIWidgetManager.GetStatusBarWidgetVisualizationInfo(2319)
--- in Torghast for more information
function UpdateDeathAndFantasmCurrency(self)
-- local widget = GetWidgetVisualizationInfo(TORGHAST_WIDGET_ID)
-- GetScenarioHeaderCurrenciesAndBackgroundWidgetVisualizationInfo
local info = GetScenarioWidgetInfo(TORGHAST_WIDGET_ID)
if info then
local data = {}
-- The first currency is the remaining death
local deathCurrency = info.currencies[1]
data.remainingDeath = tonumber(deathCurrency.text)
data.deathTooltip = deathCurrency.tooltip
-- The second currency is fantasm
local fanstasmCurrency = info.currencies[2]
data.fanstasm = tonumber(fanstasmCurrency.text)
data.fanstasmTooltip = fanstasmCurrency.tooltip
-- The level text (is 100% correct)
local levelText = info.headerText
data.levelText = levelText
_TorghastModel:AddData(data, "torghast")
end
end
--- The timer information is provided by the Widget system and represented by
--- a GetStatusBarWidgetVisualizationInfo
--- /dump C_UIWidgetManager.GetStatusBarWidgetVisualizationInfo(2321)
--- in Torghast for more information
function UpdateTarragrueTimer(self)
-- local info = C_UIWidgetManager.GetStatusBarWidgetVisualizationInfo(TORGHAST_TARRAGRUE_WIDGET_ID)
local info = GetStatusBarWidgetInfo(TORGHAST_TARRAGRUE_WIDGET_ID)
local shownState = info.shownState
-- If the widget is shown, update the data
if shownState == 1 then
local data = {}
data.barMin = info.barMin
data.barValue = info.barValue
data.barMax = info.barMax
-- text = "Tarragrue arrives in:"
data.text = info.text
-- tooltip = "Get to the exist quickly!"
data.tooltip = info.tooltip
-- overrideBarText = "Hurry"
-- This shows "Hurry" when the player has mouseover on the bar.
data.overrideBarText = info.overrideBarText
_TorghastModel:AddData(data, "torghast", "tarragrue")
else
_TorghastModel:RemoveData("torghast", "tarragrue")
end
end
function UpdateAnimaPowers(self)
local data = {}
local animaPowersData = {}
local numAnimaPowers = 0
for i = 1, MAX_BUFF_MAX_DISPLAY do
local _, icon, count, _, _, _, _, _, _, spellID = UnitAura("player", i, "MAW");
if icon then
if count == 0 then
count = 1
end
local rarity = GetAnimaPowerRarity(spellID)
animaPowersData[spellID] = { icon = icon, spellID = spellID, count = count, rarity = rarity, slot = i }
numAnimaPowers = numAnimaPowers + count
end
end
data.numAnimaPowers = numAnimaPowers
data.animaPowers = animaPowersData
_TorghastModel:AddData(data, "torghast")
end
function UpdateLevel(self)
_TorghastModel:AddData({ level = GetJailersTowerLevel() }, "torghast")
end
-- ========================================================================= --
-- Debug Utils Tools
-- ========================================================================= --
if ViragDevTool_AddData then
ViragDevTool_AddData(_TorghastModel, "SLT Torghast Model")
end