Перейти к содержимому
ECS

Библиотека пользовательского интерфейса "GUI"

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

Возникла проблемка, 

Хочу забить в функцию переменную силы сигнала, но чета как то никак. Компилятор ругается, без понятия почему.
 

local GUI = require("GUI")
local component = require("component")
local sides = require("sides")
local colors = require("colors")
local rs = component.redstone 
local MaxSignalPower = 256

--------------------------------------------
local mainContainer = GUI.fullScreenContainer()
mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D))

local inputPower = mainContainer:addChild(GUI.input(5, 4, 30, 3, 0xEEEEEE, 0x555555, 0x999999, 0xFFFFFF, 0x2D2D2D, "", ""))

local powerSignal

inputPower.onInputFinished = function()
	powerSignal = inputPower.text 
end

  
local function rOutput()
 rs.setOutput(sides.top, powerSignal)
end

local function rOutputOff()
 rs.setOutput(sides.top, 0)
end

local switch2 = mainContainer:addChild(GUI.switch(5, 12, 8, 0x66DB80, 0x1D1D1D, 0xEEEEEE, false))
switch2.onStateChanged = function()
  if switch2.state then
    rOutput(sides.top, powerSignal)
  else
    rOutputOff()
  end
end

------------------------------------------------
mainContainer:drawOnScreen(true)
mainContainer:startEventHandling()

Снимок.PNG

Изменено пользователем ZloyApelsihchik
объединение сообщений

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


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

Дык поле input.text является строкой, ты ж ее сам вводишь в виде текста, в виде чертовых символов. А функция redstone.setOutput(side, strength) в качестве второго аргумента принимает только числа. Ясен фиг ругается, если ты ей пытаешься текст скормить. Юзай что-то типа этого:

inputPower.onInputFinished = function()
  -- Зачекай, а то мало ли там вообще не число введено
  if inputPower.text:match("%d+") then
  	powerSignal = tonumber(inputPower.text)
  end
end

Второй вариант с автоматической валидацией:

inputPower.validator = function()
	return inputPower.text:match("%d+")
end

-- При наличии validator этот метод выполнится только в случае успешной валидации текста
inputPower.onInputFinished = function()
  powerSignal = tonumber(inputPower.text)
end

 

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


Ссылка на сообщение
Поделиться на других сайтах
14 часов назад, ECS сказал:

Дык поле input.text является строкой, ты ж ее сам вводишь в виде текста, в виде чертовых символов. А функция redstone.setOutput(side, strength) в качестве второго аргумента принимает только числа. Ясен фиг ругается, если ты ей пытаешься текст скормить. Юзай что-то типа этого:


inputPower.onInputFinished = function()
  -- Зачекай, а то мало ли там вообще не число введено
  if inputPower.text:match("%d+") then
  	powerSignal = tonumber(inputPower.text)
  end
end

Второй вариант с автоматической валидацией:


inputPower.validator = function()
	return inputPower.text:match("%d+")
end

-- При наличии validator этот метод выполнится только в случае успешной валидации текста
inputPower.onInputFinished = function()
  powerSignal = tonumber(inputPower.text)
end

 

Ох, как сложно. 
Так, то что ты написал, это как я понял, проверка введённого текста, на то число ли это?
Я не совсем понимаю что такое tonumber. Но опять же как я понял, это что вроде конвертера в число?
И что такое validator, тоже хотелось бы узнать.
Простите за такое большое кол-во вопросов, я новичок в это деле и вопросов тьма. 
Спасибо за помощь :3 Кусь 
 

Изменено пользователем ZloyApelsihchik

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


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, ZloyApelsihchik сказал:

Я не совсем понимаю что такое tonumber. Но опять же как я понял, это что вроде конвертера в число?

 

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

 

2 часа назад, ZloyApelsihchik сказал:

И что такое validator, тоже хотелось бы узнать.

 

Вообще из коммента в коде выше все должно быть понятно, да и в документации эта инфа подробно разжевана. Захотел бы - узнал бы

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


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

ECS, ну я тоже плохо знаю lua, и ниче пишу проги под твоей оболочки)

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


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

@Fronun, мяу, однако ты ознакомлен с tonumber(), правда? Правда-правда?

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


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

dafaq!1111

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


Ссылка на сообщение
Поделиться на других сайтах
03.01.2019 в 16:56, SkinnerDE сказал:

вопрос снят, сори

image.png

image.png

Надеюсь, ты конвертнул картинку.png в картинку.pic

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


Ссылка на сообщение
Поделиться на других сайтах
05.01.2019 в 13:12, Fronun сказал:

Надеюсь, ты конвертнул картинку.png в картинку.pic

 

Да, додумался все-таки))

Вот только прикрутить туда таймер не получается никак. Чтобы картинка менялась по таймеру

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


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

@SkinnerDE, юзай eventHandler для пикчи:

 

-- Загружаем все пикчи из папки в единую таблицу
local path = "/Pictures/"
local currentPicture = 1

local pictures = {}
for file in filesystem.list(path) do
  table.insert(pictures, image.load(path .. file))
end

-- Добавляем объект изображения в контейнер или куда-то еще
local GUIImage = application:addChild(GUI.image(1, 1, pictures[currentPicture]))

-- Как часто пикча будет меняться
local interval = 5
-- Время, когда условие ниже сработает в следующий раз
local deadline = computer.uptime() + interval

-- Обработчик событий вызывается каждый пуллящийся ивент (даже если его не было при нулевом интервале)
kartinka.eventHandler = function(application, myImage)
  if computer.uptime() > deadline then
    -- Отображаем следующую пикчу
    currentPicture = currentPicture + 1
    if currentPicture > #pictures then
      currentPicture = 1 
    end
    
    GUIImage.image = pictures[currentPicture]
    application:draw()
    
    -- Обновляем время следующего срабатывания условия
    deadline = computer.uptime() + interval
  end
end

-- Обязательно с ноликом, чтоб ивенты пуллились с минимальным интервалом
application:start(0)

 

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


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

Спасибо, вроде бы понятно (сам принцип), кроме того откуда эти имена и что туда поставить.

image.png.f2c8fe95b04f623dda8a5df8ffee3e33.png

kartinka - вроде контейнер, а myImage?

Изменено пользователем SkinnerDE

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


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

@SkinnerDE, пардон, я на ходу писал, myImage можно в расчет не брать. Главное принцип, дыа. MyImage в данном случае - это ссылка на объект изображения,  передаваемая в обработчик событий для удобства, называть переменные можно как угодно. Для ясности код приведу:

local function myEventHandler(application, objectPointer, e1, e2, e3, ...)
   -- Ох уж эти события
end

-- Переменная object и objectPointer из обработчика событий - это один тот же объект
object.eventHandler = myEventHandler

 

Аналогичный функционал, кстати, можно запилить и средствами event.timer, однако так куда проще, да и отменять таймеры впоследствии не придется.

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


Ссылка на сообщение
Поделиться на других сайтах
20 часов назад, antonn3312578859 сказал:

Жаль что больше не работает(

Она прекрасно работает, просто теперь она переехала в MineOS

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


Ссылка на сообщение
Поделиться на других сайтах
В 26.03.2021 в 18:39, AtomicScience сказал:

Она прекрасно работает, просто теперь она переехала в MineOS

ну да, но хотелось бы видеть её в OpenOS

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


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, antonn3312578859 сказал:

ну да, но хотелось бы видеть её в OpenOS

Никто не мешает портировать ее в OpenOS. Я так систему буферизации графики без проблем перенес с Майноськи, вот что вышло. Потому наверняка не проблема и сам GUI переделать под другую OS.

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


Ссылка на сообщение
Поделиться на других сайтах
В 27.03.2021 в 17:23, antonn3312578859 сказал:

ну да, но хотелось бы видеть её в OpenOS

Можешь юзать версию 2018 года, она лежит в репе ECS/GUI.

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


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

Люди, пацкажыте что за непонятный параметр true в вызове application:draw(true). Этот true передаётся во многих примерах в Wiki в репе ECS/GUI.

И этот параметр никак не задокументирован, если я не слепой

Изменено пользователем kaka888

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...