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

Осмысленный индикатор робота

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

Пришло время для моей собственной первой темы.

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

 

Сейчас всего 4 градации Синий для заряженного больше чем на 75%, сине-зеленый для заряженного больше чем наполовину, оранжевый для заряда больше 25% и тускло-красный для заряда меньше 25%

 

Распространяется через hpm, он же hel package manager любезно предоставленный Totoro доступный вот в этой теме. Для установки нужно установить hpm с помощью

pastebin run vf6upeAN
и затем

hpm install blues
для установки файла blues.lua в /etc/rc.d/blues.lua, после чего нужно выполнить регистрацию нового rc модуля командой

rc blues enable
И перезагрузить робота.

 

 

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

Дополнительные ссылки:

Пакет на hel.fomalhaut.me

Код на gitlab.com

 

jwAzQtC.png

Изменено пользователем eu_tomat
коррекция ссылки на код
  • Like 5

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


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

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

Мой вердикт, лишняя затрата ресурсов робота.

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


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

Предлагаю зайти в эвил и посмотреть что делает робот со скрина на варпе cubus

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


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

Предлагаю зайти в эвил и посмотреть что делает робот со скрина на варпе cubus

Увидел, статическое действие, стоит на месте и бездомным ведром забирает воду.

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


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

Однако он получает энергию от встроенной солнечной панели.

Если Алекс вернёт еще и дождь в Улей, то индикатор может пригодиться. Возможно, станет актуальным зарядить робота опытом и таки еще понизить энергопотребление.

И увеличить интервал опроса до минуты, например. Так что, мне думается, проблема с энергией куда менее значима, чем ты считаешь.

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

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


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

Однако он получает энергию от встроенной солнечной панели.

Если Алекс вернёт еще и дождь в Улей, то индикатор может пригодиться. Возможно, станет актуальным зарядить робота опытом и таки еще понизить энергопотребление.

И увеличить интервал опроса до минуты, например. Так что, мне думается, проблема с энергией куда менее значима, чем ты считаешь.

Ну в таких ситуациях думаю ты прав

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


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

Сообщать игроку состояние робота цветом полосы в ряде случаев бывает очень удобным. Как правило, это стационарные роботы с неполной автоматизацией процесса: либо программа ещё недописана, либо недостроены части всей системы, либо полная автоматизация вообще не подразумевается, например, в зонах, не защищённых приватом. При таком способе передачи информации игроку достаточно одного взгляда, чтобы понять, требует ли робот внимания по любой из причин: низкий уровень заряда, недостаток топлива или материалов, переполнение инвентаря, износ или разряд инструмента.

 

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

Изменено пользователем eu_tomat
чистка устаревшего комментария

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


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

Первый (в порядке появления, а не по важности) совет: освоить шестнадцатеричную запись цветов. Записиь вида

robot.setLightColor(0xFF8080) сегодня понятна не только программистам, но и многим дизайнерам. Даже они, далёкие от тонкостей систем счисления, оценили удобство такой записи. В результате промежуточная функция colorRGB() становится ненужной, а запись выглядит компактнее. Впрочем, для кого-то запись из трёх десятичных чисел более понятна, и потому имеет право на существование.

 

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

	local powerSteps = #cl
	local e = tonumber(pc.maxEnergy())
	local pStep = math.floor((e / powerSteps))

	local function currentPowerStep()
		e = pc.energy()
		local result = powerSteps
		local process = true
		for i = 1, powerSteps-1 do
			if (e < (pStep*i)) and process then
				result = i
				break
			end
		end
		return result
	end
Здесь используется цикл и проверка условия внутри него. В зависимости от текущего состояния робота выполняется соответствующее количество итераций. Но это вычисление можно всегда выполнить за одну итерацию.

local idx = math.ceil(computer.energy() / computer.maxEnergy() * #colors)
robot.setLightColor(colors[ idx>0 and idx or 1 ])
Такой код записывается короче, выглядит проще, а работает быстрее. И памяти меньше требует.
  • Like 5

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


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

 

Такой код записывается короче, выглядит проще, а работает быстрее. И памяти меньше требует.

Можно даже еще короче и быстрее если цвета пронумеровать с нуля. Закоммитил. Пока не тестировал, но сегодня вечером погоняю на своих роботах.

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

×