Я пользуюсь сторонней системой инвентаря которую дописал под свои нужды. У меня есть класс патронов, который содержит кол-во патронов и тип "string" для сортировки по глобальным переменным (если string "7х62" то плюсовать к int ak_ammo и т.д.). В чем сложность... Допустим у меня в инвентаре находится два класса в которых одинаковое количество патронов. Мне нужно перезарядить оружие и если в первом классе недостаточно патронов, то перейти ко второму и вычесть с него необходимое кол-во а первый удалить из списка. Я пытался реализовать всё это дело через листы, но насколько я понял, оперировать полями через них очень трудно...
Основные проблемы такие:
1) Как лучше объеденить все классы патронов. Через что ими оперировать? Массивы не дают гибкого контроля, а с листами пока особо не сталкивался и до конца их не понял.
2) Как дать понять скрипту какую пачку выбрать первой и как перейти ко второй.
Если кто-то работал над чем-то подобным или может подсказать направление, то ваше мнение будет очень полезным для меня. Ниже не рабочий кусок кода, который как-то описывает мою модель.
Спасибо за прочтение!
Синтаксис:
Используется csharp
public class AmmoGraber : MonoBehaviour {
public int akCurrentCapacity;
public int akMaxCapacity;
public int akAmmo;
public Ammo[] mainArray;
public Ammo[] ammoArray;
private void Update()
{
SearchAmmo();
}
void SearchAmmo()
{
for (int i = 0; i < mainArray.Length; i++)
{
if(mainArray[i].tag == "ak")
{
ammoArray[0] = mainArray[i];
}
}
}
void Reload()
{
while(akCurrentCapacity < akMaxCapacity && ammoArray!=null)
{
var arrayCounter = 0;
if (ammoArray[arrayCounter].ammo > 0)
akCurrentCapacity += 1;
else
ammoArray[arrayCounter] = null;
arrayCounter++;
}
}
}
public int akCurrentCapacity;
public int akMaxCapacity;
public int akAmmo;
public Ammo[] mainArray;
public Ammo[] ammoArray;
private void Update()
{
SearchAmmo();
}
void SearchAmmo()
{
for (int i = 0; i < mainArray.Length; i++)
{
if(mainArray[i].tag == "ak")
{
ammoArray[0] = mainArray[i];
}
}
}
void Reload()
{
while(akCurrentCapacity < akMaxCapacity && ammoArray!=null)
{
var arrayCounter = 0;
if (ammoArray[arrayCounter].ammo > 0)
akCurrentCapacity += 1;
else
ammoArray[arrayCounter] = null;
arrayCounter++;
}
}
}