-- player.lua local _, addon = ...; local unpack = unpack; local format = string.format; local CFrame = CreateFrame("Frame", "kehysPlayerInit", UIParent); local barTexture = "Interface\\AddOns\\OmaRF\\images\\minimalist"; local vehicletoggle = [=[ if newstate == "vehicle" then self:SetAttribute("displayed", self:GetAttribute("vehicle")); else self:SetAttribute("displayed", self:GetAttribute("unit")); end ]=] local updater = nil; function addon.PlayerFrame(parent, width, height, update, event) assert(type(parent) == "table", "Player frame creation missing parent!"); assert(type(width) == "number", "Player frame creation missing width!"); assert(type(height) == "number", "Player frame creation missing height!"); assert(type(update) == "function", "Player frame creation missing update function!"); assert(type(event) == "function", "Player frame creation missing event function!"); local f = CreateFrame("Button", "kehysPlayer", parent, "SecureUnitButtonTemplate,SecureHandlerStateTemplate"); f:Hide(); f:SetPoint("CENTER", parent, "CENTER", 10, 10); f:SetWidth(width); f:SetHeight(height); f.barwidth = width - 2; -- 1px padding f:SetAttribute("unit", "player"); f:SetAttribute("displayed", "player"); f:SetAttribute("vehicle", "vehicle"); f.nonraid = true; f.prev = {}; -- empty, just to be able to use general updater f.alert = {}; f.heal = {}; f.tankcd = {}; f.stacks = {}; f.buff1 = {}; f.incoming = {}; updater = function() CTimerAfter(0.1, updater); update(f); end f:SetScript("OnEvent", event); f:SetAttribute("*type1", "target"); f:SetAttribute("*type2", "togglemenu"); f:SetAttribute("toggleForVehicle", true); RegisterStateDriver(f, "vehicleui", "[vehicleui] vehicle; no"); f:SetAttribute("_onstate-vehicleui", vehicletoggle); -- create visuals f.base = f:CreateTexture(nil, "BACKGROUND"); f.base:SetAllPoints(); f.base:SetColorTexture(1, 1, 1); f.base:SetVertexColor(unpack(addon.Colors.Base)); f.background = f:CreateTexture(nil, "BACKGROUND", nil, 2); f.background:SetPoint("TOPLEFT", f, "TOPLEFT", 1, -1); f.background:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 1); f.background:SetColorTexture(0.7, 0.7, 0.7); f.health = f:CreateTexture(nil, "BORDER"); f.health:SetPoint("TOPLEFT", f.background, "TOPLEFT"); f.health:SetPoint("BOTTOMLEFT", f.background, "LEFT", 0, 1); f.health:SetTexture(barTexture); f.health:SetVertexColor(0.3, 0.3, 0.3); f.health:Hide(); f.mana = f:CreateTexture(nil, "BORDER"); f.mana:SetPoint("TOPLEFT", f.background, "LEFT", 0, -1); f.mana:SetPoint("BOTTOMLEFT", f.background, "BOTTOMLEFT"); f.mana:SetTexture(barTexture); f.mana:SetVertexColor(0.3, 0.4, 0.7); f.mana:Hide(); f.manatext = f:CreateFontString(nil, "ARTWORK", "GameFontHighlight"); f.manatext:SetPoint("RIGHT", frame.background, "RIGHT", -2, -height/4); f.manatext:Hide(); f.shield = f:CreateTexture(nil, "BORDER"); f.shield:SetPoint("TOPLEFT", f.health, "TOPRIGHT"); f.shield:SetPoint("BOTTOMLEFT", f.health, "BOTTOMRIGHT"); f.shield:SetTexture(barTexture); f.shield:SetVertexColor(0, 0.7, 1); f.shield:Hide(); f.shieldhl = f:CreateTexture(nil, "ARTWORK"); f.shieldhl:SetPoint("TOPLEFT", f, "TOPRIGHT", -2, 0); f.shieldhl:SetPoint("BOTTOMRIGHT", f, "RIGHT"); f.shieldhl:SetColorTexture(0.5, 0.8, 1); f.shieldhl:Hide(); f.healpred = f:CreateTexture(nil, "ARTWORK"); f.healpred:SetPoint("TOPLEFT", f.health, "TOPRIGHT"); f.healpred:SetPoint("BOTTOMLEFT", f.health, "BOTTOMRIGHT"); f.healpred:SetColorTexture(0.5, 0.6, 0.5); f.healpred:Hide(); f.healabsorb = f:CreateTexture(nil, "ARTWORK"); f.healabsorb:SetPoint("TOPRIGHT", f.health, "TOPRIGHT"); f.healabsorb:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT"); f.healabsorb:SetColorTexture(0.1, 0.1, 0.1); f.healabsorb:Hide(); f.text = f:CreateFontString(nil, "OVERLAY", "GameFontHighlight"); f.text:SetPoint("LEFT", f.health, "LEFT", 10, 0); f.text:SetFont(STANDARD_TEXT_FONT, 13); f.text:Hide(); f.targeticon = f:CreateTexture(nil, "OVERLAY"); f.targeticon:SetPoint("CENTER", f, "TOP", 0, -1); f.targeticon:SetWidth(12); f.targeticon:SetHeight(12); f.targeticon:SetTexture("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcons"); f.targeticon:Hide(); registerEvents(f); registerUnitEvents(f); event(f, "UPDATE_ALL_BARS"); updater(); f.Show(); end CFrame:SetScript("OnEvent", function(self) self:UnregisterAllEvents(); CFrame:SetFrameStrata("LOW"); CFrame:SetPoint("CENTER", nil, "CENTER"); CFrame:SetWidth(2); CFrame:SetHeight(2); initPlayer(self, 180, 100, addon.FrameUpdate, addon.UnitEvent); end); CFrame:RegisterEvent("PLAYER_LOGIN");