diff --git a/ElvUI_SLE/modules/load_modules.xml b/ElvUI_SLE/modules/load_modules.xml index 29b4551..2fcebfc 100644 --- a/ElvUI_SLE/modules/load_modules.xml +++ b/ElvUI_SLE/modules/load_modules.xml @@ -17,6 +17,7 @@ <Script file='nameplates.lua'/> <Script file='raidutility.lua'/> <Script file='pvpmover.lua'/> + <Script file='screensaver.lua'/> <Script file='threat.lua'/> <Script file='tooltip.lua'/> <Script file='uibuttons.lua'/> diff --git a/ElvUI_SLE/modules/screensaver.lua b/ElvUI_SLE/modules/screensaver.lua new file mode 100644 index 0000000..bc077da --- /dev/null +++ b/ElvUI_SLE/modules/screensaver.lua @@ -0,0 +1,246 @@ +local E, L, V, P, G = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB +local SLE = E:GetModule('SLE'); +local S = E:GetModule("SLE_ScreenSaver") +local LSM = LibStub("LibSharedMedia-3.0") +local SS +local ru = false +local Months = {} +local Week = {} + +if GetLocale() == "ruRU" then + ru = true + Months = { + "Января", + "Февраля", + "Марта", + "Апреля", + "Мая", + "Июня", + "Июля", + "Августа", + "Сентября", + "Октября", + "Ноября", + "Декабря", + } + + Week = { + "Воскресенье", + "Понедельник", + "Вторник", + "Среда", + "Четверг", + "Пятница", + "Суббота", + } +end + +-- Blizzard Unit Functions - OnShow / OnEvent +local UnitLevel, IsInGuild, GetGuildInfo, UnitPVPName, UnitIsAFK = UnitLevel, IsInGuild, GetGuildInfo, UnitPVPName, UnitIsAFK +local GetScreenWidth, GetScreenHeight = GetScreenWidth, GetScreenHeight +local FlipCameraYaw = FlipCameraYaw + +-- Blizzard Lua Helpers - OnUpdate +local format, random, date = format, random, date + +local Name, Level, GuildName, GuildRank +local Class, ClassToken = UnitClass("player") +local Race, RaceToken = UnitRace("player") +local FactionToken, Faction = UnitFactionGroup("player") +local Color = RAID_CLASS_COLORS[ClassToken] +local CrestPath = [[Interface\AddOns\ElvUI_SLE\media\textures\crests\]] +local crestSize, month, week +local UpdateElapsed, TipsElapsed, TipNum, TipThrottle, OldTip = 0, 0, 1, 10, 0 +local degree = 0 +local fading = false + +local Tips = { + "Не стой в огне!", + "Спать вредно! Пока ты спишь, враг качается!", + "|cffFF4040Алгалон кричит: Я покараю вас анально, бичи со Свежевателя!|r", + "Сделал дейлик - спас китайца!", + "Lord Wert: Воронка, как ультимативное оружие, крайне сомнительна!", + "Иди паси ёжиков! (С) Горыныч", + "‹Elv›: I just utilized my degree in afro engineering and fixed it", + "Ragenvald: да вы ****ец че за сильные духом и закаленные травой", + "Варлоки пришли к нам из сказочного мира, где их любят и уважают. Поэтому они ненавидят наш мир лютой ненавистью.", +} + +function S:Media() + local db = E.db.sle.media.screensaver + SS.Top.Title:SetFont(LSM:Fetch('font', db.title.font), db.title.size, db.title.outline) + SS.Top.Quote:SetFont(LSM:Fetch('font', db.subtitle.font), db.subtitle.size, db.subtitle.outline) + SS.Top.Date:SetFont(LSM:Fetch('font', db.date.font), db.date.size, db.date.outline) + SS.Top.Time:SetFont(LSM:Fetch('font', db.date.font), db.date.size, db.date.outline) + SS.Top.PlayerName:SetFont(LSM:Fetch('font', db.player.font), db.player.size, db.player.outline) + SS.Top.PlayerInfo:SetFont(LSM:Fetch('font', db.player.font), db.player.size, db.player.outline) + SS.Top.GuildR:SetFont(LSM:Fetch('font', db.player.font), db.player.size, db.player.outline) + SS.Top.Guild:SetFont(LSM:Fetch('font', db.player.font), db.player.size, db.player.outline) + SS.ScrollFrame:SetFont(LSM:Fetch('font', db.tips.font), db.tips.size, db.tips.outline) + + SS.FactCrest:SetSize(db.crest, db.crest) + SS.RaceCrest:SetSize(db.crest, db.crest) + +end + +function S:Setup() + --Creating stuff + SS.Top = CreateFrame("Frame", nil, SS) + SS.Top:SetTemplate("Transparent") + SS.Bottom = CreateFrame("Frame", nil, SS) + SS.Bottom:SetTemplate("Transparent") + SS.FactCrest = SS.Top:CreateTexture(nil, 'OVERLAY') + SS.FactCrest:SetTexture(CrestPath..FactionToken) + SS.RaceCrest = SS.Top:CreateTexture(nil, 'ARTWORK') + SS.RaceCrest:SetTexture(CrestPath..RaceToken) + SS.ExPack = SS.Top:CreateTexture(nil, 'OVERLAY') + SS.ExPack:SetTexture([[Interface\Glues\Common\Glues-WoW-MPLogo.blp]]) + SS.ExPack:SetSize(150, 75) + SS.model = CreateFrame("PlayerModel", "ScreenModel", SS) + SS.Top.Title = SS.Top:CreateFontString(nil, "OVERLAY") + SS.Top.Quote = SS.Top:CreateFontString(nil, "OVERLAY") + SS.Top.Quote:SetJustifyH("LEFT") + SS.Top.Date = SS.Top:CreateFontString(nil, "OVERAY") + SS.Top.Time = SS.Top:CreateFontString(nil, "OVERLAY") + SS.Top.PlayerName = SS.Top:CreateFontString(nil, "OVERLAY") + SS.Top.PlayerInfo = SS.Top:CreateFontString(nil, "OVERLAY") + SS.Top.Guild = SS.Top:CreateFontString(nil, "OVERLAY") + SS.Top.GuildR = SS.Top:CreateFontString(nil, "OVERLAY") + SS.ScrollFrame = CreateFrame("ScrollingMessageFrame", nil, SS) + + -- SS.ScrollFrame:SetShadowColor(0, 0, 0, 0) + SS.ScrollFrame:SetFading(false) + SS.ScrollFrame:SetFadeDuration(0) + SS.ScrollFrame:SetTimeVisible(1) + SS.ScrollFrame:SetMaxLines(1) + SS.ScrollFrame:SetSpacing(2) + + --Calling for fonts and shit updating + self:Media() + + --Positioning stuff + SS.Top:SetPoint("TOP", UIParent, "TOP", 0, 0) + SS.Bottom:SetPoint("BOTTOM", UIParent, "BOTTOM", 0, 0) + SS.Top.Date:SetPoint("RIGHT", SS.Top, "RIGHT", -40, 10) + SS.Top.Time:SetPoint("TOP", SS.Top.Date, "BOTTOM", 0, -2) + SS.Top.PlayerName:SetPoint("BOTTOM", SS.Top.PlayerInfo, "TOP", 0, 2) + SS.Top.PlayerInfo:SetPoint("LEFT", SS.Top, "LEFT", 5, 10) + SS.Top.Guild:SetPoint("TOP", SS.Top.PlayerInfo, "BOTTOM", 0, -2) + SS.Top.GuildR:SetPoint("TOP", SS.Top.Guild, "BOTTOM", 0, -2) + SS.FactCrest:SetPoint("CENTER", SS.Top, "BOTTOM", -(GetScreenWidth()/6), 0) + SS.RaceCrest:SetPoint("CENTER", SS.Top, "BOTTOM", (GetScreenWidth()/6), 0) + SS.ExPack:SetPoint("CENTER", SS.Top, "BOTTOM", 0, 0) + SS.Top.Title:SetPoint("TOP", SS.Top, "TOP", 0, -10) + SS.Top.Quote:SetPoint("TOP", SS.Top.Title, "BOTTOM", 0, -2) + SS.model:SetPoint("TOPLEFT", SS.Top,"BOTTOMRIGHT", -(GetScreenWidth()/4),0) + SS.model:SetPoint("BOTTOMRIGHT", SS.Bottom, "TOPRIGHT", 0, 0) + SS.ScrollFrame:SetPoint("CENTER", SS.Bottom, "CENTER", 0, 0) + + SS.Top.Title:SetText("|cff00AAFF"..L['You Are Away From Keyboard'].."|r") +end + +function S:AnimFinished() + SS.model:SetAnimation(E.db.sle.media.screensaver.model) +end + +function S:Shown() + Level, Name, TipNum = UnitLevel("player"), UnitPVPName("player"), random(1, #Tips) + if IsInGuild() then + GuildName, GuildRank = GetGuildInfo("player") + end + local Width, Height = SLE:Scale(GetScreenWidth()), SLE:Scale(E.db.sle.media.screensaver.height) + self.model:SetUnit("player") + self.model:SetPosition(0.3,0,-0.1) + self.model:SetFacing(-0.5) + self.model:SetAnimation(E.db.sle.media.screensaver.model) + self.model:SetScript("OnAnimFinished", S.AnimFinished) + + self.Top.Quote:SetText(L["Take care of yourself, Master!"]) + + self.Top.PlayerName:SetText(format("|c%s%s|r", Color.colorStr, Name)) + self.Top.Guild:SetText(format(GuildName and "|cff00AAFF<%s>|r" or "", GuildName)) + self.Top.GuildR:SetText(format(GuildRank and "|cff00AAFF"..RANK..": %s|r" or "", GuildRank)) + self.Top.PlayerInfo:SetText(format("|c%s%s|r, %s %s", Color.colorStr, Class, LEVEL, Level)) + + self.Top:SetSize(Width, Height) + self.Bottom:SetSize(Width, Height) + self.ScrollFrame:SetSize(Width, 24) + + self.ScrollFrame:AddMessage(Tips[TipNum], 1, 1, 1) +end + +function S:Update(elapsed) + UpdateElapsed = UpdateElapsed + elapsed + TipsElapsed = TipsElapsed + elapsed + if ru then + month = Months[tonumber(date("%m"))] + week = Week[tonumber(date("%w"))+1] + else + month = date("%B") + week = date("%A") + end + FlipCameraYaw(elapsed*10) + degree = degree + elapsed*10 + if UpdateElapsed > 0.5 then + self.Top.Time:SetText(format("%s", date("%H|cff00AAFF:|r%M|cff00AAFF:|r%S"))) + self.Top.Date:SetText(date("%d").." "..month.." |cff00AAFF"..week.."|r") + UpdateElapsed = 0 + end + if TipsElapsed > TipThrottle then + TipNum = random(1, #Tips) + if TipNum == OldTip then TipNum = random(1, #Tips) end + self.ScrollFrame:AddMessage(Tips[TipNum], 1, 1, 1) + OldTip = TipNum + TipsElapsed = 0 + end +end + +function S:Event(event, unit) + if event == "PLAYER_FLAGS_CHANGED" and unit ~= "player" then return end + if UnitIsAFK("player") then + SS:Show() + Minimap:Hide() + if not fading then + fading = true + UIFrameFadeIn(UIParent, 0.5, 1, 0) + end + else + FlipCameraYaw(-degree) + degree = 0 + SS:Hide() + if InCombatLockdown() then + self:RegisterEvent("PLAYER_REGEN_ENABLED", "Event") + else + Minimap:Show() + end + if fading then + fading = false + UIFrameFadeIn(UIParent, 0.5, 0, 1) + end + end + if event == "PLAYER_REGEN_ENABLED" then self:UnregisterEvent(event) end + if event == "PLAYER_ENTERING_WORLD" then self:UnregisterEvent(event) end +end + +function S:Reg(opt) + if E.db.sle.media.screensaver.enable then + self:RegisterEvent("PLAYER_ENTERING_WORLD", "Event") + self:RegisterEvent("PLAYER_FLAGS_CHANGED", "Event") + self:RegisterEvent("PLAYER_LOGIN", "Event") + else + self:UnregisterEvent("PLAYER_ENTERING_WORLD") + self:UnregisterEvent("PLAYER_FLAGS_CHANGED") + self:UnregisterEvent("PLAYER_LOGIN") + end + if opt then self:Media() end +end + +function S:Initialize() + SS = CreateFrame("Frame", "SLE_SS", WorldFrame) + SS:Hide() + SS:SetFrameStrata("FULLSCREEN") + self:Setup() + SS:SetScript("OnShow", self.Shown) + SS:SetScript("OnUpdate", self.Update) + self:Reg() +end \ No newline at end of file