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.

745 lines
23 KiB

local _, addon = ...
local API = addon.API;
local VIEWPORT_SCALE = 0.25;
local VIEWPORT_WIDTH, VIEWPORT_HEIGHT = 3840 * VIEWPORT_SCALE, 2560 * VIEWPORT_SCALE;
local VIEWPORT_MAX_ZOOM_SCALE = 1;
local VIEWPORT_MAX_ZOOM_STEPS = 5;
local MAP_EFFECTIVE_SCALE = 1;
local PAN_RATIO_X, PAN_RATIO_Y;
local MAP_CANVAS_TILE_SIZE;
local MAP_CANVAS_WIDTH, MAP_CANVAS_HEIGHT = 3840 * VIEWPORT_SCALE, 2560 * VIEWPORT_SCALE;
do
local tileX, tileY = 4, 3;
local tilePixel = 1024;
local mapPixelX, mapPixelY = 3840, 2560;
MAP_CANVAS_TILE_SIZE = tilePixel * VIEWPORT_SCALE;
PAN_RATIO_X = mapPixelX * VIEWPORT_SCALE * MAP_CANVAS_WIDTH / VIEWPORT_WIDTH;
PAN_RATIO_Y = mapPixelY * VIEWPORT_SCALE * MAP_CANVAS_HEIGHT / VIEWPORT_HEIGHT;
end
local MAP_DATA = {
--[uiMapID] = { zones = { {x1, y1, areaID1}, } }
[2200] = {--Emerald Dream 10.2.0
--[[
zones = {
{0.2280, 0.3828, 14913},
{0.3861, 0.1574, 14864},
{0.6028, 0.2667, 14904},
{0.3043, 0.5208, 14974},
{0.5006, 0.4900, 14956},
{0.7576, 0.4545, 14856},
{0.5015, 0.5979, 14860},
{0.6900, 0.6311, 14877},
{0.3030, 0.7047, 15015},
},
--]]
vignetteIDs = {
5971, --Emerald Bounty
5844, 5789, 5792, 5776, 5787, --Dreamseed Cache
},
},
};
local Clamp = API.Clamp;
local GetPlayerMapCoord = API.GetPlayerMapCoord;
local GetPlayerFacing = GetPlayerFacing;
local GetCursorPosition = GetCursorPosition;
local GetAreaInfo = C_Map.GetAreaInfo;
local C_VignetteInfo = C_VignetteInfo;
local MainFrame = CreateFrame("Frame", "PMAP", UIParent);
MainFrame:SetFrameStrata("HIGH");
MainFrame:SetSize(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
MainFrame:SetPoint("CENTER", UIParent, "CENTER", 0, 0);
MainFrame:Hide();
local ZoneTextFont = CreateFont("PlumberZoneTextFont1");
do
local pixel = API.GetPixelForWidget(UIParent, 1);
local font, height = GameFontHighlightSmall:GetFont();
ZoneTextFont:SetFont(font, 12*pixel, "");
ZoneTextFont:SetTextColor(93/255, 63/255, 16/255);
ZoneTextFont:SetJustifyH("CENTER");
ZoneTextFont:SetJustifyV("MIDDLE");
ZoneTextFont:SetSpacing(0);
ZoneTextFont:SetShadowOffset(2*pixel, -2*pixel);
--ZoneTextFont:SetShadowColor(222/255, 204/255, 90/255);
ZoneTextFont:SetShadowColor(227/255, 210/255, 132/255);
local ZoneTextFont2 = CreateFont("PlumberZoneTextFont2");
ZoneTextFont2:CopyFontObject(ZoneTextFont);
ZoneTextFont2:SetShadowOffset(-2*pixel, 2*pixel);
--ZoneTextFont2:SetTextColor(222/255, 204/255, 90/255);
--ZoneTextFont2:SetShadowColor(202/255, 190/255, 83/255);
ZoneTextFont2:SetShadowColor(227/255, 210/255, 132/255, 1);
ZoneTextFont2:SetTextColor(227/255, 210/255, 132/255);
local ZoneTextFont3 = CreateFont("PlumberZoneTextFont3");
ZoneTextFont3:CopyFontObject(ZoneTextFont2);
ZoneTextFont3:SetShadowOffset(-2*pixel, -2*pixel);
local ZoneTextFont4 = CreateFont("PlumberZoneTextFont4");
ZoneTextFont4:CopyFontObject(ZoneTextFont2);
ZoneTextFont4:SetShadowOffset(2*pixel, 2*pixel);
end
local MapPinMixin = {};
function MapPinMixin:SetXY(x, y)
self.x, self.y = x, y;
if x and y then
self:UpdatePosition();
end
end
function MapPinMixin:UpdatePosition()
if not self.x then return end;
local offsetX, offsetY = self.x * MAP_CANVAS_WIDTH * MAP_EFFECTIVE_SCALE, self.y * MAP_CANVAS_HEIGHT * MAP_EFFECTIVE_SCALE;
self:SetPoint("CENTER", offsetX, -offsetY);
end
function MapPinMixin:Update()
if self.updateFunc then
self.updateFunc(self);
end
end
function MapPinMixin:Remove()
self.active = false;
self:Hide();
self:ClearAllPoints();
if self.Icon then
self.Icon:SetTexture(nil);
end
if self.TinyBar then
self.TinyBar:Hide();
end
self:EnableMouse(false);
end
function MapPinMixin:OnEnter()
if self.objectGUID then
GameTooltip:Hide();
local name = API.DreamseedUtil:GetPlantNameAndProgress(self.objectGUID);
if name then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
GameTooltip:AddLine(name, 1, 1, 1, true);
GameTooltip:Show();
end
API.DreamseedUtil:GetRewards(self.objectGUID)
end
end
function MapPinMixin:OnLeave()
GameTooltip:Hide();
end
function MapPinMixin:OnMouseDown()
MainFrame:OnMouseDown();
end
function MapPinMixin:OnMouseUp()
MainFrame:OnMouseUp();
end
local function PinUpdateFunc_SeedPlanting(self)
if not self.objectGUID then return end;
local currentTime, fullTime = API.DreamseedUtil:GetGrowthTimes(self.objectGUID);
if currentTime and currentTime > 0 then
self.Icon:SetTexture("Interface/AddOns/Plumber/Art/MapPin/SeedPlanting-Green");
self:SetSize(16, 16);
if not self.TinyBar then
self.TinyBar = addon.CreateTinyStatusBar(self);
self.TinyBar:SetPoint("TOP", self, "BOTTOM", 0, -2);
self.TinyBar:SetWidth(16);
end
self.TinyBar:Show();
self.TinyBar:UpdateMaxBarFillWidth();
self.TinyBar:SetReverse(true);
self.TinyBar:SetTimes(fullTime - currentTime, fullTime);
else
self.Icon:SetTexture("Interface/AddOns/Plumber/Art/MapPin/SeedPlanting-Empty-Nearby");
self:SetSize(12, 12);
if self.TinyBar then
self.TinyBar:Hide();
end
end
end
local PinUtil = {};
PinUtil.templates = {
Player = {
icon = "Player",
level = 50,
--size = 32,
},
ZoneText = {
level = 10,
hasLabel = true,
icon = "ZoneTextDropShadow",
},
SeedPlanting = {
icon = "SeedPlanting-Empty-Nearby",
level = 40,
size = 20,
updateFunc = PinUpdateFunc_SeedPlanting,
},
};
function PinUtil:RemoveAllPins()
if not self.pins then return end;
for _, pin in pairs(self.pins) do
if pin.active then
pin:Remove();
end
end
end
function PinUtil:Acquire(templateName)
if not self.pins then
self.pins = {};
self.numPins = 0;
end
local pin;
for i, p in ipairs(self.pins) do
if not p.active then
pin = p;
break
end
end
if not pin then
pin = CreateFrame("Frame", nil, MainFrame.MapContainer);
pin:SetSize(16, 16);
table.insert(self.pins, pin);
API.Mixin(pin, MapPinMixin);
pin:SetScript("OnMouseDown", MapPinMixin.OnMouseDown);
pin:SetScript("OnMouseUp", MapPinMixin.OnMouseUp);
self.numPins = self.numPins + 1;
pin:SetIgnoreParentScale(true);
pin.Icon = pin:CreateTexture(nil, "ARTWORK");
pin.Icon:SetAllPoints(true);
pin:SetIgnoreParentAlpha(true);
print("NEW PIN", #self.pins)
end
local templateData = templateName and self.templates[templateName];
if templateData then
if templateData.level then
pin:SetFrameLevel(templateData.level);
end
if templateData.hasLabel then
if not pin.Label then
pin.Label = pin:CreateFontString(nil, "OVERLAY", "PlumberZoneTextFont1");
pin.Label:SetPoint("CENTER", pin, "CENTER", 0, 0);
pin.Label2 = pin:CreateFontString(nil, "ARTWORK", "PlumberZoneTextFont2");
pin.Label2:SetPoint("CENTER", pin, "CENTER", 0, 0);
pin.Label3 = pin:CreateFontString(nil, "ARTWORK", "PlumberZoneTextFont3");
pin.Label3:SetPoint("CENTER", pin, "CENTER", 0, 0);
pin.Label4 = pin:CreateFontString(nil, "ARTWORK", "PlumberZoneTextFont4");
pin.Label4:SetPoint("CENTER", pin, "CENTER", 0, 0);
end
pin.Label:Show();
pin.Label2:Show();
pin.Label3:Show();
pin.Label4:Show();
end
if templateData.icon then
pin.Icon:SetTexture("Interface/AddOns/Plumber/Art/MapPin/"..templateData.icon, nil, nil, "TRILINEAR");
pin.Icon:ClearAllPoints();
if templateData.hasLabel then
pin.Icon:SetPoint("TOPLEFT", pin.Label, "TOPLEFT", -12, 4);
pin.Icon:SetPoint("BOTTOMRIGHT", pin.Label, "BOTTOMRIGHT", 12, -4);
else
pin.Icon:SetAllPoints(true);
end
end
if templateData.size then
local a = templateData.size;
local uiScale = UIParent:GetEffectiveScale();
pin:SetSize(a*uiScale, a*uiScale);
local b = a/64;
pin.Icon:SetTexCoord(0.5 - b, 0.5 + b, 0.5 - b, 0.5 + b);
else
pin:SetSize(16, 16);
pin.Icon:SetTexCoord(0, 1, 0, 1);
end
pin.updateFunc = templateData.updateFunc;
end
pin:SetPoint("CENTER", MainFrame.MapContainer, "TOPLEFT", 0, 0);
pin:Show();
pin.active = true;
return pin
end
function PinUtil:UpdateAllPins()
for i, pin in ipairs(self.pins) do
if pin.active then
pin:UpdatePosition();
end
end
end
local function AddInteractableObject(obj)
table.insert(MainFrame.InteractableObjects, obj);
end
local function UpdateMaxZoom()
local SCREEN_WIDTH, SCREEN_HEIGHT = GetPhysicalScreenSize();
local frameScale = MainFrame:GetEffectiveScale();
local scale = 768 / SCREEN_HEIGHT / frameScale / VIEWPORT_SCALE;
VIEWPORT_MAX_ZOOM_SCALE = scale;
--print("MAX_ZOOM: "..VIEWPORT_MAX_ZOOM_SCALE);
local zoomScale = 1;
local scalePerDelta = 0.5;
local maxZoomSteps = 1;
for i = 2, VIEWPORT_MAX_ZOOM_STEPS do
zoomScale = zoomScale + scalePerDelta;
if zoomScale < VIEWPORT_MAX_ZOOM_SCALE then
if zoomScale + scalePerDelta > VIEWPORT_MAX_ZOOM_SCALE then
MainFrame.zoomScales[i] = VIEWPORT_MAX_ZOOM_SCALE;
maxZoomSteps = i;
else
MainFrame.zoomScales[i] = zoomScale;
maxZoomSteps = maxZoomSteps + 1;
end
else
MainFrame.zoomScales[i] = VIEWPORT_MAX_ZOOM_SCALE;
end
end
MainFrame.zoomScales[ VIEWPORT_MAX_ZOOM_STEPS ] = VIEWPORT_MAX_ZOOM_SCALE;
MainFrame.maxZoomSteps = maxZoomSteps;
--print("MAX STEPS: "..maxZoomSteps)
end
function MainFrame:Init()
self.zoom = 1;
self.zoomStep = 1;
self.maxZoomSteps = 1;
self.zoomScales = {1};
self.InteractableObjects = {};
--Tiles: total = 12(4*3), image = 1024x1024
self.MapSlices = {};
local ClipFrame = CreateFrame("Frame", nil, self);
self.ClipFrame = ClipFrame;
ClipFrame:SetClipsChildren(true);
ClipFrame:SetSize(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
ClipFrame:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 0);
AddInteractableObject(ClipFrame);
local container = CreateFrame("Frame", nil, ClipFrame);
self.MapContainer = container;
container:SetSize(8, 8);
container:SetPoint("TOPLEFT", ClipFrame, "TOPLEFT", 0, 0);
local size = MAP_CANVAS_TILE_SIZE;
local slice;
local col, row = 0, 0;
self.Blackout = ClipFrame:CreateTexture(nil, "BACKGROUND", nil, -1);
self.Blackout:SetPoint("TOPLEFT", ClipFrame, "TOPLEFT", 0, 0);
self.Blackout:SetPoint("BOTTOMRIGHT", ClipFrame, "BOTTOMRIGHT", 0, 0);
for i = 1, 12 do
slice = container:CreateTexture(nil, "BACKGROUND");
self.MapSlices[i] = slice;
slice:SetSize(size, size);
slice:SetPoint("TOPLEFT", container, "TOPLEFT", col*size, -row*size);
col = col + 1;
if col >= 4 then
col = 0;
row = row + 1;
end
end
UpdateMaxZoom();
self:RegisterEvent("UI_SCALE_CHANGED");
self:RegisterEvent("DISPLAY_SIZE_CHANGED");
self:LoadMap();
--Header
local CursorPosText = self:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall");
CursorPosText:SetPoint("BOTTOMLEFT", ClipFrame, "TOPLEFT", 0, 4);
self.CursorPosText = CursorPosText;
self.t1 = 0; --Update player position, 60FPS
self.t2 = 0; --Update cursor position, 8FPS
self:SetScript("OnUpdate", self.OnUpdate);
--self:SetScript("OnMouseWheel", self.OnMouseWheel);
--self:SetScript("OnMouseDown", self.OnMouseDown);
--self:SetScript("OnMouseUp", self.OnMouseUp);
self.Init = nil;
end
function MainFrame:LoadMap(uiMapID)
uiMapID = uiMapID or C_Map.GetBestMapForUnit("player");
local mapData = MAP_DATA[uiMapID];
if not mapData then
return
end
if uiMapID == self.uiMapID then return end;
self.uiMapID = uiMapID;
local filePrefix = "Interface/AddOns/Plumber/Art/WorldMap/2200_";
local id;
local filter = "TRILINEAR"; --TRILINEAR-LINEAR
--self.Blackout:SetTexture(filePrefix.."thumbnail", nil, nil, "NEAREST");
for i = 1, 12 do
if i < 10 then
id = "0"..i;
else
id = i;
end
self.MapSlices[i]:SetTexture(filePrefix..id, nil, nil, filter);
end
PinUtil:RemoveAllPins();
self.PlayerPin = PinUtil:Acquire("Player");
if mapData.zones then
local pin, zoneName;
for _, zoneData in ipairs(mapData.zones) do
pin = PinUtil:Acquire("ZoneText");
pin:SetXY(zoneData[1], zoneData[2]);
zoneName = GetAreaInfo(zoneData[3]);
if zoneName then
zoneName = string.upper(zoneName);
zoneName = string.gsub(zoneName, " ", "\n", 1);
pin.Label:SetText(zoneName);
pin.Label2:SetText(zoneName);
pin.Label3:SetText(zoneName);
pin.Label4:SetText(zoneName);
end
end
end
self.watchedVigetteIDs = {};
if mapData.vignetteIDs then
for i, vignetteID in ipairs(mapData.vignetteIDs) do
self.watchedVigetteIDs[vignetteID] = true;
end
end
self:SetMapScale(1);
self:SetMapOffset(0, 0);
self:UpdateVignettes();
end
function MainFrame:UpdateVignettes()
--POIs
local vignetteGUIDs = C_VignetteInfo.GetVignettes();
local pin;
local info, vignettePosition, vignetteFacing;
local vignettesGUIDs = {};
local total = 0;
local uiMapID = self.uiMapID;
PinUtil:RemoveAllPins();
self.PlayerPin = PinUtil:Acquire("Player");
for i, guid in ipairs(vignetteGUIDs) do
info = C_VignetteInfo.GetVignetteInfo(guid);
if info and info.vignetteID and self.watchedVigetteIDs[info.vignetteID] then
total = total + 1;
vignettesGUIDs[total] = info.vignetteGUID;
vignettePosition, vignetteFacing = C_VignetteInfo.GetVignettePosition(info.vignetteGUID, uiMapID);
if vignettePosition then
pin = PinUtil:Acquire("SeedPlanting");
pin:SetScript("OnEnter", MapPinMixin.OnEnter);
pin:SetScript("OnLeave", MapPinMixin.OnLeave);
pin:EnableMouse(true);
pin:SetXY(vignettePosition:GetXY());
pin.objectGUID = info.objectGUID;
pin:Update();
end
end
end
--print("UpdateVignettes")
end
function MainFrame:OnUpdate(elapsed)
self.t1 = self.t1 + elapsed;
if self.t1 > 0.016 then
self.t1 = 0;
if self.PlayerPin then
local coordX, coordY = GetPlayerMapCoord(self.uiMapID);
self.PlayerPin:SetXY(coordX, coordY);
self.facing = GetPlayerFacing();
self.PlayerPin.Icon:SetRotation(self.facing or 0);
--self:CenterMapAtCoord(coordX, coordY);
end
end
self.t2 = self.t2 + elapsed;
if self.t2 >= 0.125 then
self.t2 = 0;
local cx, cy = self:GetCursorMapCoord();
self.CursorPosText:SetText(string.format("%.2f, %.2f", cx*100, cy*100));
end
if self.isMouseDown then
self:ProcessMousePan();
end
end
function MainFrame:GetCursorMapCoord()
local cursorX, cursorY = GetCursorPosition();
local effectiveScale = self:GetEffectiveScale();
cursorX = cursorX / effectiveScale;
cursorY = cursorY / effectiveScale;
local left = MainFrame.ClipFrame:GetLeft();
local top = MainFrame.ClipFrame:GetTop();
local rx = ((cursorX - left)/self.mapScale - self.mapOffsetX)/MAP_CANVAS_WIDTH;
local ry = ((top - cursorY)/self.mapScale + self.mapOffsetY)/MAP_CANVAS_HEIGHT;
rx = Clamp(rx, 0, 1);
ry = Clamp(ry, 0, 1);
return rx, ry
end
function MainFrame:ConvertMapCoordToOffset(coordX, coordY)
local cursorX, cursorY = GetCursorPosition();
local effectiveScale = self:GetEffectiveScale();
cursorX = cursorX / effectiveScale;
cursorY = cursorY / effectiveScale;
local left = MainFrame.ClipFrame:GetLeft();
local top = MainFrame.ClipFrame:GetTop();
local x = (cursorX - left)/self.mapScale - coordX*MAP_CANVAS_WIDTH;
local y = coordY*MAP_CANVAS_HEIGHT - (top - cursorY)/self.mapScale;
return x, y
end
function MainFrame:OnMouseWheel(delta)
if delta > 0 and self.zoomStep < self.maxZoomSteps then
self.zoomStep = self.zoomStep + 1;
elseif delta < 0 and self.zoomStep > 1 then
self.zoomStep = self.zoomStep - 1;
else
return
end
local rx, ry = self:GetCursorMapCoord();
local newScale = self.zoomScales[self.zoomStep];
self:SetMapScale(newScale);
local x, y = self:ConvertMapCoordToOffset(rx, ry);
self:SetMapOffset(x, y)
end
function MainFrame:SetMapScale(mapScale)
self.mapScale = mapScale;
self.MapContainer:SetScale(mapScale);
MAP_EFFECTIVE_SCALE = self.MapContainer:GetEffectiveScale();
self.maxPanX = -MAP_CANVAS_WIDTH + VIEWPORT_WIDTH/mapScale;
self.maxPanY = MAP_CANVAS_HEIGHT - VIEWPORT_HEIGHT/mapScale;
if self.mapOffsetX and self.mapOffsetY then
self:SetMapOffset(self.mapOffsetX, self.mapOffsetY);
end
PinUtil:UpdateAllPins();
end
function MainFrame:SetInteractable(state)
for _, obj in pairs(self.InteractableObjects) do
obj:EnableMouse(state);
end
end
function MainFrame:ProcessMousePan()
local cursorX, cursorY = GetCursorPosition();
local diffX = cursorX - self.fromCursorX;
local diffY = cursorY - self.fromCursorY;
diffX = diffX * self.cursorScale / self.mapScale;
diffY = diffY * self.cursorScale / self.mapScale;
self:SetMapOffset(self.fromOffsetX + diffX, self.fromOffsetY + diffY);
end
function MainFrame:SetMapOffset(offsetX, offsetY)
offsetX = Clamp(offsetX, self.maxPanX, 0);
offsetY = Clamp(offsetY, 0, self.maxPanY);
self.MapContainer:SetPoint("TOPLEFT", offsetX, offsetY);
self.mapOffsetX = offsetX;
self.mapOffsetY = offsetY;
end
function MainFrame:CenterMapAtCoord(coordX, coordY)
local canvasX = coordX * MAP_CANVAS_WIDTH;
local canvasY = coordY * MAP_CANVAS_HEIGHT;
local viewportX = VIEWPORT_WIDTH * 0.5;
local viewportY = VIEWPORT_HEIGHT * 0.5;
local diffX = -canvasX + viewportX/self.mapScale;
local diffY = canvasY - viewportY/self.mapScale;
self:SetMapOffset(diffX, diffY);
end
function MainFrame:OnMouseDown()
self.fromCursorX, self.fromCursorY = GetCursorPosition();
local _;
_, _, _, self.fromOffsetX, self.fromOffsetY = self.MapContainer:GetPoint(1);
self.cursorScale = 1/UIParent:GetEffectiveScale();
self.isMouseDown = true;
end
function MainFrame:OnMouseUp()
self.isMouseDown = false;
end
function MainFrame:OnShow()
self:RegisterEvent("UPDATE_UI_WIDGET");
self:RegisterEvent("VIGNETTES_UPDATED");
end
MainFrame:SetScript("OnShow", MainFrame.OnShow);
function MainFrame:OnHide()
self.isMouseDown = false;
self:UnregisterEvent("UPDATE_UI_WIDGET");
self:UnregisterEvent("VIGNETTES_UPDATED");
end
MainFrame:SetScript("OnHide", MainFrame.OnHide);
MainFrame.widgetData = {};
function MainFrame:AddWidgetInfo(widgetInfo)
local widgetID = widgetInfo.widgetID;
if not self.widgetData[widgetID] then
self.widgetData[widgetID] = widgetInfo.widgetType;
print("ID:", widgetInfo.widgetID, " Type:", widgetInfo.widgetType)
return true
end
end
local numWidgets = 0;
local WATCHED_TYPE = {
[2] = true,
[27] = true,
[8] = true,
[20] = true,
}
local function YeetWidgetInfo(widgetID, widgetType)
--https://wowpedia.fandom.com/wiki/UPDATE_UI_WIDGET
if not WATCHED_TYPE[widgetType] then return end;
local widgetTypeInfo = UIWidgetManager:GetWidgetTypeInfo(widgetType);
if not widgetTypeInfo then return end;
local widgetInfo = widgetTypeInfo.visInfoDataFunction(widgetID);
if not widgetInfo then return end;
if widgetInfo.text then print(widgetInfo.text) end;
if widgetInfo.tooltip then print(widgetInfo.tooltip) end;
if widgetInfo.timerTooltip then print(widgetInfo.timerTooltip) end;
if false then
local widgetFrame = CreateFrame(widgetTypeInfo.templateInfo.frameType, nil, MainFrame, widgetTypeInfo.templateInfo.frameTemplate);
numWidgets = numWidgets + 1;
widgetFrame:SetPoint("TOP", UIParent, "TOP", 0, -48*numWidgets);
widgetFrame.widgetID = widgetID;
widgetFrame.widgetSetID = 0;
widgetFrame.widgetType = widgetType;
widgetFrame.hasTimer = widgetInfo.hasTimer;
widgetFrame.orderIndex = widgetInfo.orderIndex;
widgetFrame.widgetTag = widgetInfo.widgetTag;
widgetFrame.inAnimType = widgetInfo.inAnimType;
widgetFrame.outAnimType = widgetInfo.outAnimType;
widgetFrame.layoutDirection = widgetInfo.layoutDirection;
widgetFrame.modelSceneLayer = widgetInfo.modelSceneLayer;
widgetFrame.scriptedAnimationEffectID = widgetInfo.scriptedAnimationEffectID;
widgetFrame.markedForRemove = nil;
if widgetFrame.hasTimer then
print(widgetID, "has a timer");
end
widgetFrame:Setup(widgetInfo, MainFrame);
local isNewWidget = true;
if isNewWidget and widgetFrame.OnAcquired then
widgetFrame:OnAcquired(widgetInfo);
end
end
end
MainFrame:RegisterEvent("VIGNETTES_UPDATED");
function MainFrame:OnEvent(event, ...)
if event == "UPDATE_UI_WIDGET" then
local widgetInfo = ...
if API.DreamseedUtil:IsValuableWidget(widgetInfo.widgetID) then
self:UpdateVignettes();
end
local isNew = self:AddWidgetInfo(widgetInfo);
if isNew then
YeetWidgetInfo(widgetInfo.widgetID, widgetInfo.widgetType);
end
elseif event == "VIGNETTES_UPDATED" then
self:UpdateVignettes();
elseif event == "UI_SCALE_CHANGED" or event == "DISPLAY_SIZE_CHANGED" then
UpdateMaxZoom();
end
end
MainFrame:SetScript("OnEvent", MainFrame.OnEvent);
--C_UIWidgetManager.GetStatusBarWidgetVisualizationInfo
MainFrame:Init()
MainFrame:Show();
MainFrame:SetAlpha(0)