Добавлен MpW,
опубликован
Основы Интерфейса
Содержание:
Как смешивать два цвета.
Средне-арифметическое сложение
Это когда 1 цвет накладывается на другой. Помню, в одной игре "князь : лесной страны" был навык алхимии. и там можно было в сосуд с водой выдавливать красные целебные травы. И чем темнее и насыщеннее оттенки цвета, тем больше лучше зелье
lua код
do
local InitGlobalsOrigin = InitGlobals -- хукаем функцию InitGlobals
function InitGlobals()
InitGlobalsOrigin()
BlzLoadTOCFile("templates.toc")
local gameUI = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
--подсветка текстуры
--в качестве основы взял ScoreScreenTabButtonTemplate
--без родителя нельзя создать типы фреймов String или Texture.
local TextureHighLightParentFrame1 = BlzCreateSimpleFrame("ParentTexture", gameUI, 0)
local TextureHighLight1 = BlzGetFrameByName("TestTexture", 0)
BlzFrameSetTexture(TextureHighLight1, "white.blp", 0, true)
BlzFrameSetAllPoints(TextureHighLight1, TextureHighLightParentFrame1)
BlzFrameSetAbsPoint(TextureHighLightParentFrame1, FRAMEPOINT_CENTER, 0.2, 0.525)
BlzFrameSetSize(TextureHighLightParentFrame1, 0.04, 0.04)
--можно менять цвет подсветке ARGB. Каждый параметр задается 1-255
BlzFrameSetVertexColor(TextureHighLight1, BlzConvertColor(255, 255, 255, 255))
local TextureHighLightParentFrame2 = BlzCreateSimpleFrame("ParentTexture", gameUI, 0)
local TextureHighLight2 = BlzGetFrameByName("TestTexture", 0)
BlzFrameSetTexture(TextureHighLight2, "white.blp", 0, true)
BlzFrameSetAllPoints(TextureHighLight2, TextureHighLightParentFrame2)
BlzFrameSetAbsPoint(TextureHighLightParentFrame2, FRAMEPOINT_CENTER, 0.6, 0.525)
BlzFrameSetSize(TextureHighLightParentFrame2, 0.04, 0.04)
--можно менять цвет подсветке ARGB. Каждый параметр задается 1-255
BlzFrameSetVertexColor(TextureHighLight2, BlzConvertColor(255, 255, 255, 255))
--слайдер
local slider0 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 0)
--строка
local label0 = BlzCreateFrame("EscMenuLabelTextTemplate", slider0, 0, 0)
BlzFrameSetPoint(label0, FRAMEPOINT_LEFT, slider0, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider0, FRAMEPOINT_TOP, 0.2,0.46)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider0, 1, 255)
--изначальное положение
BlzFrameSetValue(slider0, 255)
--минимальный шаг
BlzFrameSetStepSize(slider0, 1)
--слайдер
local slider1 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 1)
--строка
local label1 = BlzCreateFrame("EscMenuLabelTextTemplate", slider1, 0, 1)
BlzFrameSetPoint(label1, FRAMEPOINT_LEFT, slider1, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider1, FRAMEPOINT_TOP, 0.2,0.435)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider1, 1, 255)
--изначальное положение
BlzFrameSetValue(slider1, 255)
--минимальный шаг
BlzFrameSetStepSize(slider1, 1)
--слайдер
local slider2 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 2)
--строка
local label2 = BlzCreateFrame("EscMenuLabelTextTemplate", slider2, 0, 2)
BlzFrameSetPoint(label2, FRAMEPOINT_LEFT, slider2, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider2, FRAMEPOINT_TOP, 0.2,0.410)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider2, 1, 255)
--изначальное положение
BlzFrameSetValue(slider2, 255)
--минимальный шаг
BlzFrameSetStepSize(slider2, 1)
--слайдер
local slider3 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 3)
--строка
local label3 = BlzCreateFrame("EscMenuLabelTextTemplate", slider3, 0, 3)
BlzFrameSetPoint(label3, FRAMEPOINT_LEFT, slider3, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider3, FRAMEPOINT_TOP, 0.2,0.385)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider3, 1, 255)
--изначальное положение
BlzFrameSetValue(slider3, 255)
--минимальный шаг
BlzFrameSetStepSize(slider3, 1)
--слайдер
local slider4 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 4)
--строка
local label4 = BlzCreateFrame("EscMenuLabelTextTemplate", slider4, 0, 4)
local procent = 0.5
BlzFrameSetPoint(label4, FRAMEPOINT_LEFT, slider4, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider4, FRAMEPOINT_TOP, 0.4,0.25)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider4, 0.00, 1.00)
--изначальное положение
BlzFrameSetValue(slider4, procent)
--минимальный шаг
BlzFrameSetStepSize(slider4, 0.01)
--текст
BlzFrameSetText(label4, "процент смешивания: "..R2SW(procent*100, 1, 1))
local value2_A = 255
local value2_R = 255
local value2_G = 255
local value2_B = 255
local color2_value = BlzConvertColor(value2_A, value2_R, value2_G, value2_B)
local text4 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 5)
BlzFrameSetAbsPoint(text4, FRAMEPOINT_TOP, 0.6,0.46)
local text5 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 6)
BlzFrameSetAbsPoint(text5, FRAMEPOINT_TOP, 0.6,0.435)
local text6 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 7)
BlzFrameSetAbsPoint(text6, FRAMEPOINT_TOP, 0.6,0.410)
local text7 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 8)
BlzFrameSetAbsPoint(text7, FRAMEPOINT_TOP, 0.6,0.385)
local text_value1 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 7)
BlzFrameSetAbsPoint(text_value1, FRAMEPOINT_TOP, 0.2,0.485)
BlzFrameSetText(text_value1, "# "..decimalToHex(255)..decimalToHex(255)..decimalToHex(255)..decimalToHex(255).." argb-color")
local text_value2 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 7)
BlzFrameSetAbsPoint(text_value2, FRAMEPOINT_TOP, 0.6,0.485)
BlzFrameSetText(text4, "A-Color: "..R2SW(value2_A, 1, 1))
BlzFrameSetText(text5, "R-Color: "..R2SW(value2_R, 1, 1))
BlzFrameSetText(text6, "G-Color: "..R2SW(value2_G, 1, 1))
BlzFrameSetText(text7, "B-Color: "..R2SW(value2_B, 1, 1))
BlzFrameSetText(text_value2, "# "..decimalToHex(255)..decimalToHex(255)..decimalToHex(255)..decimalToHex(255).." argb-color")
TimerStart(CreateTimer(), 0.4, true, function ()
--фреймы
local fa = BlzGetFrameByName("EscMenuSliderTemplate", 0)
local fr = BlzGetFrameByName("EscMenuSliderTemplate", 1)
local fg = BlzGetFrameByName("EscMenuSliderTemplate", 2)
local fb = BlzGetFrameByName("EscMenuSliderTemplate", 3)
local fp = BlzGetFrameByName("EscMenuSliderTemplate", 4)
--значения
local a = BlzFrameGetValue(fa)
local r = BlzFrameGetValue(fr)
local g = BlzFrameGetValue(fg)
local b = BlzFrameGetValue(fb)
local p = BlzFrameGetValue(fp)
--устанавливаем цвет
BlzFrameSetVertexColor(TextureHighLight1, BlzConvertColor(R2I(a), R2I(r), R2I(g), R2I(b)))
BlzFrameSetText(text_value1, "# "..decimalToHex(a)..decimalToHex(r)..decimalToHex(g)..decimalToHex(b).." argb-color")
--выводим в строки фреймлв
BlzFrameSetText(BlzGetFrameByName("EscMenuLabelTextTemplate", 0), "A-Color: "..R2SW(a, 1, 1))
BlzFrameSetText(BlzGetFrameByName("EscMenuLabelTextTemplate", 1), "R-Color: "..R2SW(r, 1, 1))
BlzFrameSetText(BlzGetFrameByName("EscMenuLabelTextTemplate", 2), "G-Color: "..R2SW(g, 1, 1))
BlzFrameSetText(BlzGetFrameByName("EscMenuLabelTextTemplate", 3), "B-Color: "..R2SW(b, 1, 1))
BlzFrameSetText(label4, "процент смешивания: "..R2SW(p*100, 1, 1))
end)
local button = BlzCreateSimpleFrame("DynamicSimpleButton", gameUI, 0)
BlzFrameSetAbsPoint(button, FRAMEPOINT_CENTER, 0.4, 0.3)
BlzFrameSetTexture(BlzGetFrameByName("MySimpleButtonTexture", 0), "plus 64x64.blp", 0, true)
local trigger_click_button = CreateTrigger()
BlzTriggerRegisterFrameEvent(trigger_click_button, button, FRAMEEVENT_CONTROL_CLICK )
TriggerAddAction(trigger_click_button, function()
print(GetPlayerName(GetTriggerPlayer()).." нажал на кнопку [смешивание двух цветов] с "..I2S(procent*100).."%")
--фреймы slider
local fa = BlzGetFrameByName("EscMenuSliderTemplate", 0)
local fr = BlzGetFrameByName("EscMenuSliderTemplate", 1)
local fg = BlzGetFrameByName("EscMenuSliderTemplate", 2)
local fb = BlzGetFrameByName("EscMenuSliderTemplate", 3)
local fp = BlzGetFrameByName("EscMenuSliderTemplate", 4)
--значения color1 RGBA. достаем real-значения из slider
local a1 = (BlzFrameGetValue(fa))
local r1 = (BlzFrameGetValue(fr))
local g1 = (BlzFrameGetValue(fg))
local b1 = (BlzFrameGetValue(fb))
--значения procent смешивания
local p = (BlzFrameGetValue(fp))
--значения color2 RGBA.
--цвета color2 хранятся в переменных
local r2 = (value2_R)
local g2 = (value2_G)
local b2 = (value2_B)
local a2 = (value2_A)
--
--print( "argb-color 1: ",a1,r1,g1,b1)
--print( "argb-color 2: ",a2,r2,g2,b2)
--среднее-арифметическое
local r3 = (r1+r2)/2
local g3 = (g1+g2)/2
local b3 = (b1+b2)/2
value2_R = r3
value2_G = g3
value2_B = b3
--по каким-то причинам невозможно получить альфу, всегда возвращает nil
value2_A = a1 --заимвствуем
--local color3 = "0x|C"..decimalToHex(a1)..decimalToHex(r3)..decimalToHex(g3)..decimalToHex(b1).."|r"
--print("итог смешивания: ",a1,r3,g3,b3)
BlzFrameSetVertexColor(TextureHighLight2, BlzConvertColor(R2I(a1), R2I(r3), R2I(g3), R2I(b3)))
BlzFrameSetText(text4, "A-Color: "..R2SW(value2_A, 1, 1))
BlzFrameSetText(text5, "R-Color: "..R2SW(r3, 1, 1))
BlzFrameSetText(text6, "G-Color: "..R2SW(g3, 1, 1))
BlzFrameSetText(text7, "B-Color: "..R2SW(b3, 1, 1))
--BlzFrameSetText(text_value2, "# "..decimalToHex(a1)..decimalToHex(r3)..decimalToHex(g3)..decimalToHex(b3).." argb-color")
end)
--создаем подсказки для каждкой button
--общую подсказку не получается сделать, нужно отслеживать, что мышь внутри кнопки
--общий родитель SimpleFrame
local button_tooltip = BlzCreateSimpleFrame("Tooltip", gameUI, 0)
--создаем рамку
local button_tooltip_box = BlzGetFrameByName("TooltipBox", 0)
BlzFrameSetLevel(button_tooltip_box, 1)
BlzFrameSetVisible(button_tooltip_box, false)
--создаем текст
local button_tooltip_text = BlzGetFrameByName("TooltipTextValue", 0)
--текст шириной 0.29, высота специально обнулена.
--Игра сама корректирует высоту вверх в зависимости от объема текста
BlzFrameSetSize(button_tooltip_text, 0.29, 0)
--поднимаем текст выше рамки подсказки
BlzFrameSetLevel(button_tooltip_text, 2)
--выключаем TEXT, тк в этой области не дает кликать
BlzFrameSetEnable(button_tooltip_text, false)
--изначально текст невидим
BlzFrameSetVisible(button_tooltip_text, false)
--создаем горизонтальную разделительную линию
local button_tooltip_HorizontalSeparator = BlzCreateFrameByType("BACKDROP", "", button_tooltip_box, "", 0)
BlzFrameSetSize(button_tooltip_HorizontalSeparator, 0.04, 0.002)
BlzFrameSetPoint(button_tooltip_HorizontalSeparator, FRAMEPOINT_BOTTOMLEFT, button_tooltip_text, FRAMEPOINT_TOPLEFT, 0.005, 0.005)
BlzFrameSetPoint(button_tooltip_HorizontalSeparator, FRAMEPOINT_BOTTOMRIGHT, button_tooltip_text, FRAMEPOINT_TOPRIGHT, -0.005, 0.005)
BlzFrameSetTexture(button_tooltip_HorizontalSeparator, "UI\\Widgets\\ToolTips\\Human\\HorizontalSeparator",0, true)
--создаем заглавие текста
local button_tooltip_text_title=BlzCreateFrameByType("TEXT", "MyTextValue", button_tooltip_box, "BoxedTextValue", 0)
--текст шириной 0.29, высота специально обнулена.
--Игра сама корректирует высоту вверх в зависимости от объема текста
BlzFrameSetSize(button_tooltip_text_title, 0.29, 0)
BlzFrameSetPoint(button_tooltip_text_title, FRAMEPOINT_BOTTOMLEFT, button_tooltip_HorizontalSeparator, FRAMEPOINT_TOPLEFT, -0.005, 0.005)
BlzFrameSetPoint(button_tooltip_text_title, FRAMEPOINT_BOTTOMRIGHT, button_tooltip_HorizontalSeparator, FRAMEPOINT_TOPRIGHT, 0.005, 0.005)
BlzFrameSetText(button_tooltip_text_title,"смешивание 2-х цветов")
-- рамка копирует размеры с оффсетами
BlzFrameSetPoint(button_tooltip_box, FRAMEPOINT_BOTTOMLEFT, button_tooltip_text, FRAMEPOINT_BOTTOMLEFT, -0.005, -0.005)
BlzFrameSetPoint(button_tooltip_box, FRAMEPOINT_TOPRIGHT, button_tooltip_text_title, FRAMEPOINT_TOPRIGHT, 0.005, 0.005)
-- Задаем положение Tooltip
BlzFrameSetAbsPoint(button_tooltip_text, FRAMEPOINT_BOTTOM, 0.5+0.3/2, 0.176)
BlzFrameSetText(button_tooltip_text,"Нажмите на кнопку, чтобы смешать два цвета")
--привязываем к кнопкам подсказку
BlzFrameSetTooltip(button, button_tooltip)
--http://gospitaliers.narod.ru/knyaz/knyaz_znaharstvo.htm
end
end
Линейная интерполяция
мне не понравился, не так как мне нужно работает. предложил господин offerist
lua код
do
local InitGlobalsOrigin = InitGlobals -- хукаем функцию InitGlobals
function InitGlobals()
InitGlobalsOrigin()
function hex2rgb(hex)
hex = hex:gsub("0x","")
return { tonumber("0x"..hex:sub(1,2)), tonumber("0x"..hex:sub(3,4)), tonumber("0x"..hex:sub(5,6)), tonumber("0x"..hex:sub(7,8)) }
end
function linear(a, b, t)
return a * (1 - t) + b * t
end
function hslToRgb(h, s, l)
if s == 0 then return {l, l, l} end
local function to(p, q, t)
if t < 0 then t = t + 1 end
if t > 1 then t = t - 1 end
if t < .16667 then return p + (q - p) * 6 * t end
if t < .5 then return q end
if t < .66667 then return p + (q - p) * (.66667 - t) * 6 end
return p
end
local q = l < .5 and l * (1 + s) or l + s - l * s
local p = 2 * l - q
return {to(p, q, h + .33334), to(p, q, h), to(p, q, h - .33334)}
end
function rgbToHsl(r, g, b)
local max, min = math.max(r, g, b), math.min(r, g, b)
local b = max + min
local h = b / 2
if max == min then return {0, 0, h} end
local s, l = h, h
local d = max - min
s = l > .5 and d / (2 - b) or d / b
if max == r then h = (g - b) / d + (g < b and 6 or 0)
elseif max == g then h = (b - r) / d + 2
elseif max == b then h = (r - g) / d + 4
end
return {h * .16667, s, l}
end
function colorMixer(color1, color2, t)
local a = {color1[4], color2[4]}
color1 = rgbToHsl(color1[1] / 255, color1[2] / 255, color1[3] / 255)
color2 = rgbToHsl(color2[1] / 255, color2[2] / 255, color2[3] / 255)
local color3 = {0, 0, 0, 0}
color3[1] = linear(color1[1], color2[1], t)
color3[2] = linear(color1[2], color2[2], t)
color3[3] = linear(color1[3], color2[3], t)
color3[4] = linear(a[1], a[2], t)
color3 = hslToRgb(color3[1], color3[2], color3[3])
return {color3[1] * 255, color3[2] * 255, color3[3] * 255, color3[4]}
end
--Конверт hex-числа в hex-строку
--пример: 255 => FF
function decimalToHex(num)
local num = R2I(num)
if num == 0 then
return '0'
end
local neg = false
if num < 0 then
neg = true
num = num * -1
end
local hexstr = "0123456789ABCDEF"
local result = ""
while num > 0 do
local n = math.fmod(num, 16)
result = string.sub(hexstr, n + 1, n + 1) .. result
num = math.floor(num / 16)
end
if #result < 2 then
result = "0" .. result
end
if neg then
result = '-' .. result
end
return result
end
BlzLoadTOCFile("templates.toc")
local gameUI = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
--подсветка текстуры
--в качестве основы взял ScoreScreenTabButtonTemplate
--без родителя нельзя создать типы фреймов String или Texture.
local TextureHighLightParentFrame1 = BlzCreateSimpleFrame("ParentTexture", gameUI, 0)
local TextureHighLight1 = BlzGetFrameByName("TestTexture", 0)
BlzFrameSetTexture(TextureHighLight1, "white.blp", 0, true)
BlzFrameSetAllPoints(TextureHighLight1, TextureHighLightParentFrame1)
BlzFrameSetAbsPoint(TextureHighLightParentFrame1, FRAMEPOINT_CENTER, 0.2, 0.525)
BlzFrameSetSize(TextureHighLightParentFrame1, 0.04, 0.04)
--можно менять цвет подсветке ARGB. Каждый параметр задается 1-255
BlzFrameSetVertexColor(TextureHighLight1, BlzConvertColor(255, 255, 255, 255))
local TextureHighLightParentFrame2 = BlzCreateSimpleFrame("ParentTexture", gameUI, 0)
local TextureHighLight2 = BlzGetFrameByName("TestTexture", 0)
BlzFrameSetTexture(TextureHighLight2, "white.blp", 0, true)
BlzFrameSetAllPoints(TextureHighLight2, TextureHighLightParentFrame2)
BlzFrameSetAbsPoint(TextureHighLightParentFrame2, FRAMEPOINT_CENTER, 0.6, 0.525)
BlzFrameSetSize(TextureHighLightParentFrame2, 0.04, 0.04)
--можно менять цвет подсветке ARGB. Каждый параметр задается 1-255
BlzFrameSetVertexColor(TextureHighLight2, BlzConvertColor(255, 255, 255, 255))
--слайдер
local slider0 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 0)
--строка
local label0 = BlzCreateFrame("EscMenuLabelTextTemplate", slider0, 0, 0)
BlzFrameSetPoint(label0, FRAMEPOINT_LEFT, slider0, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider0, FRAMEPOINT_TOP, 0.2,0.46)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider0, 1, 255)
--изначальное положение
BlzFrameSetValue(slider0, 255)
--минимальный шаг
BlzFrameSetStepSize(slider0, 1)
--слайдер
local slider1 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 1)
--строка
local label1 = BlzCreateFrame("EscMenuLabelTextTemplate", slider1, 0, 1)
BlzFrameSetPoint(label1, FRAMEPOINT_LEFT, slider1, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider1, FRAMEPOINT_TOP, 0.2,0.435)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider1, 1, 255)
--изначальное положение
BlzFrameSetValue(slider1, 255)
--минимальный шаг
BlzFrameSetStepSize(slider1, 1)
--слайдер
local slider2 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 2)
--строка
local label2 = BlzCreateFrame("EscMenuLabelTextTemplate", slider2, 0, 2)
BlzFrameSetPoint(label2, FRAMEPOINT_LEFT, slider2, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider2, FRAMEPOINT_TOP, 0.2,0.410)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider2, 1, 255)
--изначальное положение
BlzFrameSetValue(slider2, 255)
--минимальный шаг
BlzFrameSetStepSize(slider2, 1)
--слайдер
local slider3 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 3)
--строка
local label3 = BlzCreateFrame("EscMenuLabelTextTemplate", slider3, 0, 3)
BlzFrameSetPoint(label3, FRAMEPOINT_LEFT, slider3, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider3, FRAMEPOINT_TOP, 0.2,0.385)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider3, 1, 255)
--изначальное положение
BlzFrameSetValue(slider3, 255)
--минимальный шаг
BlzFrameSetStepSize(slider3, 1)
--слайдер
local slider4 = BlzCreateFrame("EscMenuSliderTemplate", gameUI, 0, 4)
--строка
local label4 = BlzCreateFrame("EscMenuLabelTextTemplate", slider4, 0, 4)
local procent = 0.5
BlzFrameSetPoint(label4, FRAMEPOINT_LEFT, slider4, FRAMEPOINT_RIGHT, 0, 0)
BlzFrameSetAbsPoint(slider4, FRAMEPOINT_TOP, 0.4,0.25)
--устанавливаем пределы цвета RGB 1-255
BlzFrameSetMinMaxValue(slider4, 0.00, 1.00)
--изначальное положение
BlzFrameSetValue(slider4, procent)
--минимальный шаг
BlzFrameSetStepSize(slider4, 0.01)
--текст
BlzFrameSetText(label4, "процент смешивания: "..R2SW(procent*100, 1, 1))
local value2_A = 255
local value2_R = 255
local value2_G = 255
local value2_B = 255
local color2_value = BlzConvertColor(value2_A, value2_R, value2_G, value2_B)
local text4 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 5)
BlzFrameSetAbsPoint(text4, FRAMEPOINT_TOP, 0.6,0.46)
local text5 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 6)
BlzFrameSetAbsPoint(text5, FRAMEPOINT_TOP, 0.6,0.435)
local text6 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 7)
BlzFrameSetAbsPoint(text6, FRAMEPOINT_TOP, 0.6,0.410)
local text7 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 8)
BlzFrameSetAbsPoint(text7, FRAMEPOINT_TOP, 0.6,0.385)
local text_value1 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 7)
BlzFrameSetAbsPoint(text_value1, FRAMEPOINT_TOP, 0.2,0.485)
BlzFrameSetText(text_value1, "# "..decimalToHex(255)..decimalToHex(255)..decimalToHex(255)..decimalToHex(255).." argb-color")
local text_value2 = BlzCreateFrame("EscMenuLabelTextTemplate", gameUI, 0, 7)
BlzFrameSetAbsPoint(text_value2, FRAMEPOINT_TOP, 0.6,0.485)
BlzFrameSetText(text4, "A-Color: "..R2SW(value2_A, 1, 1))
BlzFrameSetText(text5, "R-Color: "..R2SW(value2_R, 1, 1))
BlzFrameSetText(text6, "G-Color: "..R2SW(value2_G, 1, 1))
BlzFrameSetText(text7, "B-Color: "..R2SW(value2_B, 1, 1))
BlzFrameSetText(text_value2, "# "..decimalToHex(255)..decimalToHex(255)..decimalToHex(255)..decimalToHex(255).." argb-color")
TimerStart(CreateTimer(), 0.4, true, function ()
--фреймы
local fa = BlzGetFrameByName("EscMenuSliderTemplate", 0)
local fr = BlzGetFrameByName("EscMenuSliderTemplate", 1)
local fg = BlzGetFrameByName("EscMenuSliderTemplate", 2)
local fb = BlzGetFrameByName("EscMenuSliderTemplate", 3)
local fp = BlzGetFrameByName("EscMenuSliderTemplate", 4)
--значения
local a = BlzFrameGetValue(fa)
local r = BlzFrameGetValue(fr)
local g = BlzFrameGetValue(fg)
local b = BlzFrameGetValue(fb)
local p = BlzFrameGetValue(fp)
--устанавливаем цвет
BlzFrameSetVertexColor(TextureHighLight1, BlzConvertColor(R2I(a), R2I(r), R2I(g), R2I(b)))
BlzFrameSetText(text_value1, "# "..decimalToHex(a)..decimalToHex(r)..decimalToHex(g)..decimalToHex(b).." argb-color")
--выводим в строки фреймлв
BlzFrameSetText(BlzGetFrameByName("EscMenuLabelTextTemplate", 0), "A-Color: "..R2SW(a, 1, 1))
BlzFrameSetText(BlzGetFrameByName("EscMenuLabelTextTemplate", 1), "R-Color: "..R2SW(r, 1, 1))
BlzFrameSetText(BlzGetFrameByName("EscMenuLabelTextTemplate", 2), "G-Color: "..R2SW(g, 1, 1))
BlzFrameSetText(BlzGetFrameByName("EscMenuLabelTextTemplate", 3), "B-Color: "..R2SW(b, 1, 1))
BlzFrameSetText(label4, "процент смешивания: "..R2SW(p*100, 1, 1))
end)
local button = BlzCreateSimpleFrame("DynamicSimpleButton", gameUI, 0)
BlzFrameSetAbsPoint(button, FRAMEPOINT_CENTER, 0.4, 0.3)
BlzFrameSetTexture(BlzGetFrameByName("MySimpleButtonTexture", 0), "plus 64x64.blp", 0, true)
local trigger_click_button = CreateTrigger()
BlzTriggerRegisterFrameEvent(trigger_click_button, button, FRAMEEVENT_CONTROL_CLICK )
TriggerAddAction(trigger_click_button, function()
print(GetPlayerName(GetTriggerPlayer()).." нажал на кнопку [смешивание двух цветов] с "..I2S(procent*100).."%")
--фреймы slider
local fa = BlzGetFrameByName("EscMenuSliderTemplate", 0)
local fr = BlzGetFrameByName("EscMenuSliderTemplate", 1)
local fg = BlzGetFrameByName("EscMenuSliderTemplate", 2)
local fb = BlzGetFrameByName("EscMenuSliderTemplate", 3)
local fp = BlzGetFrameByName("EscMenuSliderTemplate", 4)
--значения color1 RGBA. достаем real-значения из slider
local a1 = (BlzFrameGetValue(fa))
local r1 = (BlzFrameGetValue(fr))
local g1 = (BlzFrameGetValue(fg))
local b1 = (BlzFrameGetValue(fb))
--значения procent смешивания
local p = (BlzFrameGetValue(fp))
--значения color2 RGBA.
--цвета color2 хранятся в переменных
local r2 = (value2_R)
local g2 = (value2_G)
local b2 = (value2_B)
local a2 = (value2_A)
--
--print( "argb-color 1: ",a1,r1,g1,b1)
--print( "argb-color 2: ",a2,r2,g2,b2)
--формула линейной интерполяции с цветовой моделью hsl
local newColor = colorMixer({r1, g1, b1, a1}, {r2, g2, b2, a2}, p)
local r3 = (newColor[1])
local g3 = (newColor[2])
local b3 = (newColor[3])
value2_R = r3
value2_G = g3
value2_B = b3
--по каким-то причинам невозможно получить альфу, всегда возвращает nil
value2_A = a1 --заимвствуем
--local color3 = "0x|C"..decimalToHex(a1)..decimalToHex(r3)..decimalToHex(g3)..decimalToHex(b1).."|r"
--print("итог смешивания: ",a1,r3,g3,b3)
BlzFrameSetVertexColor(TextureHighLight2, BlzConvertColor(R2I(a1), R2I(r3), R2I(g3), R2I(b3)))
BlzFrameSetText(text4, "A-Color: "..R2SW(value2_A, 1, 1))
BlzFrameSetText(text5, "R-Color: "..R2SW(r3, 1, 1))
BlzFrameSetText(text6, "G-Color: "..R2SW(g3, 1, 1))
BlzFrameSetText(text7, "B-Color: "..R2SW(b3, 1, 1))
--BlzFrameSetText(text_value2, "# "..decimalToHex(a1)..decimalToHex(r3)..decimalToHex(g3)..decimalToHex(b3).." argb-color")
end)
--создаем подсказки для каждкой button
--общую подсказку не получается сделать, нужно отслеживать, что мышь внутри кнопки
--общий родитель SimpleFrame
local button_tooltip = BlzCreateSimpleFrame("Tooltip", gameUI, 0)
--создаем рамку
local button_tooltip_box = BlzGetFrameByName("TooltipBox", 0)
BlzFrameSetLevel(button_tooltip_box, 1)
BlzFrameSetVisible(button_tooltip_box, false)
--создаем текст
local button_tooltip_text = BlzGetFrameByName("TooltipTextValue", 0)
--текст шириной 0.29, высота специально обнулена.
--Игра сама корректирует высоту вверх в зависимости от объема текста
BlzFrameSetSize(button_tooltip_text, 0.29, 0)
--поднимаем текст выше рамки подсказки
BlzFrameSetLevel(button_tooltip_text, 2)
--выключаем TEXT, тк в этой области не дает кликать
BlzFrameSetEnable(button_tooltip_text, false)
--изначально текст невидим
BlzFrameSetVisible(button_tooltip_text, false)
--создаем горизонтальную разделительную линию
local button_tooltip_HorizontalSeparator = BlzCreateFrameByType("BACKDROP", "", button_tooltip_box, "", 0)
BlzFrameSetSize(button_tooltip_HorizontalSeparator, 0.04, 0.002)
BlzFrameSetPoint(button_tooltip_HorizontalSeparator, FRAMEPOINT_BOTTOMLEFT, button_tooltip_text, FRAMEPOINT_TOPLEFT, 0.005, 0.005)
BlzFrameSetPoint(button_tooltip_HorizontalSeparator, FRAMEPOINT_BOTTOMRIGHT, button_tooltip_text, FRAMEPOINT_TOPRIGHT, -0.005, 0.005)
BlzFrameSetTexture(button_tooltip_HorizontalSeparator, "UI\\Widgets\\ToolTips\\Human\\HorizontalSeparator",0, true)
--создаем заглавие текста
local button_tooltip_text_title=BlzCreateFrameByType("TEXT", "MyTextValue", button_tooltip_box, "BoxedTextValue", 0)
--текст шириной 0.29, высота специально обнулена.
--Игра сама корректирует высоту вверх в зависимости от объема текста
BlzFrameSetSize(button_tooltip_text_title, 0.29, 0)
BlzFrameSetPoint(button_tooltip_text_title, FRAMEPOINT_BOTTOMLEFT, button_tooltip_HorizontalSeparator, FRAMEPOINT_TOPLEFT, -0.005, 0.005)
BlzFrameSetPoint(button_tooltip_text_title, FRAMEPOINT_BOTTOMRIGHT, button_tooltip_HorizontalSeparator, FRAMEPOINT_TOPRIGHT, 0.005, 0.005)
BlzFrameSetText(button_tooltip_text_title,"смешивание 2-х цветов")
-- рамка копирует размеры с оффсетами
BlzFrameSetPoint(button_tooltip_box, FRAMEPOINT_BOTTOMLEFT, button_tooltip_text, FRAMEPOINT_BOTTOMLEFT, -0.005, -0.005)
BlzFrameSetPoint(button_tooltip_box, FRAMEPOINT_TOPRIGHT, button_tooltip_text_title, FRAMEPOINT_TOPRIGHT, 0.005, 0.005)
-- Задаем положение Tooltip
BlzFrameSetAbsPoint(button_tooltip_text, FRAMEPOINT_BOTTOM, 0.5+0.3/2, 0.176)
BlzFrameSetText(button_tooltip_text,"Нажмите на кнопку, чтобы смешать два цвета")
--привязываем к кнопкам подсказку
BlzFrameSetTooltip(button, button_tooltip)
--http://gospitaliers.narod.ru/knyaz/knyaz_znaharstvo.htm
end
end
ну и карта --просто лень fdf-files вытаскивать.
Если кто-то знает еще способы, то пишите сюда с примерами. Будет интересно
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.