Итак, небольшой тутор по созданию кодового замка.
Сам замок универсален – сделать можно любое количество цифр, любые числа и самое интересное, что код генерируется случайно, и изначально мы не знаем этого кода.
За основу был взят тутор вот
здесь (спасибо тов.
JOHN’у)
Идея заключается в том, что саму комбинацию чисел по течению игры мы показываем на какой-нибудь супер-секретной панели, или на мониторе, или табличке, которую подберет игрок и т. д. Ну или придумайте сами отображатель кода. Далее по игре мы вводим код и дверь открывается (или что-нибудь происходит другое – по желанию). Потом в игре, допустим, образуется ситуация, что эта дверь закроется и сгенерируется другой код, но это тоже как хотите (или код будет периодически генерироваться через некоторый промежуток времени).
Пусть, мы хотим сделать пятизначный кодовый замок (напоминаю – количество цифр можно менять свободно). Создаем пять небольших брашей (func_brush), называем dig_1,dig_2… На одной стороне каждого из них должна быть сделана
переключающаяся текстура.
Вот так:
http://pixs.ru/showimage/panelgenjp_2403970_360275.jpg
Индексы у этой текстуры должны быть численно равны цифрам, отображаемым на этой текстуре, иначе ничего не получится.
Каждому брашу создаем env_texturetoggle, называем tt_1, tt_2… В свойстве target brush указываем соответствующие браши с текстурой цифр dig_1,dig_2…
Итак, отображающая панель готова
Далее создадим кнопочную панель и дверь примерно вот так:
http://pixs.ru/showimage/panelkeyjp_7603006_360279.jpg
Ну и самое интересное – логика и математика
Для панели нам понадобится энтити logic_relay, logic_case и два math_counter.
logic_relay называем relay_launcher_seq,
logic_case – case_main,
math_counter’ы – один counter_1, другой counter_comp.
настраивем аутпуты relay_launcher_seq:
http://xmages.net/upload/c68c5a56.jpg
(Пользуемся копированием, чтобы сэкономить время)
Для добавления еще одной цифры создаем еще один маленький браш, env_texturetoggle и добавляем 3 аутпута к relay_launcher_seq.
OnTrigger > counter_1 > AddOutput OutValue tt_6:SetTextureIndex::0:1 > 1.60
OnTrigger > case_main > PickRandom > > 1.70
OnTrigger > counter_comp > Multiply > 10 > 1.80
и таким образом добавляем сколько хотите цифр
Теперь настройки case_main:
Параметры:
http://xmages.net/upload/c487de83.jpg
Аутпуты:
http://xmages.net/upload/be565db9.jpg
Настраиваем counter_1. В свойствах все числовые значения ставим по нулям, в аутпутах пишем:
OutValue > counter_comp > Add
Теперь counter_comp:
Параметры:
Initial Value – 10
Min и Max по нулям.
Аутпут один:
OutValue > compare_code > SetValue
Теперь нужно создать кнопку, активирующую генератор кода:
Настройки аутпутов:
http://xmages.net/upload/5e7bdff3.jpg
Переходим к настройке кодовой панели:
Создадим энтити math_counter, имя – counter_dig и logic_compare, имя compare_code.
Кнопок должно быть 12 (как на рисунке) Каждая кнопка должна быть энтитей func_button.
У цифры 1 пишем аутпуты:
OnPressed > counter_dig > Add > 1
OnPressed > counter_dig > Multiply > 10 > 0.05
Соответственно у цифры 2 будут аутпуты:
OnPressed > counter_dig > Add > 2
OnPressed > counter_dig > Multiply > 10 > 0.05
…
Так до девятой кнопки.
Аутпут у нуля:
OnPressed > counter_dig > Multiply > 10 > 0.05
Аутпут у звездочки (она же сброс):
OnPressed > counter_dig > SetValue > 10
У решетки:
OnPressed > compare_code > Compare
У энтити counter_dig:
Initial Value – 10
Min Value – 0
Max Value – 10000000 (это число рассчитывается так: количество нулей после единицы = кол-во цифр кода + 2)
Аутпуты:
OnHitMax > counter_dig > SetValue > 10
OutValue > compare_code > SetCompareValue
У энтити compare_code:
Initial Value – 111111111 (кол-во единиц = число цифр кода + 3)
Compare Value – 0
Аутпуты:
OnEqualTo > door_secretlab_tracker > Open – открываем дверь или что-нибудь свое придумайте.
Ну вот как-то так… Наверное у вас сразу возникли вопросы: «Почему именно так?» и «Как оно работает?»
Как эта система работает? Да очень просто! Мы запускаем relay_launcher_seq любым способом (в моем случае рычагом). Добавляется аутпут счетчику (counter_1), который запустится один раз и включит цифру на первом браше панели после того как ему присвоят значение, а случайное значение этому счетчику даст case_main, после подачи инпута PickRandom. Засчет одноразовых аутпутов по очереди включаются все цифры.
Энтити counter_comp и counter_dig подают на logic_compare (compare_code) начальное значение и сравниваемое значение соответственно
В counter_comp и counter_dig значения передаются таким образом: начальное значение 10. Прибавляется цифра, например 2 (12) потом, умножаем на 10 (120) и т. д. (см. основу тутора)
Значения передаются в форме 1*0, * - это цифры кода
А начальное значение 10 для того, чтобы код мог начинаться с нуля.
В данном случае мы ставим у counter_dig максимальное значение 10000000, чтобы при переполнении, счетчик обнулялся, запуская аутпут OnHitMax. А число 10000000 ставим, потому что код пятизначный и получается передаваемый формат 1?????0, а при переполнении будет число 1?????00 и счетчик обнулится.
А у энтити compare_code Initial Value – 111111111 ставим чтобы снизить до нуля вероятность набора кода (число 111111111 просто не сможет передать ему счетчик – оно слишком большое).
Ну вот как-то так
; Если что непонятно, или есть замечания обязательно пишите.
Ссылка на пример
(папку d119_materials кидаем в materials; рычаг – закрытие двери и генерация кода)
Ссылка на тутор в doc
by x_AdvisoR_x
Чтобы предохранить глаза от утомления при длительной работе за компьютером, чаще делайте гимнастику для глаз:
и раз О_о
и два о_О
и три О_О
и на исходную о_о