public BagData GetBagDataFromBag(Bag bag, BagData bagData) { for (int i = 0; i < bag.Slots.Count; i++) { if (!bag.Slots[i].IsEmpty) { Item item = bag.Slots[i].Item; ItemData itemData = new ItemData(); itemData.Set(item.Name, item.Count, i); //名子數量位置 if (item is Bag) { Bag itemBag = item as Bag; itemData.SetBagData(new BagData(itemBag.Name, 0, new List <ItemData>())); BagData itemBagData = GetBagDataFromBag(itemBag, itemData.BagData); } bagData.ItemDatas.Add(itemData); } } return(bagData); }
static public void UpdateBag(ArrayList list) { datas = new ArrayList(); datas = list; BagData.SaveData("BagDatas.sav"); }
/// <summary> /// 拾取道具,向背包内添加物品 /// </summary> /// <param name="item">新增物品的数据</param> public static void AddItem(BagData item) { //如果背包已经满了 if (BagCtrl.bagItemAcount <= BagsList.FindAll(e => e.GetComponent <ItemCtrl>().BagData.ItemPositon == TagType.BagTag && e.GetComponent <ItemCtrl>().BagData.ResourceID != null).Count) { return; } //指定物品添加的位置 if (item.ItemPositon == null) { item.ItemPositon = TagType.BagTag; } //从背包中找到第一个空格进行赋值 int i = 0; foreach (var lastitem in BagsList) { if (lastitem.GetComponent <ItemCtrl>().BagData.ItemPositon == TagType.BagTag && lastitem.GetComponent <ItemCtrl>().BagData.ResourceID == null)//找到数据层背包里第一个空白的物体进行赋值 { BagData[i] = item; lastitem.GetComponent <ItemCtrl>().BagData = BagData[i]; lastitem.GetComponent <ItemCtrl>().LoadTextrue(); break; } i++; } }
public Bag GetBagFromBagData(Bag bag, BagData bagData) { Inventory inventory = Inventory.Instance; BagSetting bagSetting = bag.ItemSetting as BagSetting; for (int i = 0; i < bagSetting.SlotCount; i++) { Slot slot = Instantiate(inventory.slotItmePrefab, bag.transform).GetComponent <Slot>(); bag.Slots.Add(slot); } foreach (ItemData itemData in bagData.ItemDatas) { ItemSetting itemSetting = GetItemFromDataBase(itemData.Name); if (itemSetting is BagSetting) { Bag itemBag = Instantiate(inventory.bagItemPrefab).GetComponent <Bag>(); itemBag.ItemSetting = GetItemFromDataBase(itemData.BagData.Name); itemBag = GetBagFromBagData(itemBag, itemData.BagData); bag.Slots[itemData.Index].Item = itemBag; itemBag.transform.SetParent(bag.Slots[itemData.Index].transform); } else { Item item = Instantiate(inventory.itemPrefab).GetComponent <Item>(); item.ItemSetting = itemSetting; item.Count = itemData.Count; bag.Slots[itemData.Index].Item = item; item.transform.SetParent(bag.Slots[itemData.Index].transform); } } return(bag); }
static public BagData Create() { BagData data = new BagData(); data.InitDefault(); return(data); }
public void PopDetritusZoom(BagData bag, bool show) { Debug.Log("Popup"); bubbleZoom.gameObject.SetActive(show); bagContent.gameObject.SetActive(show); bagContent.sprite = bag.sprite; AcceptButton.gameObject.SetActive(show); RefuseButton.gameObject.SetActive(show); }
/// <summary> /// 互换物品的真正方法 /// </summary> /// <param name="item1">最终被换的物品</param> /// <param name="item2">开始换的物品</param> /// <returns></returns> public static bool ExchangeItemFunc(GameObject item1, GameObject item2) { try { //装备栏原则上不会更换 if (item1.GetComponent <ItemCtrl>().BagData.ItemPositon == TagType.EquipTag && item1.GetComponent <ItemCtrl>().BagData.ItemPositon == TagType.EquipTag) { if (item1.GetComponent <ItemCtrl>().BagData.ItemType == item2.GetComponent <ItemCtrl>().BagData.ItemType) { //不做任何操作,继续交换逻辑 } else { return(false); } } int i = BagsList.FindIndex(e => e.Equals(item1)); int j = BagsList.FindIndex(e => e.Equals(item2)); if (item1.GetComponent <ItemCtrl>().BagData == BagData[i] && item2.GetComponent <ItemCtrl>().BagData == BagData[j]) //防止中间赋值导致不一致 { if (item1.GetComponent <ItemCtrl>().BagData.ItemPositon != item2.GetComponent <ItemCtrl>().BagData.ItemPositon) //如果是不一样的位置互换物品 { if (item1.GetComponent <ItemCtrl>().BagData.ItemType != item2.GetComponent <ItemCtrl>().BagData.ItemType) //如果物品的类型不一致就不能互换 { return(false); } } //开始互换物品 BagData tempItem = BagData[i]; BagData[i] = BagData[j]; BagData[j] = tempItem; if (BagData[i].ItemPositon != BagData[j].ItemPositon) { string tempItemPositon = BagData[i].ItemPositon; BagData[i].ItemPositon = BagData[j].ItemPositon; BagData[j].ItemPositon = tempItemPositon; } item1.GetComponent <ItemCtrl>().BagData = BagData[i]; item2.GetComponent <ItemCtrl>().BagData = BagData[j]; item1.GetComponent <ItemCtrl>().LoadTextrue(); item2.GetComponent <ItemCtrl>().LoadTextrue(); } return(true); } catch (System.Exception) { return(false); } }
/// <summary> /// Switchs the bag item.交换物品位置 /// </summary> public void switchBagItem(BagData bagData1, BagData bagData2, ItemUI itemUI1, ItemUI itemUI2) { if (switchBagItemData != null) { switchBagItemData(bagData1, bagData2); } if (switchBagItemUI != null) { switchBagItemUI(itemUI1, itemUI2); } }
public void SetActiveBag(BagData Bag) { if (ActiveBag != Bag) { ActiveBag = Bag; UpdateActiveList(); Selection.GetComponent<Inventory_Selector>().BagSwitch(Bag); } }
//Return inventory that can take item (main one first, then bag) public InventoryData GetValidInventory(ItemData item, int quantity) { if (InventoryData.CanTakeItem(item.id, quantity)) { return(InventoryData); } else if (BagData != null && BagData.CanTakeItem(item.id, quantity)) { return(BagData); } return(null); }
/// <summary> /// 删除相应位置的物品,在移除背包时使用该方法 /// </summary> /// <param name="Gameobj"></param> public static void DeleteItem(GameObject Gameobj) { for (int i = 0; i < BagData.Count; i++) { if (Gameobj.GetComponent <ItemCtrl>().BagData.Equals(BagData[i])) { BagData[i] = new BagData(); BagData[i].ItemPositon = Gameobj.GetComponent <ItemCtrl>().BagData.ItemPositon; Gameobj.GetComponent <ItemCtrl>().BagData = BagData[i]; Gameobj.GetComponent <ItemCtrl>().LoadTextrue(); } } }
static public void FavItem(Item_Item Item) { ItemData ItemData = ItemData.GetData(Item); BagData BagData = BagData.GetBag(Item_Category.none); if (BagData.List.Contains(ItemData)) { BagData.List.Remove(ItemData); } else { BagData.List.Add(ItemData); } }
/// <summary> /// 初始化数据 /// </summary> public void InitData() { //初始化人物的数据 PlayerData playerData = DataBase.Instance.GetPlayerData(); PlayerData.InitForSerialize(playerData); //初始化背包数据 BagData bagData = DataBase.Instance.GetBagData(); BagData.InitForSerialize(bagData); //初始化商店数据,暂时使用所有装备模板代替(实际上应该只有一部分,不可能商店能卖所有的装备) ShopData.Instance.Items = DataBase.Instance.GetEquipmentTemplate(); }
public void UnequipItem(EquipSlot eslot) { InventoryItemData invdata = EquipData.GetEquippedItem(eslot); if (invdata != null && InventoryData.CanTakeItem(invdata.item_id, 1)) { EquipData.UnequipItem(eslot); InventoryData.AddItem(invdata.item_id, 1, invdata.durability, invdata.uid); } else if (invdata != null && BagData != null && BagData.CanTakeItem(invdata.item_id, 1)) { EquipData.UnequipItem(eslot); BagData.AddItem(invdata.item_id, 1, invdata.durability, invdata.uid); } }
public InventoryItemData GetFirstItemInGroup(GroupData group) { if (InventoryData.HasItemInGroup(group)) { return(InventoryData.GetFirstItemInGroup(group)); } if (EquipData.HasItemInGroup(group)) { return(EquipData.GetFirstItemInGroup(group)); } if (BagData != null && BagData.HasItemInGroup(group)) { return(BagData.GetFirstItemInGroup(group)); } return(null); }
public void SaveInventory(int index) { Inventory inventory = Inventory.Instance; List <BagData> bagDatas = new List <BagData>(); for (int i = 0; i < inventory.BagButtons.Length; i++) { if (inventory.BagButtons[i].Bag != null) { Bag bag = inventory.BagButtons[i].Bag; BagData bagData = new BagData(bag.Name, i, new List <ItemData>()); bagDatas.Add(GetBagDataFromBag(bag, bagData)); } } saveData.GameDatas[index].InventoryData.SetBagDatas(bagDatas); }
public void UpdateActiveList() { for (int i = 0; i < ContentList.transform.FindObjectsWithTag("ItemSlot").Count; i++) { Destroy(ContentList.transform.FindObjectsWithTag("ItemSlot")[i]); } if (ActiveBag == null) { ActiveBag = BagData.GetBag(Item_Category.Medicine); } //Spawn ItemSlots + add Items for (int i = 0; i < ActiveBag.List.Count; i++) { GameObject newInvSlot = Instantiate(InventorySlotPreFab, new Vector3(0, 0, 0), Quaternion.identity) as GameObject; newInvSlot.transform.SetParent(ContentList.transform); newInvSlot.GetComponent<InventorySlot>().AddItem(ActiveBag.List[i]); } }
// load data void LoadData() { bool dirty = false; Config.Settings.NullValueHandling = NullValueHandling.Include; try { data = Config.ReadObject <BagData>(); } catch (Exception) { } dirty = CheckConfig(); if (data.sharedBags == null) { dirty |= LoadDefaultConfig(); } if (dirty) { SaveData(); } }
//Remove item directly from inventory, keeping its container public void UseItem(ItemData item, int quantity = 1) { if (item != null) { for (int i = 0; i < quantity; i++) { if (InventoryData.HasItem(item.id, 1)) { UseItem(InventoryData, item, 1); } else if (EquipData.HasItem(item.id, 1)) { UseItem(EquipData, item, 1); } else if (BagData != null && BagData.HasItem(item.id, 1)) { UseItem(BagData, item, 1); } } } }
//Remove items of group directly from inventory, keeping its container public void UseItemInGroup(GroupData group, int quantity = 1) { if (group != null) { for (int i = 0; i < quantity; i++) { if (InventoryData.HasItemInGroup(group, 1)) { UseItemInGroup(InventoryData, group, 1); } else if (EquipData.HasItemInGroup(group, 1)) { UseItemInGroup(EquipData, group, 1); } else if (BagData != null && BagData.HasItemInGroup(group, 1)) { UseItemInGroup(BagData, group, 1); } } } }
public void BagSwitch(BagData BagData) { if (BagData.Category != ItemData.GetData(ActiveItem).Category) { int Index = Inventory.ReturnIntFromCategory(BagData.Category); if (CachedItems[Index] != Item_Item.none && Inventory.ContainsItem(CachedItems[Index])) { SelectItem(CachedItems[Index]); } else if (BagData.List.Count > 0) { SelectItem(BagData.List[0].Item); } else { ClearSelection(); } } }
/// <summary> /// 是否是背包表 /// </summary> /// <param 表名="tbName"></param> /// <param 数据阅读器="reader"></param> private void IsBag(SqliteDataReader reader) { while (reader.Read()) { //获取读到内容中的字段,来保存对应的值 int Bag_Grid = reader.GetInt32(reader.GetOrdinal("Bag_Grid")); int Bag_Weapon = reader.GetInt32(reader.GetOrdinal("Bag_Weapon")); int Bag_Equipment = reader.GetInt32(reader.GetOrdinal("Bag_Equipment")); int Bag_Consumable = reader.GetInt32(reader.GetOrdinal("Bag_Consumable")); int Bag_Material = reader.GetInt32(reader.GetOrdinal("Bag_Material")); //创建模型 BagData bagData = new BagData { Bag_Grid = Bag_Grid, Bag_Weapon = Bag_Weapon, Bag_Equipment = Bag_Equipment, Bag_Consumable = Bag_Consumable, Bag_Material = Bag_Material, }; //加入到数据库 SQLiteManager.Instance.bagDataSource.Add(bagData.Bag_Grid, bagData); } }
public void ChooseRandomBag() { int bagIndex = Random.Range(0, availableBags.Count); bag = availableBags[bagIndex]; }
public void SetBagData(BagData bagData) { this.bagData = bagData; }
public int CountItemInGroup(GroupData group) { return(InventoryData.CountItemInGroup(group) + EquipData.CountItemInGroup(group) + (BagData != null ? BagData.CountItemInGroup(group) : 0)); }
// Use this for initialization void Start() { BagData.LoadData("BagDatas.sav"); }
//Check both bag and inventory public bool CanTakeItem(ItemData item, int quantity = 1) { return(item != null && (InventoryData.CanTakeItem(item.id, quantity) || (BagData != null && BagData.CanTakeItem(item.id, quantity)))); }
//虽然是单例,但是还是可以序列化创建到一个对象,提供一个方法使用序列化出来的对象对单例进行初始化 public static void InitForSerialize(BagData bagData) { BagData.Instance = bagData; BagData.Instance.UpdatePanel(); }
public int CountItem(ItemData item) { return(InventoryData.CountItem(item.id) + EquipData.CountItem(item.id) + (BagData != null ? BagData.CountItem(item.id) : 0)); }
//Check inventory / bag public bool HasEmptySlot() { return(InventoryData.HasEmptySlot() || (BagData != null && BagData.HasEmptySlot())); }