Я выгорел от программирования всё это лето, не программирую уже третью неделю, не считая совсем уж мелочи какие-то... Но тут неожиданно меня именно mlog в Mindustry вернул в желание программировать...
Команды в mlog идут последовательно:
print "Числа 1-5: "
set i 1
print i
op add i i 1
jump 2 lessThanEq i 5
printflush message1
В графической оболочке внутри самого Mindustry более понятно, но тут суть в том, что я добавляю в буфер сообщений
"Числа 1-5: ", потом задаю переменную i как 1, потом добавляю к i 1, потом прыгаю на вторую строку - это добавление i в буфер текста и команды ниже, учитывая, что идём сверху вниз, но прыгаем только если i <= 5, а иначе прыжка не будет и выполнится команда ниже, а она сбрасывает текстовый буфер, выводя его в message1 - это блок сообщения стоящий рядом, к которому привязал процессор...По итогу выводится:
"Числа 1-5: 12345"И вот такое это подобие ассемблера, где надо думать над оптимизацией... у каждого процессора своя скорость, у маленького три тика в секунду, если я не путаю... У большого уже значительно больше... И тут как раз и раскрывается оптимизация, в том, что я могу менять color для следующий команды каждый тик, но тогда будет медленно работать команда, поэтому выгоднее не менять color каждый тик, а отрисовывать многоугольники одинаковых цветов сразу, ну и прочие такие мелочи...
А самое интересное, что я вчера делал радар... Он работал так, что у меня есть туррель, она ищет ближайшего игрока в области видимости привязанной туррели и через сенсоры и внутреннюю арифметику я высчитывал где находится игрок относительно радара... Но суть в том, что это работало медленно: я сначала рисовал весь фон, необходимый для корректного отображения, чтобы понимать что происходит, а только потом логику радара после отрисовки фона... Ну и конечно всё работало медленно, ведь отрисовка забирала все тики и логика обновлялась редко...
Потом я поставил большой процессор - он уже работал быстрее, а так же я провёл явную оптимизацию, как раз до минимума убрав лишнее переключение команду туда и обратно и смог сделать возможным отображать двух игроков сразу на радаре, при этом увеличив скорость (суть в том, что я ставлю блок туррели, привязываю к процессору, потом туррель через свои функции ищет находящихся в своём радиусе игрока, только одного, потом долгой арифметикой я превращаю абстрактного "Игрока" в координаты, где он находится, его имя и прочее)
Но потом пришла в голову гениальная идея...
Сначала думал сделать 4 маленьких процессора - первый отрисовывает фон, а другие отрисовывают найденных игроков, по итогу игроки как и на радаре имеют эффект "Мигания", ведь перерисовка фона каждый раз накладывается сверху на дисплей, как и отрисовка игрока, но потом я понял, что их можно подружить... и тут уже вопрос в реализации, но ясно одно: должен быть один большой процессор и несколько маленьких
Можно сделать либо так, что большой процессор отрисовывает фон и просчитывает логику, общаясь через ячейку памяти с четырьмя процессорами (ячейка памяти - хранилище только чисел в 8 ячейках, то есть подобие стека, а только 4 процессора, потому что один процессор хранил бы X и Y игрока - пара значений, словно специальная аналогия с парами байтов во взрослом программировании), а маленькие процессоры бы просто отрисовывали игроков, ещё и получая информацию об их нахождении
Либо можно сделать так, чтобы большой процессор регулировал прерывания, то есть динамически проверял на какой сейчас строке находятся маленькие процессоры (реализация через
#links для удобства и да, можно проверить на какой сейчас строке процессор), а потом большой процессор просто "Усыплял" процессоры маленькие, пока он сам не отрисует фон, в итоге фон опять перекрывает старые отрисовки, чтобы не было как в старой Windows с отрисовкой окна бесконечно прыгающим эффектом, но при этом и будут поверх уже отрисовываться игроки с помощью маленьких процессоров, в итоге получится обычная синхронизация, которая будет быстро работать из-за скорости большого процессора