local _ , addon = ...
local DataProvider = addon.DragonridingRaceDataProvider ;
local TourPOI = DataProvider.TourPOI ;
local WorldMapFrame = WorldMapFrame ;
local ENABLE_MAP_PIN = false ;
local WorldMapWidget ;
local function AreaPOIPin_OnMouseOver ( event , self , tooltipShown , poiID , name )
print ( tooltipShown , poiID , name )
if not ( tooltipShown and poiID and TourPOI [ poiID ] ) then return end ;
local mapID = self : GetMap ( ) : GetMapID ( ) ;
GameTooltip : AddDoubleLine ( " MapID " , mapID ) ;
local poiInfo = C_AreaPoiInfo.GetAreaPOIInfo ( mapID , poiID ) ;
if poiInfo then
local x , y = poiInfo.position : GetXY ( ) ;
GameTooltip : AddDoubleLine ( " X Coord. " , x ) ;
GameTooltip : AddDoubleLine ( " Y Coord. " , y ) ;
if false then
local point = {
uiMapID = mapID ,
position = poiInfo.position : Clone ( ) ;
} ;
C_Map.SetUserWaypoint ( point ) ;
local posVector = C_Map.GetUserWaypointPositionForMap ( 12 ) ;
if posVector then
GameTooltip : AddLine ( " World Map Position: " ) ;
x , y = posVector : GetXY ( ) ;
GameTooltip : AddDoubleLine ( " X Coord. " , x ) ;
GameTooltip : AddDoubleLine ( " Y Coord. " , y ) ;
print ( x , y )
end
end
end
GameTooltip : Show ( ) ;
end
--EventRegistry:RegisterCallback("AreaPOIPin.MouseOver", AreaPOIPin_OnMouseOver, {});
local PIN_TEMPLATE_NAME = " NarciWorldMapPinTemplate " ;
local PinUtil = { } ;
function PinUtil : GetPinPool ( )
if not self.pool then
local wm = WorldMapFrame ;
if wm and wm.pinPools and wm.pinPools [ PIN_TEMPLATE_NAME ] then
self.pool = wm.pinPools [ PIN_TEMPLATE_NAME ] ;
else
local pool = { } ;
self.pool = pool ;
function pool : EnumerateActive ( )
return pairs ( { } )
end
end
end
return self.pool
end
function PinUtil : HighlightPinByPOIID ( poiID )
local anyMatch ;
for pin in self : GetPinPool ( ) : EnumerateActive ( ) do
if pin.poiID == poiID then
pin : Focus ( ) ;
anyMatch = true ;
else
pin : Unfocus ( ) ;
end
end
if anyMatch then
end
end
function PinUtil : ResetPinVisual ( )
for pin in self : GetPinPool ( ) : EnumerateActive ( ) do
pin : ResetVisual ( ) ;
end
end
local NarciWorldMapDataProviderMixin = CreateFromMixins ( MapCanvasDataProviderMixin ) ;
function NarciWorldMapDataProviderMixin : GetPinTemplate ( )
return " NarciWorldMapPinTemplate " ;
end
function NarciWorldMapDataProviderMixin : OnShow ( )
--self:RegisterEvent("AREA_POIS_UPDATED");
end
function NarciWorldMapDataProviderMixin : OnHide ( )
--self:UnregisterEvent("AREA_POIS_UPDATED");
end
function NarciWorldMapDataProviderMixin : OnEvent ( event , ... )
if event == " AREA_POIS_UPDATED " then
end
end
function NarciWorldMapDataProviderMixin : RemoveAllData ( )
self : GetMap ( ) : RemoveAllPinsByTemplate ( self : GetPinTemplate ( ) ) ;
end
function NarciWorldMapDataProviderMixin : RefreshAllData ( fromOnShow )
self : RemoveAllData ( ) ;
local mapID = self : GetMap ( ) : GetMapID ( ) ;
if DataProvider : ShouldShowWorldMapWidget ( mapID ) then
DataProvider : SetCurrentContinent ( mapID ) ;
WorldMapWidget : Refresh ( mapID ) ;
if ENABLE_MAP_PIN then
NarciWorldMapDataProviderMixin : ShowAllPins ( ) ;
end
else
WorldMapWidget : Hide ( ) ;
end
end
function NarciWorldMapDataProviderMixin : ShowMapPinByPOIID ( poiID )
local x , y = TourPOI [ poiID ] . cx , TourPOI [ poiID ] . cy ;
local template = " NarciWorldMapPinTemplate " ;
local uiMapID = TourPOI [ poiID ] . mapID ;
local courseName = DataProvider : GetPOIName ( poiID ) ;
local mapName = DataProvider : GetMapName ( uiMapID ) ;
local poiInfo = {
atlasName = " racing " ,
name = mapName ,
description = courseName ,
poiID = poiID ,
isAlawysOnFlightmap = false ,
shouldGlow = false ,
isPrimaryMapForPOI = true ,
position = CreateVector2D ( x , y )
} ;
--[[
local dataProvider ;
for dp in pairs ( WorldMapFrame.dataProviders ) do
if dp.GetPinTemplate and dp : GetPinTemplate ( ) == template then
dataProvider = dp ;
end
end
--]]
poiInfo.dataProvider = NarciWorldMapDataProviderMixin ;
local pin = WorldMapFrame : AcquirePin ( template , poiInfo ) ;
end
function NarciWorldMapDataProviderMixin : ShowAllPins ( )
self : RemoveAllData ( ) ;
for i , poiID in ipairs ( DataProvider : GetPOIsForCurrentContinent ( ) ) do
self : ShowMapPinByPOIID ( poiID ) ;
end
end
local PIN_SIZE_NORMAL = 18 ;
local PIN_SIZE_FOCUSED = 24 ;
NarciWorldMapPinMixin = BaseMapPoiPinMixin : CreateSubPin ( " PIN_FRAME_LEVEL_AREA_POI " ) ; --PIN_FRAME_LEVEL_WORLD_QUEST, PIN_FRAME_LEVEL_VIGNETTE
function NarciWorldMapPinMixin : SetTexture ( poiInfo )
end
function NarciWorldMapPinMixin : OnMouseLeave ( )
BaseMapPoiPinMixin.OnMouseLeave ( self ) ;
--self:Unfocus();
end
function NarciWorldMapPinMixin : OnMouseEnter ( )
BaseMapPoiPinMixin.OnMouseEnter ( self ) ;
--self:Focus();
if WorldMapWidget then
WorldMapWidget : HoverListButtonByPOI ( self.poiID ) ;
end
end
function NarciWorldMapPinMixin : Focus ( )
self.GlowTexture : Show ( ) ;
self.AnimGlow : Stop ( ) ;
self.AnimGlow : Play ( ) ;
self.Texture : SetSize ( PIN_SIZE_FOCUSED , PIN_SIZE_FOCUSED ) ;
self : SetAlpha ( 1 ) ;
end
function NarciWorldMapPinMixin : Unfocus ( )
self.GlowTexture : Hide ( ) ;
self.AnimGlow : Stop ( ) ;
self.Texture : SetSize ( PIN_SIZE_NORMAL , PIN_SIZE_NORMAL ) ;
self : SetAlpha ( 0.5 ) ;
end
function NarciWorldMapPinMixin : ResetVisual ( )
self.GlowTexture : Hide ( ) ;
self.AnimGlow : Stop ( ) ;
self.Texture : SetSize ( PIN_SIZE_NORMAL , PIN_SIZE_NORMAL ) ;
self : SetAlpha ( 1 ) ;
end
function NarciWorldMapPinMixin : OnAcquired ( poiInfo )
self.name = poiInfo.name ;
self.description = poiInfo.description ;
self.widgetSetID = poiInfo.widgetSetID ;
self.textureKit = poiInfo.uiTextureKit ;
self.poiID = poiInfo.poiID ;
self : SetPosition ( poiInfo.position : GetXY ( ) ) ;
self : SetSize ( 24 , 24 ) ;
self.Texture : SetSize ( PIN_SIZE_NORMAL , PIN_SIZE_NORMAL ) ;
if DataProvider : IsCourseGold ( self.poiID ) then
self.Texture : SetTexture ( " Interface \\ AddOns \\ Narcissus \\ Art \\ Modules \\ DragonridingRaces \\ MapPin-RacingFlag " ) ;
else
self.Texture : SetTexture ( " Interface \\ AddOns \\ Narcissus \\ Art \\ Modules \\ DragonridingRaces \\ MapPin-RacingFlag-RedDot " ) ;
end
self.HighlightTexture : SetTexture ( " Interface \\ AddOns \\ Narcissus \\ Art \\ Modules \\ DragonridingRaces \\ MapPin-RacingFlag " ) ;
self.GlowTexture : SetTexture ( " Interface \\ AddOns \\ Narcissus \\ Art \\ Modules \\ DragonridingRaces \\ MapPin-RacingFlag-Glow " ) ;
end
local MapController = { } ;
local inOutSine = addon.EasingFunctions . inOutSine ;
function MapController : SetMapPan ( x , y )
local scrollContainer = WorldMapFrame.ScrollContainer ;
local scale = scrollContainer.targetScale ;
scrollContainer.targetScrollX = x ;
scrollContainer.targetScrollY = y ;
scrollContainer.currentScrollX = x ;
scrollContainer.currentScrollY = y ;
scrollContainer : SetNormalizedHorizontalScroll ( x ) ;
scrollContainer : SetNormalizedVerticalScroll ( y ) ;
end
function MapController : GetProcessor ( )
if not self.p then
self.p = CreateFrame ( " Frame " , nil , WorldMapFrame ) ;
self.p : Hide ( ) ;
self.p . t = - 1 ;
self.p : SetScript ( " OnHide " , function ( )
self.p : Hide ( ) ;
end ) ;
self.p : SetScript ( " OnUpdate " , function ( p , elapsed )
p.t = p.t + elapsed ;
if p.t < 0 then
return
end
local x = inOutSine ( p.t , p.fromX , p.toX , p.d ) ;
local y = inOutSine ( p.t , p.fromY , p.toY , p.d ) ;
if p.t >= p.d then
p : Hide ( ) ;
x = p.toX ;
y = p.toY ;
end
self : SetMapPan ( x , y ) ;
end ) ;
end
return self.p
end
function MapController : SmoothPanTo ( x , y , useDelay )
local p = self : GetProcessor ( ) ;
local x0 , y0 = WorldMapFrame.ScrollContainer . targetScrollX , WorldMapFrame.ScrollContainer . targetScrollY ;
local mapWidth , mapHeight = WorldMapFrame.ScrollContainer . Child : GetSize ( ) ;
local distance = math.sqrt ( ( mapWidth * ( x - x0 ) ) ^ 2 + ( mapHeight * ( y - y0 ) ) ^ 2 ) ;
if distance <= 2 then
p : Hide ( ) ;
return
end
local duration = distance / 600 ;
if duration > 1 then
duration = 1 ;
elseif duration < 0.4 then
duration = 0.4 ;
end
p.t = ( useDelay and - 0.08 ) or 0 ;
p.fromX , p.fromY = x0 , y0 ;
p.toX , p.toY = x , y ;
p.d = duration ;
p : Show ( ) ;
end
function MapController : StopPanQueue ( )
local p = self : GetProcessor ( ) ;
if p.t < 0 then
p : Hide ( ) ;
end
end
local function Clamp ( value , min , max )
if value < min then
return min
elseif value > max then
return max
end
return value
end
function MapController : SmoothPanToPOI ( poiID , useDelay )
--Attemp to center
local scrollContainer = WorldMapFrame.ScrollContainer ;
--scrollContainer:SetZoomTarget(2);
local x , y = DataProvider : GetPOIContinentPosition ( poiID ) ;
local childScale = scrollContainer.Child : GetScale ( ) ;
local childWidth = scrollContainer.Child : GetWidth ( ) ;
local offsetX = 100 / ( childScale * childWidth ) ;
x = x - offsetX ;
x = Clamp ( x , scrollContainer.scrollXExtentsMin , scrollContainer.scrollXExtentsMax ) ;
y = Clamp ( y , scrollContainer.scrollYExtentsMin , scrollContainer.scrollYExtentsMax ) ;
--scrollContainer:SetPanTarget(x, y);
MapController : SmoothPanTo ( x , y , useDelay ) ;
end
NarciWorldMapDragonridingRaceListButtonMixin = { } ;
function NarciWorldMapDragonridingRaceListButtonMixin : SetBlackText ( state )
if state then
self.ButtonText : SetTextColor ( 0 , 0 , 0 ) ;
self.ButtonText : SetShadowColor ( 1 , 1 , 1 , 0 ) ;
else
self.ButtonText : SetTextColor ( 0.80 , 0.80 , 0.80 ) ;
self.ButtonText : SetShadowColor ( 0 , 0 , 0 , 1 ) ;
end
end
function NarciWorldMapDragonridingRaceListButtonMixin : OnEnter ( )
WorldMapWidget : HighlightButton ( self ) ;
self : SetBlackText ( true ) ;
WorldMapWidget : ShowRecordsForPOI ( self.poiID ) ;
PinUtil : HighlightPinByPOIID ( self.poiID ) ;
MapController : SmoothPanToPOI ( self.poiID , true ) ;
end
function NarciWorldMapDragonridingRaceListButtonMixin : OnLeave ( )
WorldMapWidget : HighlightButton ( ) ;
self : SetBlackText ( false ) ;
WorldMapWidget : ShowTournamentInfo ( ) ;
PinUtil : ResetPinVisual ( ) ;
MapController : StopPanQueue ( ) ;
end
function NarciWorldMapDragonridingRaceListButtonMixin : OnClick ( button )
if button == " RightButton " then
WorldMapWidget : HideScoreboard ( ) ;
return
end
if IsModifierKeyDown ( ) then
--So it can be triggered by both Shift or Ctrl Click --IsModifiedClick("QUESTWATCHTOGGLE")
C_Map.SetUserWaypoint ( DataProvider : GetPOIWaypoint ( self.poiID ) ) ;
C_SuperTrack.SetSuperTrackedUserWaypoint ( true ) ;
end
end
function NarciWorldMapDragonridingRaceListButtonMixin : SetDataByPOI ( poiID )
if DataProvider : IsCourseGold ( poiID ) then
self.RedDot : Hide ( ) ;
else
self.RedDot : Show ( ) ;
end
if poiID == self.poiID then
return
end
self.poiID = poiID ;
self.ButtonText : SetWidth ( 160 ) ;
self.ButtonText : SetText ( DataProvider : GetPOIName ( poiID ) ) ;
if self.ButtonText : IsTruncated ( ) then
self.ButtonText : SetWidth ( 150 ) ;
end
end
local function SimpleIconButton_OnEnter ( self )
self.Icon : SetVertexColor ( 1 , 1 , 1 ) ;
end
local function SimpleIconButton_OnLeave ( self )
self.Icon : SetVertexColor ( 0.8 , 0.8 , 0.8 ) ;
end
NarciWorldMapDragonridingRaceUIMixin = { } ;
function NarciWorldMapDragonridingRaceUIMixin : OnLoad ( )
WorldMapWidget = self ;
NarciWorldMapDragonridingRaceUI = self ;
local blurredTexture = self.BackgroundFrame . BlurredMap : CreateTexture ( nil , " BACKGROUND " , nil , - 1 ) ;
self.blurredTexture = blurredTexture ;
blurredTexture : Hide ( ) ;
local relativeTo = WorldMapFrame.ScrollContainer . Child ;
blurredTexture : SetPoint ( " TOPLEFT " , relativeTo , " TOPLEFT " , 0 , 0 ) ;
blurredTexture : SetPoint ( " BOTTOMRIGHT " , relativeTo , " BOTTOMRIGHT " , 0 , 0 ) ;
--Setup Scoreboard Toggle
self.ToggleButton : SetScript ( " OnEnter " , function ( f )
f.Icon : SetTexCoord ( 0.5 , 0.875 , 0 , 0.375 ) ;
end ) ;
self.ToggleButton : SetScript ( " OnLeave " , function ( f )
f.Icon : SetTexCoord ( 0 , 0.375 , 0 , 0.375 ) ;
end ) ;
self.ToggleButton : SetScript ( " OnClick " , function ( f )
self : ShowScoreboard ( ) ;
end ) ;
local button1 = self.ListFrame . CloseButton ;
SimpleIconButton_OnLeave ( button1 ) ;
button1 : SetScript ( " OnEnter " , SimpleIconButton_OnEnter ) ;
button1 : SetScript ( " OnLeave " , SimpleIconButton_OnLeave ) ;
button1 : SetScript ( " OnClick " , function ( )
self : HideScoreboard ( ) ;
end ) ;
--Pin Toggle
local button2 = self.ListFrame . PinToggle ;
SimpleIconButton_OnLeave ( button2 ) ;
button2 : SetScript ( " OnEnter " , SimpleIconButton_OnEnter ) ;
button2 : SetScript ( " OnLeave " , SimpleIconButton_OnLeave ) ;
button2 : SetScript ( " OnClick " , function ( )
self : EnableMapPin ( not ENABLE_MAP_PIN ) ;
end ) ;
self : EnableMapPin ( NarcissusDB.DragonridingTourWorldMapPin ) ;
end
function NarciWorldMapDragonridingRaceUIMixin : EnableMapPin ( state )
if state == nil then
state = true ;
end
if state then
self.ListFrame . PinToggle.Icon : SetTexCoord ( 0.5 , 1 , 0 , 1 ) ;
else
self.ListFrame . PinToggle.Icon : SetTexCoord ( 0 , 0.5 , 0 , 1 ) ;
end
ENABLE_MAP_PIN = state ;
NarcissusDB.DragonridingTourWorldMapPin = state ;
if self : IsVisible ( ) then
NarciWorldMapDataProviderMixin : RefreshAllData ( ) ;
end
end
function NarciWorldMapDragonridingRaceUIMixin : ShowScoreboard ( )
self.ToggleButton : Hide ( ) ;
self : Refresh ( ) ;
self : EnableMouse ( true ) ;
end
function NarciWorldMapDragonridingRaceUIMixin : HideScoreboard ( )
self.ToggleButton : Show ( ) ;
self : Refresh ( ) ;
self : EnableMouse ( false ) ;
end
function NarciWorldMapDragonridingRaceUIMixin : Refresh ( mapID )
if not mapID then
mapID = WorldMapFrame : GetMapID ( ) ;
end
if mapID then
local poiList = DataProvider : GetPOIsForContinent ( mapID ) ;
if poiList and # poiList > 0 then
if self.ToggleButton : IsShown ( ) then
self.blurredTexture : Hide ( ) ;
self.BackgroundFrame : Hide ( ) ;
self.ListFrame : Hide ( ) ;
else
DataProvider : UpdateAllRecords ( ) ;
local padding = 4 ;
local footerHeight = 28 ;
local headerHeight = 48 ;
if not self.listButtons then
self.listButtons = { } ;
end
local button ;
local poiID ;
local total = # poiList ;
for i = 1 , total do
button = self.listButtons [ i ] ;
if not button then
button = CreateFrame ( " Button " , nil , self.ListFrame , " NarciWorldMapDragonridingRaceListButtonTemplate " ) ;
button : SetPoint ( " BOTTOMLEFT " , self , " BOTTOMLEFT " , 0 , ( i - 1 ) * 20 + padding + footerHeight ) ;
self.listButtons [ i ] = button ;
end
poiID = poiList [ total - i + 1 ] ;
button : SetDataByPOI ( poiID ) ;
button : Show ( ) ;
end
for i = total + 1 , # self.listButtons do
self.listButtons [ i ] : Hide ( ) ;
end
self : SetHeight ( total * 20 + padding * 2 + headerHeight + footerHeight ) ;
self.blurredTexture : Show ( ) ;
self.BackgroundFrame : Show ( ) ;
self.ListFrame : Show ( ) ;
end
self : Show ( ) ;
return
end
end
self : Hide ( ) ;
self.blurredTexture : Hide ( ) ;
end
function NarciWorldMapDragonridingRaceUIMixin : OnEnter ( )
end
function NarciWorldMapDragonridingRaceUIMixin : OnLeave ( )
end
function NarciWorldMapDragonridingRaceUIMixin : HighlightButton ( button )
if self.lastButton then
self.lastButton : SetBlackText ( false ) ;
self.lastButton = nil ;
end
self.lastButton = button ;
self.ListFrame . ButtonHighlight : ClearAllPoints ( ) ;
if button then
self.ListFrame . ButtonHighlight : SetPoint ( " TOPLEFT " , button , " TOPLEFT " , 0 , 0 ) ;
self.ListFrame . ButtonHighlight : SetPoint ( " BOTTOMRIGHT " , button , " BOTTOMRIGHT " , 0 , 0 ) ;
self.ListFrame . ButtonHighlight : Show ( ) ;
else
self.ListFrame . ButtonHighlight : Hide ( ) ;
end
end
function NarciWorldMapDragonridingRaceUIMixin : ShowRecordsForPOI ( poiID )
if poiID then
local t1 , t2 ;
for i = 1 , 3 do
t1 , t2 = DataProvider : GetAndCacheRecord ( poiID , i ) ;
self.ListFrame . RecordFrame.TimeDisplays [ i ] : SetRecord ( t1 , t2 ) ;
end
else
for i = 1 , 3 do
self.ListFrame . RecordFrame.TimeDisplays [ i ] : SetRecord ( ) ;
end
end
self.ListFrame . RecordFrame : Show ( ) ;
self.ListFrame . TournamentInfo : Hide ( ) ;
end
function NarciWorldMapDragonridingRaceUIMixin : ShowTournamentInfo ( )
self.ListFrame . RecordFrame : Hide ( ) ;
self.ListFrame . TournamentInfo : Show ( ) ;
local seconds = DataProvider : GetTournamentRemainingSeconds ( ) ;
self.ListFrame . TournamentInfo.DurationDisplay : SetCountdown ( seconds ) ;
end
function NarciWorldMapDragonridingRaceUIMixin : HoverListButtonByPOI ( poiID )
if self : IsVisible ( ) then
if self.listButtons then
for i , button in ipairs ( self.listButtons ) do
if button.poiID == poiID then
self : HighlightButton ( button ) ;
button : SetBlackText ( true ) ;
else
button : SetBlackText ( false ) ;
end
end
end
WorldMapWidget : ShowRecordsForPOI ( poiID ) ;
end
end
function NarciWorldMapDragonridingRaceUIMixin : OnMouseDown ( button )
if button == " RightButton " then
self : HideScoreboard ( ) ;
end
end
function NarciWorldMapDragonridingRaceUIMixin : OnShow ( )
--one-time
local trpButton = TRP3_WorldMapButton ;
if trpButton then
local height = trpButton : GetHeight ( ) ;
self.ToggleButton : ClearAllPoints ( ) ;
self.ToggleButton : SetPoint ( " BOTTOMLEFT " , self : GetParent ( ) , " BOTTOMLEFT " , 8 , height + 24 ) ;
self.ToggleButton . Shade : Hide ( ) ;
self : SetFrameStrata ( " FULLSCREEN_DIALOG " ) ;
self : SetFixedFrameStrata ( true ) ;
self : SetFrameLevel ( 20 ) ;
end
self : SetScript ( " OnShow " , nil ) ;
end
NarciDragonridingRaceTimeDisplayMixin = { } ;
function NarciDragonridingRaceTimeDisplayMixin : OnLoad ( )
local font = " Interface \\ AddOns \\ Narcissus \\ Font \\ OpenSans-SemiBold.ttf " ;
local style = " " ; --OUTLINE;
self.LeftNum : SetFont ( font , 18 , style ) ;
self.RightNum : SetFont ( font , 12 , style ) ;
self.Label : SetFont ( font , 12 , style ) ;
self.LeftNum : SetTextColor ( 1 , 1 , 1 ) ;
self.RightNum : SetTextColor ( 1 , 1 , 1 ) ;
self.Label : SetTextColor ( 1 , 1 , 1 ) ;
self.LeftNum : SetShadowOffset ( 2 , - 2 ) ;
self.RightNum : SetShadowOffset ( 1 , - 1 ) ;
self.Label : SetShadowOffset ( 1 , - 1 ) ;
self : SetHorizontalGap ( - 3 ) ;
end
function NarciDragonridingRaceTimeDisplayMixin : Layout ( )
local width = self.RightNum : GetWidth ( ) + self.LeftNum : GetWidth ( ) + self.hGap ;
self : SetWidth ( width ) ;
end
function NarciDragonridingRaceTimeDisplayMixin : SetRecord ( record , standard )
local diff ;
local grey ;
if ( not record ) or ( record == 0 ) then
self.LeftNum : SetText ( " -- \" " ) ;
self.RightNum : SetText ( " -- " ) ;
grey = true ;
if standard then
diff = string.format ( " |cffdd4e4e%.3f|r " , standard ) ;
end
else
local n1 = math.floor ( record ) ;
local n2 = 1000 * ( record - n1 ) ;
if standard then
diff = record - standard ;
if diff <= 0 then --green
if diff < 0 then
diff = - diff ;
end
diff = string.format ( " |cff80ce94-%.3f|r " , diff ) ;
grey = false ;
else --red untimed
diff = string.format ( " |cffdd4e4e+%.3f|r " , diff ) ;
grey = true ;
end
else
grey = false ;
end
if n2 == 0 then
n2 = " 000 " ;
elseif n2 < 9 then
n2 = string.format ( " 00%.0f " , n2 )
elseif n2 < 100 then
n2 = string.format ( " 0%.0f " , n2 )
else
n2 = string.format ( " %.0f " , n2 )
end
self.LeftNum : SetText ( n1 .. " \" " ) ;
self.RightNum : SetText ( n2 ) ;
end
if grey then
self.LeftNum : SetTextColor ( 0.67 , 0.67 , 0.67 ) ;
self.RightNum : SetTextColor ( 0.67 , 0.67 , 0.67 ) ;
else
self.LeftNum : SetTextColor ( 1 , 1 , 1 ) ;
self.RightNum : SetTextColor ( 1 , 1 , 1 ) ;
end
if not diff then
diff = " |cffaaaaaan/a|r " ;
end
self.Label : SetText ( diff ) ;
self : Layout ( ) ;
end
function NarciDragonridingRaceTimeDisplayMixin : SetCountdown ( seconds , labelText )
if labelText then
self.Label : SetText ( labelText ) ;
end
if seconds then
local value , unit , fallbackUnit ;
local redText = seconds < 172800 ;
if seconds > 86400 then
value = math.floor ( seconds / 86400 + 0.5 ) ;
fallbackUnit = " DAYS " ;
if value > 1 then
unit = Narci.L [ " Day Plural " ] ;
else
unit = Narci.L [ " Day Singular " ] ;
end
else
value = math.floor ( seconds / 3600 ) ;
if value > 1 then
unit = Narci.L [ " Hour Plural " ] ;
else
unit = Narci.L [ " Hour Singular " ] ;
end
fallbackUnit = " HOURS " ;
end
if unit then
unit = string.upper ( unit ) ;
else
unit = fallbackUnit ;
end
self.LeftNum : SetText ( value ) ;
self.RightNum : SetText ( unit ) ;
if redText then
self.LeftNum : SetTextColor ( 1 , 0.502 , 0.251 ) ; --The Color of Limited Time Set --0.94, 0.302, 0.302
self.RightNum : SetTextColor ( 1 , 0.502 , 0.251 ) ;
else
self.LeftNum : SetTextColor ( 0.8 , 0.8 , 0.8 ) ;
self.RightNum : SetTextColor ( 0.8 , 0.8 , 0.8 ) ;
end
self : Layout ( ) ;
end
end
function NarciDragonridingRaceTimeDisplayMixin : SetHorizontalGap ( gap )
self.RightNum : SetPoint ( " BOTTOMLEFT " , self.LeftNum , " BOTTOMRIGHT " , gap , 0 ) ;
self.hGap = gap ;
end
do
local function CheckActiveTournament ( )
--Must be used after game loading process
local currentCalendarTime = C_DateAndTime.GetCurrentCalendarTime ( ) ;
C_Calendar.SetAbsMonth ( currentCalendarTime.month , currentCalendarTime.year ) ;
C_Calendar.OpenCalendar ( ) ;
C_Timer.After ( 2 , function ( )
local tourLocalizedName , remainingSeconds , tourLabel = DataProvider : GetActiveTournamentInfo ( ) ;
local enable = ( tourLocalizedName ~= nil ) ;
if enable then
local overlay = CreateFrame ( " Frame " , nil , WorldMapFrame , " NarciWorldMapDragonridingRaceUITemplate " ) ;
overlay : SetPoint ( " BOTTOMLEFT " , WorldMapFrame : GetCanvasContainer ( ) , " BOTTOMLEFT " , 0 , 1 ) ;
local durationDisplay = overlay.ListFrame . TournamentInfo.DurationDisplay ;
local icon = " |TInterface \\ AddOns \\ Narcissus \\ Art \\ Modules \\ DragonridingRaces \\ ClockIcon:0:0:0:1:32:32:0:32:0:32:172:172:172|t " ;
durationDisplay.Label : SetText ( icon .. " " .. tourLocalizedName ) ;
durationDisplay.Label : SetTextColor ( 0.67 , 0.67 , 0.67 ) ;
durationDisplay : SetHorizontalGap ( 4 ) ;
overlay : ShowTournamentInfo ( ) ;
WorldMapFrame : AddDataProvider ( NarciWorldMapDataProviderMixin ) ;
WorldMapWidget.blurredTexture : SetTexture ( string.format ( " Interface \\ AddOns \\ Narcissus \\ Art \\ Modules \\ DragonridingRaces \\ BlurredMap-%s " , tourLabel ) , nil , nil , " TRILINEAR " ) ; --Resize to 768x512 then Gaussian radius 3
end
end ) ;
end
addon.AddLoadingCompleteCallback ( CheckActiveTournament ) ;
end
--[[
local function GetMapPinDataProviderByTemplateName ( template )
for dp in pairs ( WorldMapFrame.dataProviders ) do
if dp.GetPinTemplate and dp : GetPinTemplate ( ) == template then
return dp
end
end
end
local function VignettePinDataProvider_Callback ( )
print ( " Update Pin " )
end
local function HookVignetteDataProvider ( )
local dp = GetMapPinDataProviderByTemplateName ( " VignettePinTemplate " ) ;
if dp then
hooksecurefunc ( dp , " RefreshAllData " , VignettePinDataProvider_Callback ) ;
end
end
local function VignettePin_OnMouseEnter ( self )
local id = self.GetVignetteID and self : GetVignetteID ( ) ;
if id then
if GameTooltip : IsVisible ( ) then
GameTooltip : AddDoubleLine ( " VignetteID " , id ) ;
GameTooltip : Show ( ) ;
end
end
end
local HOOKED_VIGNETTE_PINS = { } ;
local function PinPool_OnAcquire ( )
for pin in WorldMapFrame.pinPools [ " VignettePinTemplate " ] : EnumerateActive ( ) do
if not ( HOOKED_VIGNETTE_PINS [ pin ] ) then
HOOKED_VIGNETTE_PINS [ pin ] = true ;
if pin.OnMouseEnter then
hooksecurefunc ( pin , " OnMouseEnter " , VignettePin_OnMouseEnter ) ;
end
end
end
end
local function HookMapPinPoolByTemplate ( pinTemplate )
local f = WorldMapFrame ;
if f and f.pinPools then
if f.pinPools [ pinTemplate ] then
hooksecurefunc ( f.pinPools [ pinTemplate ] , " Acquire " , PinPool_OnAcquire ) ;
print ( " Success " )
return
end
end
end
local function InitializeVignettePinPool ( )
local pinTemplate = " VignettePinTemplate " ;
local vignetteGUID = " Vignette-0-0-0-0-0-0000000000 " ;
local vignetteInfo = { } ;
local frameIndex = 1 ;
HookMapPinPoolByTemplate ( pinTemplate ) ;
end
--]]