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

Pack Color

Цвет из четырёх чисел неудобно носить с собой. packcolor складывает его в одно — и цвет становится обычным значением

draw color берёт цвет четырьмя числами, и пока цвет в программе один — этого хватает. Как только цветов становится несколько и их надо выбирать, четыре числа превращаются в четыре переменные, которые всюду таскают вместе. packcolor складывает их в одну.

тик 0
Упаковать цвет0
= pack
Упаковать цвет1
= pack
Рисование2
rgb
Рисование3
цвет
Рисование4
xy
ширинавысота
Рисование5
цвет
Рисование6
xy
ширинавысота
Вывод рисования7
Печать8
Вывод печати9
Стоп10
@counter0number
красныйnullnull
голубойnullnull
packcolor красный 1 0 0 1
draw col красный
Поле Что в нём
первое куда положить готовый цвет
остальные четыре красный, зелёный, синий и прозрачность
тик 0
Упаковать цвет0
= pack
Упаковать цвет1
= pack
Установить2
=
Выбор3
= if
тогда иначе
Рисование4
rgb
Рисование5
цвет
Рисование6
xy
ширинавысота
Вывод рисования7
Стоп8
@counter0number
тревогаnullnull
покойnullnull
запасnullnull
цветnullnull

Вот ради чего всё: цвет теперь одно число, а с одним числом можно делать то же, что с любым другим. Положить в ячейку памяти. Выбрать через select. Передать в соседний процессор. Здесь программа выбирает между тревожным и спокойным цветом одной строкой:

select цвет lessThan запас 50 тревога покой
draw col цвет

Через draw color то же самое потребовало бы ветвления и четырёх присваиваний в каждой ветке.

Загляните в таблицу переменных: у красный там не круглое значение, а что-то вроде 2.1e-314. Так и должно быть.

Упакованный цвет — это байты цвета, положенные внутрь числа, а не число в привычном смысле. Для игры это просто способ провезти четыре байта в одном значении.

Свой цвет есть у предметов, жидкостей, блоков и команд, и sensor отдаёт его в том же упакованном виде:

sensor цвет @copper @color
draw col цвет

Так на дисплее рисуют предмет его собственным цветом — не выписывая руками, что медь рыжая.

Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.