// ***********************************************************************
// Assembly : Unity
// Author : Kimch
// Created : 2019-05-20
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
namespace G
{
using System.Collections.Generic;
using F;
using F.Item;
partial class ItemProxy
{
private const string EQUIPMENT_KEY = "equipments";
private const string PROP_KEY = "props";
private const string GEM_KEY = "gems";
///
/// 起始Id
///
private int _uniqueId = 0;
IItemGroup _propGroup;
IItemGroup _equipmentGroup;
IItemGroup _gemGroup;
//IItemGroup _skinGroup;
public int uniqueId
{
get
{
if (_uniqueId == 0)
{
int u_id = ArchiveProxy.Instance.GetInt(GlobalDefine.KEY_UNIQUE_ID);
_uniqueId = u_id > 0 ? u_id : int.MaxValue >> 1;
}
_uniqueId++;
ArchiveProxy.Instance.SetInt(GlobalDefine.KEY_UNIQUE_ID, _uniqueId);
return _uniqueId;
}
}
private void InitEntity()
{
_propGroup = this.GetOrAddEntityGroup();
_equipmentGroup = this.GetOrAddEntityGroup();
_gemGroup = this.GetOrAddEntityGroup();
//_skinGroup = this.GetOrAddEntityGroup();
}
private void LoadEntity()
{
KFramework.ItemManager.ClearAllEntityItems();
LoadProps();
LoadEquipments();
LoadGems();
//LoadSkins();
}
private void SaveEntity()
{
SaveProps();
SaveEquipments();
SaveGems();
//SaveSkins();
}
#region API
///
/// 创建新装备
///
///
///
public EntityItemEquipment NewEquipment(int itemId, int quality = 0)
{
var equipment = EntityItemEquipment.Create(uniqueId, itemId);
if (_equipmentGroup.AddItem(equipment))
{
equipment.GenerateAttributes(0, quality);
SaveAddEquipment(equipment);
MissionProxy.Instance.OnEvent(MissionProxy.装备累计获得_数量, 1, equipment.quality);
}
return equipment;
}
///
///
///
///
///
///
public EntityItemEquipment NewTemporaryEquipment(int itemId, int quality = 0)
{
var equipment = EntityItemEquipment.Create(-999, itemId);
equipment.GenerateAttributes(0, quality);
return equipment;
}
///
///
///
///
public void RemoveEquipment(EntityItemEquipment equipment)
{
if (equipment != null)
{
_equipmentGroup.RemoveItem(equipment);
SaveRemoveEquipment(equipment);
SaveEquipments();
}
}
///
///
///
///
///
public EntityItemEquipment GetEquipment(int id)
{
return id > 0 ? _equipmentGroup.GetItem(id) : null;
}
///
///
///
///
public IReadOnlyCollection GetEquipments()
{
return _equipmentGroup.GetItemCollection();
}
///
///
///
///
public int GetEquipmentCount()
{
return _equipmentGroup.count;
}
///
///
///
///
private void SaveAddEquipment(EntityItemEquipment equipment)
{
if (equipment != null)
{
equipment.Save();
SaveEquipments();
}
}
///
///
///
///
private void SaveRemoveEquipment(EntityItemEquipment equipment)
{
if (equipment != null)
{
equipment.Remove();
}
}
///
///
///
private void SaveEquipments()
{
var dataList = ArchiveProxy.Instance.GetIntList(EQUIPMENT_KEY);
if (dataList != null)
{
dataList.Clear();
foreach (var item in GetEquipments())
{
dataList.Add(item.id);
dataList.Add(item.itemId);
}
ArchiveProxy.Instance.SetIntList(EQUIPMENT_KEY, dataList);
}
}
///
///
///
private void LoadEquipments()
{
var dataList = ArchiveProxy.Instance.GetIntList(EQUIPMENT_KEY);
if (dataList != null && dataList.Count > 0)
{
for (int i = 0, c = dataList.Count - 1; i < c; i += 2)
{
int id = dataList[i];
int itemId = dataList[i + 1];
if (id > 0 && itemId > 0)
{
var item = GetStaticItem(itemId);
if (item != null)
{
var equipment = EntityItemEquipment.Create(id, itemId);
if (_equipmentGroup.AddItem(equipment))
{
equipment.Load();
}
}
else
{
var convertItem = GetStaticItem(itemId);
if (convertItem != null)
{
var equipment = EntityItemEquipment.Create(id, convertItem.newId);
if (_equipmentGroup.AddItem(equipment))
{
equipment.Load();
}
}
else
EntityItemEquipment.RemoveEquipment(id);
}
}
}
}
}
/////////////////////////////////////////////////////
public EntityItemProp NewProp(int itemId, int count)
{
var prop = _propGroup.GetItem(itemId);
if (prop == null)
{
prop = EntityItemProp.Create(itemId);
_propGroup.AddItem(prop);
}
prop.count += count;
SaveProps();
return prop;
}
///
///
///
///
///
public void AddProp(int itemId, int count)
{
var prop = _propGroup.GetItem(itemId);
if (prop == null)
{
prop = EntityItemProp.Create(itemId);
_propGroup.AddItem(prop);
}
prop.count += count;
SaveProps();
}
///
///
///
///
///
public void SetPropCount(int itemId, int count)
{
var prop = _propGroup.GetItem(itemId);
if (prop == null)
{
prop = EntityItemProp.Create(itemId);
_propGroup.AddItem(prop);
}
prop.count = count;
SaveProps();
}
///
///
///
///
///
public EntityItemProp GetProp(int id)
{
if (id > 0)
{
var prop = _propGroup.GetItem(id);
if (prop == null)
{
prop = EntityItemProp.Create(id);
_propGroup.AddItem(prop);
}
return prop;
}
return null;
}
public int GetPropCount(int id)
{
if (id > 0)
{
return ArchiveProxy.Instance.GetInt(id);
}
return 0;
}
///
///
///
///
public IReadOnlyCollection GetProps()
{
return _propGroup?.GetItemCollection();
}
///
///
///
private void SaveProps()
{
//var pList = ArchiveProxy.Instance.GetIntList(PROP_KEY);
//if (pList == null)
//{
// pList = new List();
//}
//else
//{
// pList.Clear();
//}
//foreach (var item in GetProps())
//{
// pList.Add(item.id);
// pList.Add(item.count);
//}
//ArchiveProxy.Instance.SetIntList(PROP_KEY, pList);
}
///
///
///
private void LoadProps()
{
var propItems = GetStaticItems();
foreach (var propItem in propItems)
{
int type = propItem.type;
if (type == 2 || type == 8)
{
var prop = EntityItemProp.Create(propItem.id);
if (_propGroup.AddItem(prop))
{
}
}
}
//var pList = ArchiveProxy.Instance.GetIntList(PROP_KEY);
//if (pList != null)
//{
// for (int i = 0; i < pList.Count; i += 2)
// {
// int id = pList[i];
// int count = pList[i + 1];
// var prop = EntityItemProp.Create(id, id);
// if (_propGroup.AddItem(prop))
// {
// prop.count = count;
// }
// }
//}
}
#region Gem
///
///
///
///
///
///
public EntityItemGem NewGem(int itemId, int count)
{
var gem = _gemGroup.GetItem(itemId);
if (gem == null)
{
gem = EntityItemGem.Create(itemId);
_gemGroup.AddItem(gem);
}
gem.count += count;
SaveGems();
return gem;
}
///
///
///
///
///
public EntityItemGem NewTemporaryGem(int itemId)
{
var gem = EntityItemGem.Create(itemId, itemId);
return gem;
}
///
///
///
///
///
public void SetGemCount(int itemId, int count)
{
var gem = _gemGroup.GetItem(itemId);
if (gem == null)
{
gem = EntityItemGem.Create(itemId);
_gemGroup.AddItem(gem);
}
gem.count = count;
SaveGems();
MissionProxy.Instance.OnEvent(MissionProxy.累计获得宝石);
}
///
///
///
///
///
public EntityItemGem AddGem(int itemId, int count)
{
var gem = _gemGroup.GetItem(itemId);
if (gem == null)
{
gem = EntityItemGem.Create(itemId);
_gemGroup.AddItem(gem);
}
gem.count += count;
SaveGems();
MissionProxy.Instance.OnEvent(MissionProxy.累计获得宝石);
return gem;
}
///
///
///
///
///
public EntityItemGem GetGem(int id)
{
if (id > 0)
{
var gem = _gemGroup.GetItem(id);
if (gem == null)
{
gem = EntityItemGem.Create(id);
_gemGroup.AddItem(gem);
}
return gem;
}
return null;
}
///
///
///
///
public IReadOnlyCollection GetGems()
{
return _gemGroup?.GetItemCollection();
}
///
///
///
private void SaveGems()
{
//var dataList = ArchiveProxy.Instance.GetIntList(GEM_KEY);
//if (dataList != null)
//{
// dataList.Clear();
// foreach (var item in GetGems())
// {
// dataList.Add(item.id);
// dataList.Add(item.count);
// }
// ArchiveProxy.Instance.SetIntList(GEM_KEY, dataList);
//}
}
///
///
///
private void LoadGems()
{
var gemItems = GetStaticItems();
foreach (var gemItem in gemItems)
{
var gem = EntityItemGem.Create(gemItem.id);
if (_gemGroup.AddItem(gem))
{
}
}
//var dataList = ArchiveProxy.Instance.GetIntList(GEM_KEY);
//if (dataList != null && dataList.Count > 0)
//{
// for (int i = 0, c = dataList.Count - 1; i < c; i += 2)
// {
// int id = dataList[i];
// int count = dataList[i + 1];
// var gem = EntityItemGem.Create(id, id);
// if (_gemGroup.AddItem(gem))
// {
// gem.count = count;
// }
// }
//}
}
#endregion
#region Skin
//public EntityItemSkin GetSkin(int id)
//{
// if (id > 0)
// {
// var skin = _skinGroup.GetItem(id);
// if (skin == null)
// {
// skin = EntityItemSkin.Create(id);
// _skinGroup.AddItem(skin);
// }
// return skin;
// }
// return null;
//}
//public IReadOnlyCollection GetSkins()
//{
// return _skinGroup?.GetItemCollection();
//}
//private void LoadSkins()
//{
// var skinItems = GetStaticItems();
// foreach (var skinItem in skinItems)
// {
// var skin = EntityItemSkin.Create(skinItem.id);
// if (_skinGroup.AddItem(skin))
// {
// }
// }
//}
//private void SaveSkins()
//{
//}
#endregion
///
/// 获取实体
///
///
///
public EntityItem GetEntityItem(int id)
{
return KFramework.ItemManager.GetEntityItem(id) as EntityItem;
}
///
///
///
///
public void RemoveEntityItem(EntityItem entityItem)
{
if (entityItem is EntityItemEquipment equipment)
{
RemoveEquipment(equipment);
}
}
#endregion
#region ProxyMethod
private void AddEntityGroup() where TEntity : class, IItem
{
var fullName = Utils.Text.GetFullName();
KFramework.ItemManager.AddEntityGroup(fullName, out var result);
}
///
///
///
///
///
private IItemGroup GetOrAddEntityGroup() where TEntity : class, IItem
{
var fullName = Utils.Text.GetFullName();
var group = KFramework.ItemManager.GetGroup(fullName);
if (group == null)
{
KFramework.ItemManager.AddEntityGroup(fullName, out group);
}
return group;
}
private IReadOnlyCollection GetAllEntityItems() where TEntity : class, IItem
{
var fullName = Utils.Text.GetFullName();
return KFramework.ItemManager.GetEnityItems(fullName);
}
private TEntity GetEntityItem(int id) where TEntity : class, IItem
{
return KFramework.ItemManager.GetEntityItem(id) as TEntity;
}
#endregion
}
}