// *********************************************************************** // 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 } }