Derma - большая библиотека в GLua. Используется для создания разных оконных программ и скриптов.
В этом руководстве мы рассмотрим базовый функционал дермы. Функции:
vgui.Create()
PANEL:DoClick()
PANEL:Paint()
Важная инфа - ресурс информации! Очень часто люди спрашивают, в том числе и я раньше спрашивал, где взять название функций, и просто почитать о GLua. Так вот, Гарри Ньюман создал отдельный сайт, посвященный вики об этом языке. Вот ссылка:
http://wiki.garrysmod.com/page/VGUI_Element_List
как создавать объекты Дермы Для создания различных VGUI элементов используется функция библиотеки vgui - vgui.Create('название элемента', парент)
Рассмотрим пример кода для создания обыкновенного окна с кнопкой по центру, и измененным дизайном.
local Frame = vgui.Create('DFrame')
Frame:SetSize(500, 500)
Frame:Center()
Frame:SetTitle('Окно!')
Frame:MakePopup()
local Btn = vgui.Create('DButton', Frame)
Btn:SetSize(150, 30)
Btn:SetText('Кнопка!')
Btn:Center()
function Btn:DoClick()
chat.AddText( Color(255, 255, 255), 'Привет, ', LocalPlayer() )
end
function Frame:Paint(w, h)
draw.RoundedBox(1, 0, 0, w, h, Color(50, 50, 50, 50))
draw.RoundedBox(0, 0, 0, w, 25, Color(255,255,255))
end
И так, начнем.
Создание и расположение Окна
local Frame = vgui.Create('DFrame') - функция создания графического, функционального элемента.
В данном случае мы создали обыкновенное окно. Такое простое, не измененное окно используются ВЕЗДЕ и ПОВСЕМЕСТНО, во всех гейммодах и на любых серверах. Многие могли заметить его на DarkRP, в разных меню. Но чаще всего разработчики модов изменяют дизайн окна, что бы оно выглядело более приятно.
Frame:SetSize(500, 500) - установка размера окна. Первое число - размер окна по Иксу, второе - по Игреку. (т.к. окно двумерное, и расположено оно на экране, то координаты две, что и логично, правда? )
Frame:Center() - точное расположение окна по центру экрана. Ничего сложного )
Frame:SetTitle('Окно!') - подпись окна в верхнем левом углу. Принимает любой текст.
Frame:MakePopup() - выводит окно на первый план.
Создание и расположение Кнопки
local Btn = vgui.Create('DButton', Frame) - создание графического элемента "кнопка". Способна нажиматься :D
Btn:SetSize(150, 30) - размер кнопки. 150 х 30 пикселей.
Btn:SetText('Кнопка!') - текст, отображаемый на кнопке. Принимает любой текст.
Btn:Center() - расположение кнопки по центру окна.
Важное замечание: при создании граф. элемента в функции указывается его родительский объект, к которому он будет присоединен (припаренчен). Функция :Center() центрирует элемент относительно родительского объекта Derma, это важно!
Функция нажатия на Кнопку
function Btn:DoClick() - функция, выполняющаяся при нажатии на кнопку. Открывается она этим кодом <-, а закрывается Луашным тегом end.
chat.AddText( Color(255, 255, 255), 'Привет, ', LocalPlayer() ) - выводит в чат сообщение по типу: "Привет, <НИК ИГРОКА>". Примечание: Слово "Привет" будет белого цвета (255, 255, 255), а ник игрока будет в цвет группы, в которой он находится на сервере.
Функция изменения дизайна Окна - Paint Примечание: эта функция способна изменить дизайн большинства графических элементов Дермы.
function Frame:Paint(w, h) - инициализация функции Пэйнт, или же окраски. В нашем случае, эта функция изменяет отрисовку окна.
- в качестве аргументов функции у нас 2 числовых значения - w (Width), и h (Height). Эти параметры зависят от размера элемента, который будет окрашен. (В нашем случае, у окна размер 500 x 500 - значит w и h будут равны 500. А если бы мы окрашивали кнопку - w была бы равна 150, а h - 30. Всё просто!)
draw.RoundedBox(1, 0, 0, w, h, Color(50, 50, 50, 50))
draw.RoundedBox(0, 0, 0, w, 25, Color(255,255,255))
- тут мы рисуем 2 прямоугольника на окне. Рассмотрим первый:
Функция RoundedBox( сила округления прямоугольника, отступ по Иксу, отступ по Игреку, Ширина, Высота, Цвет в RGB ).
В первом случае мы зарисовываем ВСЁ окно тёмно-прозрачным квадратом.
Во втором же случае, мы зарисовываем самую верхушку окна абсолютно не прозрачным, белым цветом.
Собственно, вот так оно и работает. Библиотека Derma была создана в далеких 2009х годах, когда GM был еще очень молодой игрой. И в то время такого количества новоротов там не было. Так что сейчас, нам остается довольствоваться плодами труда многих фанатов игры!
Спасибо тем, кто прочел руководство до конца. Просьба от меня - лайкни руководство, бро! Это так просто, как нажать на кнопку на созданном тобою окошке на Дерме! Я старался, и вложил кусок души в этот текст.