Очень добротные неймплейты. Действительно неплохие. Симпатичные.
Вид для печати
система такая же?
PS текстурки таким образом сделаны ...
PSS если оставить только статусбар , имя , уровень, текст хп то 58-60 фпс.PHP код:
self.Shadow = {}
for i = 1, 8 do
self.Shadow[i] = self:CreateTexture(nil, 'BORDER')
self.Shadow[i]:SetParent(self)
self.Shadow[i]:SetTexture(textureShadow)
self.Shadow[i]:SetSize(borderSize, borderSize)
self.Shadow[i]:SetVertexColor(0, 0, 0, 1)
end
self.Border = {}
for i = 1, 8 do
self.Border[i] = self:CreateTexture(nil, 'OVERLAY')
self.Border[i]:SetParent(self)
self.Border[i]:SetTexture(textureNormal)
self.Border[i]:SetSize(borderSize, borderSize)
self.Border[i]:SetVertexColor(R or 1, G or 1, B or 1)
end
Та нет именно в текстурах... К примеру такой код (текстуры попросту выключены, даже близовские) не вызывает потерю фпс , но стоит налепить текстурки способм который описал выше как начинаются просадки когда плейтов много. Можно было бы грешить на слабый пк , но тот же ведьмак 3 или драгон эйдж инквизиция идет на высоки без лагов.
PS плейты елва и ... если банально через :SetBackdor() налепить то же начинают сажать фпс.PHP код:
local engine, modules, media = select(2, ...):unpack()
local select = select
local n = modules:LoadModule("NamePlates")
local nameplates, visible = {}, {}
local SetHealthBarText
do
local FormatValue = engine.FormatValue
SetHealthBarText = function(bar)
local cur, max, text = bar:GetValue(), select(2, bar:GetMinMaxValues()), bar.text
text:SetFormattedText("%s - %1.0f%s", FormatValue(cur), cur/max*100, "%")
end
end
local OnShow = function(self)
local healthBar = self.healthBar
healthBar:ClearAllPoints()
healthBar:SetPoint("CENTER")
SetHealthBarText(healthBar)
local highlight = self.highlight
highlight:ClearAllPoints()
highlight:SetPoint("TOPLEFT", healthBar, 1, -1)
highlight:SetPoint("BOTTOMRIGHT", healthBar, -1, 1)
highlight:Hide()
local nameText = self.nameText
nameText:ClearAllPoints()
nameText:SetPoint("BOTTOMLEFT", healthBar, "TOPLEFT", 15, 5)
local levelText = self.levelText
levelText:ClearAllPoints()
levelText:SetPoint("BOTTOMLEFT", healthBar, "TOPLEFT", 0, 3)
local bossIcon = self.bossIcon
bossIcon:ClearAllPoints()
bossIcon:SetPoint("BOTTOMLEFT", healthBar, "TOPLEFT", 0, 3)
visible[self] = true
end
local OnHide = function(self)
visible[self] = nil
end
local IsNamePlate
do
local overlayTexture = [=[Interface\Tooltips\Nameplate-Border]=]
IsNamePlate = function(frame)
if frame:GetName() then return end
local overlayRegion = select(2, frame:GetRegions())
return overlayRegion and overlayRegion:GetObjectType() == "Texture" and overlayRegion:GetTexture() == overlayTexture
end
end
local ScanWorldFrameChildren
do
function ScanWorldFrameChildren(frame, ...)
if not frame then return end
if not nameplates[frame] and IsNamePlate(frame) then
local healthBar = frame:GetChildren()
local glow, overlay, castRegion, shielded, spellIcon, highlight, nameText, levelText, bossIcon, raidIcon, stateIcon = frame:GetRegions()
healthBar:SetStatusBarTexture("Interface\\AddOns\\ReduxV4\\media\\statusBar")
healthBar:CreateBorder(6)
healthBar:SetBorderPadding(1)
healthBar.text = engine.CreateFontString(healthBar, 8, "CENTER")
healthBar.text:SetPoint("CENTER")
healthBar:SetScript("OnValueChanged", SetHealthBarText)
frame.healthBar = healthBar
highlight:SetTexture(0, .33, .11)
frame.highlight = highlight
nameText:SetFont("Fonts/FRIZQT__.ttf", 10)
nameText:SetShadowOffset(-1, 1)
nameText:SetJustifyH("LEFT")
nameText:SetSize(healthBar:GetWidth()*.85, 5)
frame.nameText = nameText
levelText:SetFont("Fonts/FRIZQT__.ttf", 10)
levelText:SetShadowOffset(-1, 1)
frame.levelText = levelText
bossIcon:SetSize(12, 12)
frame.bossIcon = bossIcon
glow:SetTexture(nil)
overlay:SetTexture(nil)
castRegion:SetTexture(nil)
shielded:SetTexture(nil)
spellIcon:SetTexture(nil)
stateIcon:SetTexture(nil)
OnShow(frame)
frame:SetScript("OnShow", OnShow)
frame:SetScript("OnHide", OnHide)
nameplates[frame] = true
end
return ScanWorldFrameChildren(...)
end
end
local HandlePlates
do
local WorldFrame = WorldFrame
local curChildren
local prevChildren = 0
function HandlePlates(this, elapsed)
local curChildren = WorldFrame:GetNumChildren()
if curChildren ~= prevChildren then
prevChildren = curChildren
ScanWorldFrameChildren( WorldFrame:GetChildren() )
end
end
end
function n:Init()
CreateFrame("frame"):SetScript("OnUpdate", HandlePlates)
SetCVar("ShowVKeyCastbar", 0)
end
PSS алгоритмы поиска еще даже не делал , но поиск будет только плейтов которые на экране.
С близовскими в том же месте выдает стабильные 60 фпс с редкими просадками на 1-2 фпс.
PS если пошла мысля , что лагает иза этого
Так этот обработчик "пашет в холостую", запускается рекурсивный перебор только в случае появления новой плейты в кадре, обрабатывает ее и снова в холостую. Шрифты близовские , просто с заданным размером, что бы не гсабать слишком длинные имена. Текст хп обновляется только с случае изменения значения на статус баре (OnValueChanged) и OnShow самой плейты, OnUpdate опять таки негде нет. Если спрятать плейты фпс мигом на 60 поднимается.PHP код:
CreateFrame("frame"):SetScript("OnUpdate", HandlePlates)
Если так мыслить, то проще помочиться компании близзард в лицо т.к все их функции хранятся в глобальном нейм спейсе. Забиваешь голову ненужным мусором не понимая что такое указатели... весело наверное =)
ЗЫ если хочешь что бы поболела голова , лучше подумай сколько у тебя лишних вызовов UnitAura() (не важно на какой сборке) для одного и того же юнита. Да это не правильно , но это факт.
Лагает именно иза текстур и не знаю почему , а этот маленький кусочек кода с текстом на столько не значителен ... на него забить можно, он практически не потребляет ресурсыдаже на бг где хп прыгает.
- - - Updated - - -
Крольчонок, если не секрет , то можно характеристики пк в студию? =)
Вообщем поставил на минимум настройки , убрал сглаживание и тд , просадка на 2-8 фпс :D
Ааааа я думал у тебя просадка в пару фпс типа 60 без и 55-60 с плейтами от елва ...
На близовских у меня такая картина (сейчас с ультра ущел) , хотя без плейтов и на ультра 60 было:
16 текстур (8 бортики и 8 тени) в районе 30 фпс, на ультра просадка до 20 фпс:
http://i12.pixs.ru/storage/5/4/4/WoW...4_23709544.jpg
Без редактирования плейтов 55+:
http://i12.pixs.ru/storage/5/5/9/WoW...9_23709559.jpg
PS я уж было подумал , что камень "перегнал" ...