Перейти к публикации

В ближайшее время постараюсь разобраться с картой сервера/ЛК/бб кодами

Внимание, с 14 февраля до 20 февраля могут проходить работы на сервере, где также находится лаунчсервер. В связи с этим авторизация в лаунчере может не работать

Ktlo

Object API [v1.0] (в разработке)

Рекомендованные сообщения

Данное API будет добавлять в вашу систему более удобные средства программирования разных элементов типа кнопки, картинки, процесса в виде разных объектов. Это API ещё находится в разработке, пока я добавил один элемент, кнопку. Я постарался сделать это API максимально гибким, и пока я не начал делать следующий элемент, хотелось бы услышать ваше мнение. Устанавливается всё очень просто, как любая другая библиотека. Скачать можно с pastebin.



Кнопка


Для того, чтобы получить кнопку, как объект, нужно использовать следующую функцию:

local Object = require("Имя_файла")

local Button = Object.New.Button{xPos=number, yPos=number, Width=number, Height=number} 

Разберём необходимые параметры:

  •  xPos, yPos - числа, обозначающее положение верхнего левого угла кнопки;
  • Width, Height - длина и высота соответственно.

Также кнопки есть дополнительные параметры, которые можно не указывать:

  • Screen - адрес монитора с кнопкой (переключает видеокарту на другой монитор, если параметр указывает на не подключённый монитор), выдаёт ошибку, если такого монитора нет;
  • Text - текст на кнопке, переносится на следующую строку по центру кнопки автоматически;
  • TextColor - цвет текста, если не указан, ставит белый;
  • BackgroundColor - цвет кнопки, если не указан ставит синий;
  • ActiveColor - цвет нажатой кнопки, по стандарту зелёный;
  • InactiveColor - цвет неиспользуемой кнопки, по стандарту серый;
  • Time - время нажатия, по стандарту 0.3 секунды;
  • Style - стиль кнопки. Их всего два, с округлёнными углами (по стандарту) и ровный прямоугольник;
  • Visible - параметр видимости, не рисует кнопку автоматически, если false, и рисует, если true.

Все параметры - ключи таблицы, и по-этому могут быть указаны в любом порядке.

Также вы спокойно можете сделать так:

local Object = require"object"
local params = {xPos=2, yPos=2, Width=10 ,Height=4, Text=54679183}
local Button1 = Object.New.Button(params)
local Button2 = Object.New.Button(params) 

И это будет работать.


 

Для получения значения одного из параметров, можно сделать следующее:

local Text = Button.Text 

Но вы не можете сделать это в другую сторону, а именно:

Button.Text = "klopsterinator" --Не работает 

Все параметры, которые вы задали при создании кнопки (включая свои, которых нет в списке) - только читаемые.


 

Кнопка имеет 3 встроенных функции (а можно ведь и свои сделать  :giggle:). Первая из них это:

Button.Draw( state ) --Рисует кнопку 

Если параметр state не указан, то будет нарисована обычная кнопка, если "active", то активная, если "inactive", то неактивная.

Далее:

Button.Set{} 

Меняет любые параметры кнопки и добавляет ваши.

Button.Detect{Action=string} 

Детектирует действия на экране, связанные с кнопкой, возвращает true, если действие с кнопкой произошло, false, если нет, и значение CurrentButton. Имеет несколько параметров.

Необходимые:

  • Action - действие, может быть "touch", "drag", "scroll" и "drop".

Дополнительные:

  • Button - целевая кнопка мыши или целевое направление действия "scroll".

Следующие несколько параметров нужны, если вы используете несколько кнопок одновременно.

  • Screen - экран, полученный из функции event.pull(),
  • x, y - координаты точки, полученные из функции event.pull(),
  • CurrentButton - то же, что и Button, только полученное из event.pull().

 

Пример кода

 

 

local Object = require"object"
local event = require"event"

local Button = Object.New.Button{xPos=2, yPos=2, Width=11, Height=4, Text="Я - кнопка,и я работаю!!!"}
local detect = { }
detect.Action = "touch"
_, detect.Screen, detect.x, detect.y, detect.CurrentButton = event.pull(detect.Action)
if Button.Detect(detect) then
	Button.Set{Text="Нажата"}
	Button.Draw("inactive")
end 

 

 

 

 

 

Если есть какие-то предложения по улучшению, пишите.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

local function toLines(str, w) --Переносит текст на следующую строку, если не хватает места
А "/n" отменили?

local function rusType(var) --Руссифицированная функция type
Зачем?

 

В целом неплохо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
local function toLines(str, w) --Переносит текст на следующую строку, если не хватает места
А "/n" отменили?

Тогда будет писать с начала строки, а нужно, чтобы писал на кнопке.

 

local function rusType(var) --Руссифицированная функция type
Зачем?

 

Я хотел, чтобы ошибки выводились на русском языке вместе с неправильным типом заданного параметра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://computercraft.ru/wiki/ComputerCraft/GUI_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0

 

Мой вариант графического фреймворка для СС, может поможет в чем либо.

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошее оформление темы и хорошая идея. Но...

 

 

Есть мощный и уже готовый интерфейс GML

https://github.com/OpenPrograms/Gopher-Programs/wiki/GML

 

Я еще со времен программирования Базара с Семоро довел GML до работы с юникодом и исправил множество ошибок.

Велосипед конечно придумывать интересно, но результат в ряд ли будет лучше.

 

 

По структуре ты уже делаешь нерасширяемую структуру. Мне нравится как сделан Windows.Forms. Там все элементы начинаются с простых классов, например "Control" и потом наследуются глубже и глубже.

Например, та же кнопка наследуется из "ButtonBase", который также наследуется чекбоксами.

 

Еще много конечно, что можно посоветовать. Но закончу на том, что писать в луа названия с больших букв - плохой стиль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×