Yuryol
АБС. 7-ая переделка
понемногу прихожу в себя, а потому после двухмесячного "почти-перерыва" возвращаюсь
[spoiler=старый больной человек]
пока выходные, спина успокоилась, обнаружил, что качать пресс на турнике довольно безопасно для позвонков.
зубная боль не чувствуется если съешь мандаринки, чеснок или алкоголь.
нервы не защемляет пока дома
[/spoiler]
[size=5]Смена оружия[/size]
Решил добавить второе оружие и понял, что мои функции никуда не годятся, хотя три месяца назад казалось обратное. Вновь переписал "модуль" смены оружия, теперь он позволяет менять не только оружие, но и броню, вещи и скиллы
[LIST=1][*]Добавил элемент equip в объект [b]$gameParty[/b]
[*]Сейчас все "экипированные" элементы сохраняю в нем. На данный момент это
[LIST][*]Оружия, хранящиеся в [b]$gameParty.equip.weapons[/b][*]Броня, хранящиеся в [b]$gameParty.equip.armors[/b][*]Вещи, хранящиеся в [b]$gameParty.equip.items[/b][*]Скиллы, хранящиеся в [b]$gameParty.equip.skills[/b][/LIST]
[*]Для универсальности функций вместо проверок в духе [b]if ('armors') $gameParty.equip.armors[/b] гораздо удобнее возвращать массив через [b]$gameParty.equip['armors'][/b] . Вроде мелочь, но позволяет избавить от кучи if или от ненавистных мне switch-ей
[*] Подобное очень удобно и для [b]$dataItems, $dataWeapons[/b]. Однако записи по типу [b]['$dataWeapons'][/b] возвращают массив с элементом строку в нем. Спасибо dmy, благодаря нему допер, что глобальный объект надо вызывать через [b]window['$dataWeapons'][/b].
Теперь вместо
[php]if (element = 'items') data = $dataItems;
if (element = 'weapons') data = $dataWeapons;
if (element = 'armors') data = $dataArmors;
if (element = 'skills') data = $dataSkills;[/php]
Или свитча
[php]switch = (element) {
case 'items':
data = $dataItems;
break;
case 'weapons':
data = $dataWeapons;
break;
case 'armors':
data = $dataArmors;
break;
case 'skills':
data = $dataSkills;
break;
}[/php]
достаточно написать:
[code type=javascript]data = '$data'+element [0].toUpperCase() + element .substring(1);
data = window[data][/code]
[*]Еще одна проблема: не нашел стандартной функции, возвращающей список ВСЕХ оружий. Есть отдельная функция для возврата оружия в инвентаре:
[b]$gameParty.weapons()[/b]
Есть стандартная функция для возврата экипированного оружия:
[b]$gameParty.leader().equips()[0][/b]
Эти функции не пересекаюся. То есть если у вас два оружия и первое экипировано, то первая функция возвратит неэкипированное оружие, а вторая - экипированное.
Решается всё довольно простым методом [b]concat[/b]:
[b]$gameParty.weapons().concat($gameParty.leader().equips()[0])[/b]
то есть к оружию в инвентаре добавляется оружие из экипировки
[*]Предыдущий метод возвращает нам массив, в котором экипированное оружие ставится в конце, поэтому нам требуется отсортировать полученный в предыдущем шаге массив через метод [b]sort[/b] по ID оружия (arr - массив из предыдущего шага)
[php]arr.sort((a, b) => {
return a.id - b.id;
});[/php][/LIST]
[size=5]Итого[/size]
Таким образом достиг 7-ого левела в программировании, ибо уже 7-ой раз переписываю свою АБС *facepalm*
- переписываю полностью на ES6 (в прошлой версии было на процентов 60);
- стараюсь не сильно дробить функции. В прошлой версии из-за функций из двух строчек модуль расползался значительно, что затрудняло отладку. Теперь дроблю только при проверках, а к примеру различные циклы не выношу отдельно благодаря стрелочным функциям.
[size=5]Что добавлено:[/size]
[LIST=1][*]Использование предметов и скиллов. Теперь Прыжок, бег или телепорт не надо выносить на отдельную кнопку. Надо добавить его в скилл, "экипировать" его и затем уже использовать через кнопку скилла
[*]При этом можно назначить тот же самый телепорт и на отдельную кнопку
[*]Теперь управление на геймпаде примерно такое
[spoiler=тык][img]http://ipic.su/img/img7/fs/depositphotos_130238712-stock-illustration-gamepad-simple-icon.1546732332.jpg[/img][/spoiler]
[LIST][*]Смена оружия достигается через левый нижний шифт + кнопка выстрела/использования предмета или скилла[*]Альтернативное оружие стреляет через верхний нижний шифт + кнопка выстрела[*]Также смену оружия и второго оружия можно настроить на стики[*]Альтернативное оружие стреляет через верхний нижний шифт + кнопка выстрела[*]На клавиатуре смена оружия-предметов-скиллов на Q,W,E,R, а использование,выстрел оружия-предметов-скиллов на A,S,D,F[*]Для бега на геймпаде не выделено кнопки, так как бегать можно через двойное нажатие стрелки[/list]
[/list]