Перейти к публикации
Форум - ComputerCraft
JaggerDer

[СС1.6] Слои

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

Смысл

Написал программку из двух файлов для CC1.6 которая позволяет создавать слои, на которых можно "рисовать".
Пока реализовал основной задуманный функционал, позже напишу еще пару плюшек.

Что есть:
-Независимые слои
-Псевдопрозрачность
-Базовые функции для операций над слоями

Что хочу добавить:
-Удаление всех пикселов слоя, не задевая вышестоящих слоев.
-Выборачная отрисовка пикселов слоев.
-Функционал для рисования(линии, боксы и т.п) <частично реализовано>
-Возможность заблокировать, скрыть, перемещать пикселы слоя.
 

Описание функций layerobj

-Init(anWidth, anHeight, asName, abVis, abLck) - инициализирует объект и позволяет задать начальные параметры, что то вроде конструктора в ООП:
 -anWidth - ширина матрицы слоя.
 -anHeight - высота матрицы слоя.
 -asName - название слоя.
 -abVis - не используется.
 -abLck - не используется.
-Remove() - деструктор.
-SetPixel(anX, anY, asText, anTextColor, anColor) - записывает символ\цвет символа\цвет фона в соотв. матрицы:
 -anX - ордината точки.
 -anY - абцисса точки.
 -asText - символ или строка, в случае со строкой все ее символы принимают цвет и фон первого.
 -anTextColor - цвет символа.
 -anColor - цвет фона.
-GetParameters() - возвращает основные параметры слоя: <Обновлено>
 -sName - имя слоя.
 -nWidth - ширина матрицы слоя.
 -nHeight - высота матрицы слоя.

 -nShiftX, nShiftY

-Shift(anShiftX, anShiftY) - установка смещения слоя по X и Y соответственно. <Добавлено>
-GetPixel(anX, anY) - возвращает информацию о пиксле по координатам anX и anY:
 -sText - символ.
 -nTextColor - цвет символа.
 -nColor - цвет фона.
-ClearLayer() - очищает все матрицы слоя.
 

Описание функций layermanager

-RegisterLayer(aloLayer) - регестрирует слой в очереди для отрисовки, возвращает его ID.
-UnregisteLayer(anID) - удаляет слой из очереди по ID.
-DrawLayers() - отрисовывает поочередно все слои.
-DrawLayer(aloLayer) - рисует определенный слой.
-ShiftLayer(anID, asDir, anStep) - меняет ID слоя, а собственно и очередь прорисовки:
 -anID - смещаемый слой.
 -asDir - направление смещения(left и right)
 -anStep - на сколько ед. сместить слой.
-LayerClick(anX, anY) - возвращает название слоя и инф-ию о пикселе по заданным координатам:
 -sName - ...
 -sText - ...
 -nTextColor - ...
 -nColor - ...
-Info() - дебаговая информация.
-Ряд пока незадействованных функций. <Удалено/Перемещено>

 

LAPIShell

Содержит функции рисования линии и бокса:

 -DrawLine(anX1, anY1, anX2, anY2, asChar, anCharColor, anColor, aloLayer) <Добавлено>

 -DrawBox(anX1, anY1, anX2, anY2, asChar, anCharColor, anColor, aloLayer) <Добавлено>

 

FIO

Содержит функции для сохранения\загрузки слоя:

 -SaveToFile(asFilename, aloLayer) <Добавлено>

 -ReadFromFile(asFilename, aloLayer) <Добавлено>
 

Установка

Качаем с pastebin на компьютер файл: http://pastebin.com/Nekd2WRU. Используем с помощью os.loadAPI.

Для тех кто зачем-то будет читать мой код:
Аргументы функций: a<type>VarName
Переменная: <type>VarName
Временная переменная: _<type>VarName
<type> - просто сокаращения: n - number, s - string и т.д
Все это дело нужно было только чтобы не путаться с переменными(было такое).

Изменено пользователем JaggerDer
  • Like 3

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


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

Это что-то вроде графического редактора для CC?

Можно будет сохранять и загружать готовые рисунки?

Есть ли ограничение на размер рисунка и количество слоев?

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


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

Это что-то вроде графического редактора для CC?

Можно будет сохранять и загружать готовые рисунки?

Есть ли ограничение на размер рисунка и количество слоев?

Нет, это не графический редактор. Я хотел сделать библиотеку для работы со слоями куда можно записать и откуда можно прочитать информацию о тексте, цвете - нужно было для чего то, т.к. в СС нельзя получить эту инфу, только нарисовать.

 

Размер любого слоя ограничен самим окном СС компьютера, можно сделать меньше, но не больше(вроде можно задать размер при создании слоя). А кол-во слоев вроде неограниченное(ну насколько памяти хватит).

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


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

Т.е. это что-то вроде Canvas API?

Позволяет программе выводить свою графику/текст на нескольких накладывающихся слоях, и контролировать, что и где отображается?

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


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

Т.е. это что-то вроде Canvas API?

Позволяет программе выводить свою графику/текст на нескольких накладывающихся слоях, и контролировать, что и где отображается?

Да.

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


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

Итак, добавил пару штук в свой API:

 -Можно сохранять слой в файл или же загружать из файла(буду благодарен если кто подскажет как можно сжимать информацию о пикселах слоев).

 -Теперь можно сдвигать слои по x, y(не путать со сдвигом по z).

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


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

Что ты называешь пикселами? В СС вроде нет графики

Пикселом я называю символ имеющий цвет и цвет его фона.

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


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

т.е. пиксель это символ + байт цвета, а экран состоит из 19х51 пикселей. Не думаю, что при таких объемах сжатие даст результат, но можешь почитать тему про голографический проектор. Я там алгоритм сжатия предлагал, может и тебе подойдет

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


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

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

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

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

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

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

Войти

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

Войти сейчас

×