Добавлен , опубликован

Основы Интерфейса

Содержание:
Как смешивать два цвета.

Средне-арифметическое сложение

Это когда 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 вытаскивать.
Если кто-то знает еще способы, то пишите сюда с примерами. Будет интересно

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...