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

Программа "две кнопки"

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

Доброго времени суток, прекрасные обитатели сия форума. В компах полный профан, но нужна помощь.

  • Описание: Требуется программа, имеющая две кнопки, при нажатии на которые они загораются и посылают сигнал сверху и снизу относительно системного блока. Пытался написать сам, но все встало((
  • Награда: Огромное человеческое спасибо!
  • Установка: Тут, видимо, комплектующие. Только OpenComputer на версию 1.7.10. OpenOs 1.7.5
  • Требования:  Срабатывание редстоун сигнала после нажатия кнопки с возможностью отключения при повторном нажатии. 
  • Связь: Здесь)

Еще раз огромное спасибо, если кто-то найдется помочь с этим

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


Ссылка на сообщение
Поделиться на других сайтах
local event = require("event")
local component = require("component")
local unicode = require("unicode")
local gpu = component.gpu
local red = component.isAvailable("restone") and component.redstone or error("Redstone component is unavailable")
local floor = math.floor
local TOP = 1
local BOTTOM = 0
local SignalTop, SignalBottom
local Buttons = {}
local function CreateButton(x, y, w, h, bgc, fgc, text, callback)
    local obgc = gpu.getBackground()
    local ofgc = gpu.getForeground()
    gpu.setBackground(bgc)
    gpu.setForeground(fgc)
    gpu.fill(x, y, w, h, " ")
    gpu.set(floor(x+(w/2)-unicode.len(text)/2), floor(y+h/2, text), text)
    table.insert(Buttons, {
        xmi = x,
        ymi = y,
        xma = x+w,
        yma = y+h,
        cb = callback
    })
    gpu.setBackground(obgc)
    gpu.setForeground(ofgc)
end
local function CheckButtonPress(x, y)
    for _, button in ipairs(Buttons) do
        if (x>=button.xmi) and (x<=button.xma) then
            if (y>=button.ymi) and (y<=button.yma) then
                button.cb(x, y)
            end
        end
    end
end

local ScrW, ScrH = gpu.getResolution()


CreateButton(floor(ScrW/6), floor(ScrH/2), 18, 3, 0x646464, 0xbebebe, "Top", function()
    SignalTop = not SignalTop
    red.setOutput(TOP, SignalTop and 15 or 0)
end)
CreateButton(ScrW - floor(ScrW/6) - 18, floor(ScrH/2), 18, 3, 0x646464, 0xbebebe, "Bottom", function()
    SignalBottom = not SignalBottom
    red.setOutput(BOTTOM, SignalBottom and 15 or 0)
end)
while true do
    local _, _, x, y = event.pull("touch")
    CheckButtonPress(x, y)
end

Нуу....
Должно работать, наверное...

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


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

в смысле должно?:) не проверял. Скрина нет?

слишком лень качать майнкрафт, запускал на OCEmu, интерфейс отрисовывается, логика работает, а вот как будет работать редстоун в игре - не знаю)(
XRENZap.png

две кнопки имеются))

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


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

@Asummonster и кстати, для той задачи, которая в заказе для управления рэдом в чужом привате, лучше было бы, имхо не кнопки "светящиеся" хотеть заказчику две штуки, которые работают в режиме вкл/выклк (типа отключение рэда при повторном нажатии он хотел), а строки с чекбаксами

Типа так:
[x] -  реактор

[x] - дверь

[ ] - люк

...

 

Это сделает гуи проще визуально понятнее, и програмка будет более масштабируемая для любых задач (если рэд. сигнал подавать редстон-камнями ОС)

 

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


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

слишком лень качать майнкрафт, запускал на OCEmu, интерфейс отрисовывается, логика работает, а вот как будет работать редстоун в игре - не знаю)(две кнопки имеются))

Огромное человеческое спасибо! Все работает!

Изменено пользователем Alex
сокращение цитаты

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


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

Огромное человеческое спасибо! Все работает!

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

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


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

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

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

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

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

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

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

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

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


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