- Home /
Question by
HuskyPanda213 · Jan 18, 2014 at 03:02 PM ·
listbool
Bool always returning true even if should return false.
As said above the containsallitems bool is returning false all the time, even if it should return true.
Code:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class PlayerInventory : MonoBehaviour {
public int MaxInventory = 26;
public List<Item> InventoryItems = new List<Item>();
void OnGUI(){
if (GUILayout.Button ("+5 Wood")) {
AddItem(ItemConstructors.Wood());
AddItem(ItemConstructors.Wood());
AddItem(ItemConstructors.Wood());
AddItem(ItemConstructors.Wood());
AddItem(ItemConstructors.Wood());
}
if (GUILayout.Button ("Craft Wall")) {
Craft(CraftingRecipes.WoodenWall());
}
}
public void AddItem(Item _item){
if (InventoryItems.Count < MaxInventory) {
InventoryItems.Add(_item);
SaveItems();
}
}
public void RemoveItem(Item _item){
InventoryItems.Remove (_item);
}
public void UseItem(Item _item){
if (_item.ItemType == "Food") {
ConsumeItem(_item);
}
SaveItems();
}
public void ConsumeItem(Item _item){
if (_item.ItemDur > 1) {
_item.ItemDur--;
}
else if(_item.ItemDur <= 1){
RemoveItem(_item);
}
}
public void SaveItems(){
for (int i = 0; i<MaxInventory; i++) {
PlayerPrefs.SetString("Itemn"+i,InventoryItems[i].ItemName);
PlayerPrefs.SetString("Itemt"+i,InventoryItems[i].ItemType);
PlayerPrefs.SetInt("Itemv"+i,InventoryItems[i].ItemValue);
PlayerPrefs.SetInt("Itemd"+i,InventoryItems[i].ItemDur);
}
LoadItems ();
}
public void LoadItems(){
InventoryItems.Clear();
for (int i = 0; i<MaxInventory; i++) {
Item it = new Item();
it.ItemName = PlayerPrefs.GetString("Itemn"+i);
it.ItemType = PlayerPrefs.GetString("Itemt"+i);
it.ItemValue = PlayerPrefs.GetInt("Itemv"+i);
it.ItemDur = PlayerPrefs.GetInt("Itemd"+i);
if(it.ItemName.Length <= 2 && it.ItemType.Length <= 2){
}
else{
InventoryItems.Add(it);
}
}
}
public void Craft(CraftingItem Recipe){
bool canCraft = ContainsAllItems (InventoryItems,Recipe.InputItem);
if(canCraft){
if(InventoryItems.Count < MaxInventory){
List<Item> list = new List<Item>();
list = InventoryItems.Except(Recipe.InputItem).ToList();
InventoryItems = list;
AddItem(Recipe.OutputItem);
}
else{
Debug.Log("Not enough space!");
}
}
else{
Debug.Log("Invalid Items.");
}
}
public static bool ContainsAllItems(List<Item> a, List<Item> b)
{
return !b.Except(a).Any();
}
}
CRAFTING ITEM
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class CraftingItem
{
public Item OutputItem = new Item();
public List<Item> InputItem = new List<Item>();
}
CRAFTING RECIPES
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public static class CraftingRecipes {
public static CraftingItem WoodenWall(){
CraftingItem ct = new CraftingItem ();
ct.InputItem.Add (ItemConstructors.Wood());
ct.InputItem.Add (ItemConstructors.Wood());
ct.OutputItem = ItemConstructors.WoodenWall ();
return ct;
}
public static CraftingItem StoneWall(){
CraftingItem ct = new CraftingItem ();
ct.InputItem.Add (ItemConstructors.Stone());
ct.InputItem.Add (ItemConstructors.Stone());
ct.OutputItem = ItemConstructors.StoneWall ();
return ct;
}
public static CraftingItem FirePit(){
CraftingItem ct = new CraftingItem ();
ct.InputItem.Add (ItemConstructors.Wood());
ct.InputItem.Add (ItemConstructors.Stone());
ct.OutputItem = ItemConstructors.FirePit ();
return ct;
}
}
ITEM
using UnityEngine;
using System.Collections;
[System.Serializable]
public class Item
{
public string ItemName = "";
public string ItemType = "";
public int ItemValue = 0;
public int ItemDur = 0;
}
ITEM CONSTRUCTORS
using UnityEngine;
using System.Collections;
public static class ItemConstructors
{
/*
*
* Crafting resources.
*
*/
public static Item Wood(){
Item it = new Item ();
it.ItemName = "Wood";
it.ItemType = "Crafting";
it.ItemDur = 1;
it.ItemValue = 1;
return it;
}
public static Item Stone(){
Item it = new Item ();
it.ItemName = "Stone";
it.ItemType = "Crafting";
it.ItemDur = 1;
it.ItemValue = 1;
return it;
}
/*
*
*Buildables.
*
*/
public static Item WoodenWall(){
Item it = new Item ();
it.ItemName = "Wooden Wall";
it.ItemType = "Build";
it.ItemDur = 100;
it.ItemValue = 1;
return it;
}
public static Item StoneWall(){
Item it = new Item ();
it.ItemName = "Stone Wall";
it.ItemType = "Build";
it.ItemDur = 250;
it.ItemValue = 1;
return it;
}
public static Item FirePit(){
Item it = new Item ();
it.ItemName = "Fire Pit";
it.ItemType = "Build";
it.ItemDur = 50;
it.ItemValue = 1;
return it;
}
/*
*
* Food/Consumables.
*
*/
public static Item Apple(){
Item it = new Item ();
it.ItemName = "Apple";
it.ItemType = "Food";
it.ItemDur = 1;
it.ItemValue = 1;
return it;
}
public static Item Bread(){
Item it = new Item ();
it.ItemName = "Bread";
it.ItemType = "Food";
it.ItemDur = 2;
it.ItemValue = 1;
return it;
}
}
Comment
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
question about array or list of boolean 1 Answer
List of bools with names 1 Answer
Switching Trough Active Players using Lists 1 Answer
How to destroy gameobject in hierarchy with a bool list. 2 Answers