Система инвентарь для экшена, функции и алгоритм, а также 2Д алгоритм))
Е = поднять оружие, поднимает стрелковое оружие, если нет стрелкового оружия записывается в слот 1, если слот 1 занят то записывается в слот 2, если слот 2 занят записывается
в слот 3, если и он занят, то текущее оружие выбрасывается, освобождается текущий слот, берется новое оружие в текущий слот.
F = выбросить, выбрасывает текущее оружие, освобождает текущий слот, автоматически экипирует оружие из доступного слота - (1,2,3, метательное, гранаты)
LeftMouseClick = метнуть или стрельнуть, автоматически экипирует следующее метательное или гранаты если кончились снаряды у текущего оружия, если нет доступного метательного, экипирует основное оружие из слота (1-3)
1 = Выбрать оружие в слоте 1
2 = Выбрать оружие в слоте 2
3 = Выбрать оружие в слоте 3
4 = переключает метательное оружие, если нет метательного переключает гранаты
5 = переключает гранаты, если нет гранат переключает метательное
Автоматический подбор
Гранаты и метательное экипируются автоматически если нет никакого оружия, также автоматически берутся в инвентарь, патроны также автоматически берутся в инвентарь
Общая система, все объекты класса актор, предметы которые берутся автоматически имеют коллизию avtoequip и подымаются(если есть место в инвентаре) с помощью оверлапа, и есть основное оружие, коллизия которого реагирует на лайнтрэйс(E), также все объекты имеют свой индекс, точнее они с помощью интерфейса записывают в переменную MyCharactera -IndeteficationWeapon свое значение, так и определяется объект и что с ним можно делать. Гранаты имеют индекс 0-3, метательное 4-6, основное оружие от 7 и выше, если нужно добавить новое основное оружие, то для этого придется сделать дубликат любого основного оружия, записать значения нового индекса в массив(максимальное количество в обойме) и в массиве (максимальное количество патронов в инвентаре), ну и собственно заменить меш, код подхватит новый актор без проблем, к сожалению для гранат и метательного так не получится, даже добавив всего одно метательное, придется переиндексировать весь код и
указать новые диапазоны, к счастью времени у меня это занимает не более 10 минут, алгоритм поиска будет работать с новыми диапазонами без проблем.
Патроны имеют точно такой же индекс как и то оружие к которому они относятся.
Как все работает объяснять очень долго, но самое основное это переменная IndeteficationWeapon, с помощью ее осуществляю 99% функций.
Хочу поделится системой перезарядки, вот в кратце как она работает,
Есть массив "инвентарь"
Есть массив "максимальное количество в обойме"
Я обращаюсь к элементам этих массивам с помощью IndeteficationWeapon, и дальше по формуле.
M = максимальное кол-во в обойме
W = количество патронов в инвентаре
С = текущие патроны
Считаем по формуле
X = M - C (сколько нужно прибавить патронов)
Y = W - M
Z = Y - X + M (сколько должно остаться в инвентаре)
С + X = (сколько должно быть в обойме)
Эта формула не совершенна и дает отрицательный результат если в инвентаре недостаточно патронов,
поэтому при отрицательном значении добавляется это - С = W + C, W = 0 и ставим условие для отслеживания отрицательного результата.
Вот так это все выглядит у меня в коде
если мне понадобится добавить новое оружие с максимальным количеством патронов 20, я ему присвою например индекс 12 и мне нужно указать в массиве "максимальное количество в обойме" в индексе 12 значение 20, перезарядка будет работать.
99% кода на этом скрине
Видео -
https://youtu.be/LXvCJY82CP4Видео2 -
https://youtu.be/ugFYg7VHGOQЧто бы поиграть -
https://yadi.sk/d/vk8z8JNWkprFup.s. следующий проект который я выложу на обозрение, будет готовая на 100% игра.