2025-05-18 01:04:31 +08:00

623 lines
14 KiB
C#

// ***********************************************************************
// Assembly : Unity
// Author : Kimch
// Created : 2019-05-20
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "ItemProxy" company="Kunpo"></copyright>
// <summary></summary>
// ***********************************************************************
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";
/// <summary>
/// 起始Id
/// </summary>
private int _uniqueId = 0;
IItemGroup<EntityItemProp> _propGroup;
IItemGroup<EntityItemEquipment> _equipmentGroup;
IItemGroup<EntityItemGem> _gemGroup;
//IItemGroup<EntityItemSkin> _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<EntityItemProp>();
_equipmentGroup = this.GetOrAddEntityGroup<EntityItemEquipment>();
_gemGroup = this.GetOrAddEntityGroup<EntityItemGem>();
//_skinGroup = this.GetOrAddEntityGroup<EntityItemSkin>();
}
private void LoadEntity()
{
KFramework.ItemManager.ClearAllEntityItems();
LoadProps();
LoadEquipments();
LoadGems();
//LoadSkins();
}
private void SaveEntity()
{
SaveProps();
SaveEquipments();
SaveGems();
//SaveSkins();
}
#region API
/// <summary>
/// 创建新装备
/// </summary>
/// <param name="itemId"></param>
/// <returns></returns>
public EntityItemEquipment NewEquipment(int itemId, int quality = 0)
{
var equipment = EntityItemEquipment.Create<EntityItemEquipment>(uniqueId, itemId);
if (_equipmentGroup.AddItem(equipment))
{
equipment.GenerateAttributes(0, quality);
SaveAddEquipment(equipment);
MissionProxy.Instance.OnEvent(MissionProxy._数量, 1, equipment.quality);
}
return equipment;
}
/// <summary>
///
/// </summary>
/// <param name="itemId"></param>
/// <param name="quality"></param>
/// <returns></returns>
public EntityItemEquipment NewTemporaryEquipment(int itemId, int quality = 0)
{
var equipment = EntityItemEquipment.Create<EntityItemEquipment>(-999, itemId);
equipment.GenerateAttributes(0, quality);
return equipment;
}
/// <summary>
///
/// </summary>
/// <param name="equipment"></param>
public void RemoveEquipment(EntityItemEquipment equipment)
{
if (equipment != null)
{
_equipmentGroup.RemoveItem(equipment);
SaveRemoveEquipment(equipment);
SaveEquipments();
}
}
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public EntityItemEquipment GetEquipment(int id)
{
return id > 0 ? _equipmentGroup.GetItem(id) : null;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public IReadOnlyCollection<EntityItemEquipment> GetEquipments()
{
return _equipmentGroup.GetItemCollection();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public int GetEquipmentCount()
{
return _equipmentGroup.count;
}
/// <summary>
///
/// </summary>
/// <param name="equipment"></param>
private void SaveAddEquipment(EntityItemEquipment equipment)
{
if (equipment != null)
{
equipment.Save();
SaveEquipments();
}
}
/// <summary>
///
/// </summary>
/// <param name="equipment"></param>
private void SaveRemoveEquipment(EntityItemEquipment equipment)
{
if (equipment != null)
{
equipment.Remove();
}
}
/// <summary>
///
/// </summary>
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);
}
}
/// <summary>
///
/// </summary>
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<ItemEquipment>(itemId);
if (item != null)
{
var equipment = EntityItemEquipment.Create<EntityItemEquipment>(id, itemId);
if (_equipmentGroup.AddItem(equipment))
{
equipment.Load();
}
}
else
{
var convertItem = GetStaticItem<ItemConvert>(itemId);
if (convertItem != null)
{
var equipment = EntityItemEquipment.Create<EntityItemEquipment>(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<EntityItemProp>(itemId);
_propGroup.AddItem(prop);
}
prop.count += count;
SaveProps();
return prop;
}
/// <summary>
///
/// </summary>
/// <param name="itemId"></param>
/// <param name="count"></param>
public void AddProp(int itemId, int count)
{
var prop = _propGroup.GetItem(itemId);
if (prop == null)
{
prop = EntityItemProp.Create<EntityItemProp>(itemId);
_propGroup.AddItem(prop);
}
prop.count += count;
SaveProps();
}
/// <summary>
///
/// </summary>
/// <param name="itemId"></param>
/// <param name="count"></param>
public void SetPropCount(int itemId, int count)
{
var prop = _propGroup.GetItem(itemId);
if (prop == null)
{
prop = EntityItemProp.Create<EntityItemProp>(itemId);
_propGroup.AddItem(prop);
}
prop.count = count;
SaveProps();
}
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public EntityItemProp GetProp(int id)
{
if (id > 0)
{
var prop = _propGroup.GetItem(id);
if (prop == null)
{
prop = EntityItemProp.Create<EntityItemProp>(id);
_propGroup.AddItem(prop);
}
return prop;
}
return null;
}
public int GetPropCount(int id)
{
if (id > 0)
{
return ArchiveProxy.Instance.GetInt(id);
}
return 0;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public IReadOnlyCollection<EntityItemProp> GetProps()
{
return _propGroup?.GetItemCollection();
}
/// <summary>
///
/// </summary>
private void SaveProps()
{
//var pList = ArchiveProxy.Instance.GetIntList(PROP_KEY);
//if (pList == null)
//{
// pList = new List<int>();
//}
//else
//{
// pList.Clear();
//}
//foreach (var item in GetProps())
//{
// pList.Add(item.id);
// pList.Add(item.count);
//}
//ArchiveProxy.Instance.SetIntList(PROP_KEY, pList);
}
/// <summary>
///
/// </summary>
private void LoadProps()
{
var propItems = GetStaticItems<ItemProp>();
foreach (var propItem in propItems)
{
int type = propItem.type;
if (type == 2 || type == 8)
{
var prop = EntityItemProp.Create<EntityItemProp>(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<EntityItemProp>(id, id);
// if (_propGroup.AddItem(prop))
// {
// prop.count = count;
// }
// }
//}
}
#region Gem
/// <summary>
///
/// </summary>
/// <param name="itemId"></param>
/// <param name="count"></param>
/// <returns></returns>
public EntityItemGem NewGem(int itemId, int count)
{
var gem = _gemGroup.GetItem(itemId);
if (gem == null)
{
gem = EntityItemGem.Create<EntityItemGem>(itemId);
_gemGroup.AddItem(gem);
}
gem.count += count;
SaveGems();
return gem;
}
/// <summary>
///
/// </summary>
/// <param name="itemId"></param>
/// <returns></returns>
public EntityItemGem NewTemporaryGem(int itemId)
{
var gem = EntityItemGem.Create<EntityItemGem>(itemId, itemId);
return gem;
}
/// <summary>
///
/// </summary>
/// <param name="itemId"></param>
/// <param name="count"></param>
public void SetGemCount(int itemId, int count)
{
var gem = _gemGroup.GetItem(itemId);
if (gem == null)
{
gem = EntityItemGem.Create<EntityItemGem>(itemId);
_gemGroup.AddItem(gem);
}
gem.count = count;
SaveGems();
MissionProxy.Instance.OnEvent(MissionProxy.);
}
/// <summary>
///
/// </summary>
/// <param name="itemId"></param>
/// <param name="count"></param>
public EntityItemGem AddGem(int itemId, int count)
{
var gem = _gemGroup.GetItem(itemId);
if (gem == null)
{
gem = EntityItemGem.Create<EntityItemGem>(itemId);
_gemGroup.AddItem(gem);
}
gem.count += count;
SaveGems();
MissionProxy.Instance.OnEvent(MissionProxy.);
return gem;
}
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public EntityItemGem GetGem(int id)
{
if (id > 0)
{
var gem = _gemGroup.GetItem(id);
if (gem == null)
{
gem = EntityItemGem.Create<EntityItemGem>(id);
_gemGroup.AddItem(gem);
}
return gem;
}
return null;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public IReadOnlyCollection<EntityItemGem> GetGems()
{
return _gemGroup?.GetItemCollection();
}
/// <summary>
///
/// </summary>
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);
//}
}
/// <summary>
///
/// </summary>
private void LoadGems()
{
var gemItems = GetStaticItems<ItemGem>();
foreach (var gemItem in gemItems)
{
var gem = EntityItemGem.Create<EntityItemGem>(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<EntityItemGem>(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<EntityItemSkin>(id);
// _skinGroup.AddItem(skin);
// }
// return skin;
// }
// return null;
//}
//public IReadOnlyCollection<EntityItemSkin> GetSkins()
//{
// return _skinGroup?.GetItemCollection();
//}
//private void LoadSkins()
//{
// var skinItems = GetStaticItems<ItemChaSkin>();
// foreach (var skinItem in skinItems)
// {
// var skin = EntityItemSkin.Create<EntityItemSkin>(skinItem.id);
// if (_skinGroup.AddItem(skin))
// {
// }
// }
//}
//private void SaveSkins()
//{
//}
#endregion
/// <summary>
/// 获取实体
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public EntityItem GetEntityItem(int id)
{
return KFramework.ItemManager.GetEntityItem(id) as EntityItem;
}
/// <summary>
///
/// </summary>
/// <param name="entityItem"></param>
public void RemoveEntityItem(EntityItem entityItem)
{
if (entityItem is EntityItemEquipment equipment)
{
RemoveEquipment(equipment);
}
}
#endregion
#region ProxyMethod
private void AddEntityGroup<TEntity>() where TEntity : class, IItem
{
var fullName = Utils.Text.GetFullName<TEntity>();
KFramework.ItemManager.AddEntityGroup<TEntity>(fullName, out var result);
}
/// <summary>
///
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <returns></returns>
private IItemGroup<TEntity> GetOrAddEntityGroup<TEntity>() where TEntity : class, IItem
{
var fullName = Utils.Text.GetFullName<TEntity>();
var group = KFramework.ItemManager.GetGroup<TEntity>(fullName);
if (group == null)
{
KFramework.ItemManager.AddEntityGroup(fullName, out group);
}
return group;
}
private IReadOnlyCollection<TEntity> GetAllEntityItems<TEntity>() where TEntity : class, IItem
{
var fullName = Utils.Text.GetFullName<TEntity>();
return KFramework.ItemManager.GetEnityItems<TEntity>(fullName);
}
private TEntity GetEntityItem<TEntity>(int id) where TEntity : class, IItem
{
return KFramework.ItemManager.GetEntityItem(id) as TEntity;
}
#endregion
}
}