thewar_client/Client/Assets/1_Script/System/ItemManager.cs

194 lines
5.2 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using static UnityEditor.Progress;
public class ItemManager
{
public ItemBox box;
public ItemManager(List<DeckUnitInfo> deckUnitInfo, List<Equipment> equipment, List<ConsumableItem> consumableItem, List<EtcItem> etcItem)
{
box = new ItemBox(deckUnitInfo, equipment, consumableItem, etcItem);
}
}
public class ItemBox
{
List<DeckUnitInfo> _deckUnitInfo;
public List<DeckUnitInfo> deckUnitInfo { get { return _deckUnitInfo; } }
List<Equipment> _equipment;
public List<Equipment> equipment { get { return _equipment; } }
List<ConsumableItem> _consumableItem;
public List<ConsumableItem> consumableItem { get { return _consumableItem; } }
List<EtcItem> _etcItem;
public List<EtcItem> etcItem { get { return _etcItem; } }
public ItemBox(List<DeckUnitInfo> deckUnitInfo, List<Equipment> equipment, List<ConsumableItem> consumableItem, List<EtcItem> etcItem)
{
//아이템 세팅
if (deckUnitInfo == null)
_deckUnitInfo = new List<DeckUnitInfo>();
else
_deckUnitInfo = deckUnitInfo.OrderBy(n => n.unit_data_id).ToList();
if (equipment == null)
_equipment = new List<Equipment>();
else
_equipment = equipment.OrderBy(n => n.id).ToList();
if (consumableItem == null)
_consumableItem = new List<ConsumableItem>();
else
_consumableItem = consumableItem.OrderBy(n => n.id).ToList();
if (etcItem == null)
_etcItem = new List<EtcItem>();
else
_etcItem = etcItem.OrderBy(n => n.id).ToList();
//유닛 경험치 세팅
foreach(DeckUnitInfo item in _deckUnitInfo)
{
UpdateUnitSpec(item);
}
}
/// <summary>
/// 유닛 스팩 업데이트
/// </summary>
public void UpdateUnitSpec(DeckUnitInfo unit)
{
long saveExp = unit.exp;
long defaultExp = 1024;
long saveCount = unit.count;
long defaultCount = 4;
int level = 1;
int rating = 0;
while(saveExp > defaultExp)
{
saveExp -= defaultExp;
defaultExp = (long)(1.2f * defaultExp);
level++;
}
while (saveCount > defaultCount)
{
saveCount -= defaultCount;
defaultCount = 2 * defaultCount;
rating++;
}
unit.Update(saveExp, level, saveCount, rating);
}
/// <summary>
/// 유닛 반환
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public DeckUnitInfo FindDeckUnitInfo(long id)
{
return _deckUnitInfo.Find(n => n.id == id);
}
/// <summary>
/// 유닛 index반환
/// </summary>
/// <param name="unit_data_id"></param>
/// <returns></returns>
public int FindIndexDeckUnitInfo(long unit_data_id)
{
return _deckUnitInfo.FindIndex(n => n.unit_data_id == unit_data_id);
}
/// <summary>
/// 장비 아이탬 반환
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public Equipment FindEquipment(long id)
{
return _equipment.Find(n => n.id == id);
}
public ConsumableItem FindConsumableItemId(long id)
{
return _consumableItem.Find(n => n.id == id);
}
public ConsumableItem FindConsumableItemDataId(long dataId)
{
return _consumableItem.Find(n => n.consumable_item_data_id == dataId);
}
public EtcItem FindEtcItem(long id)
{
return _etcItem.Find(n => n.id == id);
}
/// <summary>
/// 유닛 업데이트
/// </summary>
/// <param name="item"></param>
public void UpdateDeckUnitInfo(DeckUnitInfo item)
{
UpdateUnitSpec(FindDeckUnitInfo(item.id).Update(item));
}
/// <summary>
/// 장비 업데이트
/// </summary>
/// <param name="item"></param>
public void UpdateEquipment(Equipment item)
{
FindEquipment(item.id).Update(item);
}
public void add(DeckUnitInfo item)
{
//유닛은 겹칠일이 없기때문에 그냥 추가
_deckUnitInfo.Add(item);
}
public void add(List<DeckUnitInfo> items)
{
//유닛은 겹칠일이 없기때문에 그냥 추가
_deckUnitInfo.AddRange(items);
}
public void add(Equipment item)
{
//장비 아이탬은 겹칠일이 없기때문에 그냥 추가
_equipment.Add(item);
}
public void add(List<Equipment> items)
{
//장비 아이탬은 겹칠일이 없기때문에 그냥 추가
_equipment.AddRange(items);
}
public void add(ConsumableItem item)
{
ConsumableItem select = FindConsumableItemId(item.id);
if (select != null)
select.count += item.count;
else
_consumableItem.Add(item);
}
public void add(List<ConsumableItem> items)
{
foreach (ConsumableItem item in items)
add(item);
}
public void add(EtcItem item)
{
EtcItem select = FindEtcItem(item.id);
if (select != null)
select.count += item.count;
else
_etcItem.Add(item);
}
public void add(List<EtcItem> items)
{
foreach (EtcItem item in items)
add(item);
}
}