251 lines
7.0 KiB
Lua
251 lines
7.0 KiB
Lua
|
|
GAMETIME_AM = true;
|
|
GAMETIME_PM = false;
|
|
|
|
local GAMETIME_DAWN = ( 5 * 60) + 30; -- 5:30 AM
|
|
local GAMETIME_DUSK = (21 * 60) + 0; -- 9:00 PM
|
|
|
|
|
|
local date = date;
|
|
local format = format;
|
|
local GetCVarBool = GetCVarBool;
|
|
local CalendarGetDate = CalendarGetDate;
|
|
local max = max;
|
|
local tonumber = tonumber;
|
|
|
|
local PI = PI;
|
|
local TWOPI = PI * 2.0;
|
|
local cos = math.cos;
|
|
local INVITE_PULSE_SEC = 1.0 / (2.0*1.0); -- mul by 2 so the pulse constant counts for half a flash
|
|
|
|
-- general GameTime functions
|
|
function GameTime_GetFormattedTime(hour, minute, wantAMPM)
|
|
if ( GetCVarBool("timeMgrUseMilitaryTime") ) then
|
|
return format(TIMEMANAGER_TICKER_24HOUR, hour, minute);
|
|
else
|
|
if ( wantAMPM ) then
|
|
local timeFormat = TIME_TWELVEHOURAM;
|
|
if ( hour == 0 ) then
|
|
hour = 12;
|
|
elseif ( hour == 12 ) then
|
|
timeFormat = TIME_TWELVEHOURPM;
|
|
elseif ( hour > 12 ) then
|
|
timeFormat = TIME_TWELVEHOURPM;
|
|
hour = hour - 12;
|
|
end
|
|
return format(timeFormat, hour, minute);
|
|
else
|
|
if ( hour == 0 ) then
|
|
hour = 12;
|
|
elseif ( hour > 12 ) then
|
|
hour = hour - 12;
|
|
end
|
|
return format(TIMEMANAGER_TICKER_12HOUR, hour, minute);
|
|
end
|
|
end
|
|
end
|
|
|
|
function GameTime_ComputeMinutes(hour, minute, militaryTime, am)
|
|
local minutes;
|
|
if ( militaryTime ) then
|
|
minutes = minute + hour*60;
|
|
else
|
|
local h = hour;
|
|
if ( am ) then
|
|
if ( h == 12 ) then
|
|
h = 0;
|
|
end
|
|
else
|
|
if ( h ~= 12 ) then
|
|
h = h + 12;
|
|
end
|
|
end
|
|
minutes = minute + h*60;
|
|
end
|
|
return minutes;
|
|
end
|
|
|
|
-- GameTime_ComputeStandardTime assumes the given time is military (24 hour)
|
|
function GameTime_ComputeStandardTime(hour)
|
|
if ( hour > 12 ) then
|
|
return hour - 12, GAMETIME_PM;
|
|
elseif ( hour == 0 ) then
|
|
return 12, GAMETIME_AM;
|
|
else
|
|
return hour, GAMETIME_AM;
|
|
end
|
|
end
|
|
|
|
-- GameTime_ComputeMilitaryTime assumes the given time is standard (12 hour)
|
|
function GameTime_ComputeMilitaryTime(hour, am)
|
|
if ( am and hour == 12 ) then
|
|
return 0;
|
|
elseif ( not am and hour < 12 ) then
|
|
return hour + 12;
|
|
else
|
|
return hour;
|
|
end
|
|
end
|
|
|
|
function GameTime_GetLocalTime(wantAMPM)
|
|
local hour, minute = tonumber(date("%H")), tonumber(date("%M"));
|
|
return GameTime_GetFormattedTime(hour, minute, wantAMPM), hour, minute;
|
|
end
|
|
|
|
function GameTime_GetGameTime(wantAMPM)
|
|
local hour, minute = GetGameTime();
|
|
return GameTime_GetFormattedTime(hour, minute, wantAMPM), hour, minute;
|
|
end
|
|
|
|
function GameTime_GetTime(showAMPM)
|
|
if ( GetCVarBool("timeMgrUseLocalTime") ) then
|
|
return GameTime_GetLocalTime(showAMPM);
|
|
else
|
|
return GameTime_GetGameTime(showAMPM);
|
|
end
|
|
end
|
|
|
|
function GameTime_UpdateTooltip()
|
|
-- title
|
|
GameTooltip:AddLine(TIMEMANAGER_TOOLTIP_TITLE, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
|
|
-- realm time
|
|
GameTooltip:AddDoubleLine(
|
|
TIMEMANAGER_TOOLTIP_REALMTIME,
|
|
GameTime_GetGameTime(true),
|
|
NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b,
|
|
HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
|
|
-- local time
|
|
GameTooltip:AddDoubleLine(
|
|
TIMEMANAGER_TOOLTIP_LOCALTIME,
|
|
GameTime_GetLocalTime(true),
|
|
NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b,
|
|
HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
|
|
end
|
|
|
|
|
|
-- GameTimeFrame functions
|
|
|
|
function GameTimeFrame_OnLoad(self)
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
|
self:RegisterEvent("CALENDAR_UPDATE_PENDING_INVITES");
|
|
self:RegisterEvent("CALENDAR_EVENT_ALARM");
|
|
self:RegisterForClicks("AnyUp");
|
|
|
|
-- adjust button texture layers to not interfere with overlaid textures
|
|
local tex;
|
|
tex = self:GetNormalTexture();
|
|
tex:SetDrawLayer("BACKGROUND");
|
|
tex = self:GetPushedTexture();
|
|
tex:SetDrawLayer("BACKGROUND");
|
|
|
|
self:GetFontString():SetDrawLayer("BACKGROUND");
|
|
|
|
self.timeOfDay = 0;
|
|
self:SetFrameLevel(self:GetFrameLevel() + 2);
|
|
self.pendingCalendarInvites = 0;
|
|
self.hour = 0;
|
|
self.flashTimer = 0.0;
|
|
GameTimeFrame_OnUpdate(self);
|
|
end
|
|
|
|
function GameTimeFrame_OnEnter(self)
|
|
GameTooltip:SetOwner(self, "ANCHOR_BOTTOMLEFT");
|
|
end
|
|
|
|
function GameTimeFrame_OnEvent(self, event, ...)
|
|
if ( event == "CALENDAR_UPDATE_PENDING_INVITES" or event == "PLAYER_ENTERING_WORLD" ) then
|
|
local pendingCalendarInvites = CalendarGetNumPendingInvites();
|
|
if ( pendingCalendarInvites > self.pendingCalendarInvites ) then
|
|
if ( not CalendarFrame or (CalendarFrame and not CalendarFrame:IsShown()) ) then
|
|
GameTimeCalendarInvitesTexture:Show();
|
|
GameTimeCalendarInvitesGlow:Show();
|
|
GameTimeFrame.flashInvite = true;
|
|
self.pendingCalendarInvites = pendingCalendarInvites;
|
|
end
|
|
elseif ( pendingCalendarInvites == 0 ) then
|
|
GameTimeCalendarInvitesTexture:Hide();
|
|
GameTimeCalendarInvitesGlow:Hide();
|
|
GameTimeFrame.flashInvite = false;
|
|
self.pendingCalendarInvites = 0;
|
|
end
|
|
GameTimeFrame_SetDate();
|
|
elseif ( event == "CALENDAR_EVENT_ALARM" ) then
|
|
local title, hour, minute = ...;
|
|
local info = ChatTypeInfo["SYSTEM"];
|
|
DEFAULT_CHAT_FRAME:AddMessage(format(CALENDAR_EVENT_ALARM_MESSAGE, title), info.r, info.g, info.b, info.id);
|
|
--UIFrameFlash(GameTimeCalendarEventAlarmTexture, 1.0, 1.0, 6);
|
|
end
|
|
end
|
|
|
|
function GameTimeFrame_OnUpdate(self, elapsed)
|
|
local hour, minute = GetGameTime();
|
|
local time = (hour * 60) + minute;
|
|
if ( time ~= self.timeOfDay ) then
|
|
self.timeOfDay = time;
|
|
local minx = 0;
|
|
local maxx = 50/128;
|
|
local miny = 0;
|
|
local maxy = 50/64;
|
|
if(time < GAMETIME_DAWN or time >= GAMETIME_DUSK) then
|
|
minx = minx + 0.5;
|
|
maxx = maxx + 0.5;
|
|
end
|
|
if ( hour ~= self.hour ) then
|
|
self.hour = hour;
|
|
GameTimeFrame_SetDate();
|
|
end
|
|
GameTimeTexture:SetTexCoord(minx, maxx, miny, maxy);
|
|
end
|
|
if ( GameTooltip:IsOwned(self) ) then
|
|
GameTooltip:ClearLines();
|
|
if ( GameTimeCalendarInvitesTexture:IsShown() ) then
|
|
GameTooltip:AddLine(GAMETIME_TOOLTIP_CALENDAR_INVITES);
|
|
if ( CalendarFrame and not CalendarFrame:IsShown() ) then
|
|
GameTooltip:AddLine(" ");
|
|
GameTooltip:AddLine(GAMETIME_TOOLTIP_TOGGLE_CALENDAR);
|
|
end
|
|
else
|
|
if ( not TimeManagerClockButton or not TimeManagerClockButton:IsVisible() or TimeManager_IsAlarmFiring() ) then
|
|
GameTooltip:AddLine(GameTime_GetGameTime(true), HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
|
|
GameTooltip:AddLine(" ");
|
|
end
|
|
GameTooltip:AddLine(GAMETIME_TOOLTIP_TOGGLE_CALENDAR);
|
|
end
|
|
GameTooltip:Show();
|
|
end
|
|
-- Flashing stuff
|
|
if ( elapsed and GameTimeFrame.flashInvite ) then
|
|
local flashIndex = TWOPI * self.flashTimer * INVITE_PULSE_SEC;
|
|
local flashValue = max(0.0, 0.5 + 0.5*cos(flashIndex));
|
|
if ( flashIndex >= TWOPI ) then
|
|
self.flashTimer = 0.0;
|
|
else
|
|
self.flashTimer = self.flashTimer + elapsed;
|
|
end
|
|
|
|
GameTimeCalendarInvitesTexture:SetAlpha(flashValue);
|
|
GameTimeCalendarInvitesGlow:SetAlpha(flashValue);
|
|
end
|
|
end
|
|
|
|
function GameTimeFrame_OnClick(self)
|
|
if ( GameTimeCalendarInvitesTexture:IsShown() ) then
|
|
Calendar_LoadUI();
|
|
if ( Calendar_Show ) then
|
|
Calendar_Show();
|
|
end
|
|
GameTimeCalendarInvitesTexture:Hide();
|
|
GameTimeCalendarInvitesGlow:Hide();
|
|
self.pendingCalendarInvites = 0;
|
|
GameTimeFrame.flashInvite = false;
|
|
else
|
|
ToggleCalendar();
|
|
end
|
|
end
|
|
|
|
function GameTimeFrame_SetDate()
|
|
local _, _, day = CalendarGetDate();
|
|
GameTimeFrame:SetText(day);
|
|
end
|
|
|