- Home /
Inventory - problem with creating new item
Hello :) I have Inventory, but i need help.
Here is my code:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Inventory : MonoBehaviour {
public SimpleMouseRotator camera1;
public SimpleMouseRotator camera2;
public int slotsX, slotsY;
public GUISkin skin;
public List<Item> inventory = new List<Item>();
public List<Item> slots = new List<Item>();
public bool showInventory;
private bool showTooltip;
private bool draggingItem;
private Item draggedItem;
private string tooltip;
private ItemDatabase database;
private int prevIndex;
void Start()
{
camera1 = GameObject.FindWithTag("Player").GetComponent<SimpleMouseRotator>();
camera2 = GameObject.FindWithTag("MainCamera").GetComponent<SimpleMouseRotator>();
database = GameObject.FindGameObjectWithTag("ItemDatabase").GetComponent<ItemDatabase>();
for(int i = 0; i < (slotsX * slotsY); i++)
{
slots.Add(new Item());
inventory.Add(new Item());
}
AddItem(0);
AddItem(1);
AddItem(2);
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Y))
{
AddItem(2);
}
if(Input.GetKey(KeyCode.U))
{
AddItem(2);
}
if(Input.GetKeyDown(KeyCode.Tab))
{
showInventory = !showInventory;
}
if(showInventory)
{
camera1.enabled = false;
camera2.enabled = false;
}
else
{
camera1.enabled = true;
camera2.enabled = true;
}
}
void OnGUI()
{
tooltip = "";
GUI.skin = skin;
if(showInventory)
{
DrawInventory();
if(showTooltip)
GUI.Box(new Rect(Event.current.mousePosition.x + 15f, Event.current.mousePosition.y, 200, 200), tooltip, skin.GetStyle("Tooltip"));
}
if(draggingItem)
{
GUI.DrawTexture(new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y, 50, 50), draggedItem.itemIcon);
}
}
void DrawInventory()
{
Event e = Event.current;
int i = 0;
for(int y = 0; y < slotsY; y++)
{
for(int x = 0; x < slotsX; x++)
{
Rect slotRect = new Rect(x * 60, y * 60, 50, 50);
GUI.Box(slotRect, "", skin.GetStyle("Slots"));
slots[i] = inventory[i];
int itemCount = inventory[i].itemCount;
if(slots[i].itemName != null)
{
GUI.DrawTexture(slotRect, slots[i].itemIcon);
GUI.Label(new Rect(x * 60,y * 60,50,50), itemCount.ToString());
if(slotRect.Contains(e.mousePosition))
{
tooltip = CreateTooltip(slots[i]);
showTooltip = true;
//przenoszenie przedmiotów - podnieś
if(e.button == 0 && e.type == EventType.mouseDrag && !draggingItem)
{
draggingItem = true;
prevIndex = i;
draggedItem = slots[i];
inventory[i] = new Item();
}
//przenoszenie przedmiotów - upuść
if(e.type == EventType.mouseUp && draggingItem)
{
inventory[prevIndex] = inventory[i];
inventory[i] = draggedItem;
draggingItem = false;
draggedItem = null;
}
//Używanie przedmiotów
if(e.isMouse && e.type == EventType.mouseDown && e.button == 1)
{
print("Clicked " + i);
if(inventory[i].itemType == Item.ItemType.Consumable)
{
if(inventory[i].itemCount == 1)
{
UseConsumable(slots[i], i, true, false);
}
else
{
UseConsumable(slots[i], i, false, true);
}
}
}
}
}
else
{
if(slotRect.Contains(e.mousePosition))
{
if(e.type == EventType.mouseUp && draggingItem)
{
inventory[i] = draggedItem;
draggingItem = false;
draggedItem = null;
}
}
}
if(tooltip == "")
{
showTooltip = false;
}
i++;
}
}
}
//wyświetlanie opisu przedmiotu po najechaniu na niego myszką
string CreateTooltip(Item item)
{
tooltip = "<color=#ffffff>" + item.itemName + "</color>\n\n" + item.itemDesc;
return tooltip;
}
void RemoveItem(int id)
{
for(int i = 0; i < inventory.Count; i++)
{
if(inventory[i].itemID == id)
{
inventory[i] = new Item();
break;
}
}
}
void AddItem(int id)
{
for(int i = 0; i < inventory.Count; i++)
{
//Jeżeli nie istnieje, dodaj item
if(inventory[i].itemName == null)
{
for(int j = 0; j < database.items.Count; j++)
{
if(database.items[j].itemID == id)
{
inventory[i] = database.items[j];
}
}
break;
}
//Jeżeli istnieje dodaj +1 do licznika
else
{
if(inventory[i].itemID == id)
{
if(inventory[i].itemCount != 200)
{
inventory[i].itemCount += 1;
break;
}
}
}
}
}
/*
void AddItemCount(int id)
{
for(int i = 0; i < inventory.Count; i++)
{
if(inventory[i].itemName != null)
{
inventory[i].itemCount += 1;
break;
}
}
}
*/
bool InventoryContains(int id){
foreach(Item item in inventory){
if(item.itemID == id) return true;
}
return false;
}
//Używanie itemów
private void UseConsumable(Item item, int slot, bool deleteItem, bool deleteCount)
{
//switch (zostawić)
switch(item.itemID)
{
//case id, np. jabłko ma id 4 -> case 4: .... coś zrób
case 2:
{
print("Mnom, mnom, mnom");
break;
}
}
//jeżeli wysłana informacja o usunięciu
if(deleteItem)
inventory[slot] = new Item();
//jeżeli wysłana informacja o zmianie licznika
if(deleteCount)
{
for(int i = 0; i < inventory.Count; i++)
{
if(inventory[i].itemID == item.itemID)
{
inventory[i].itemCount -= 1;
break;
}
}
}
}
}
I have stackable item. Max stacks - 200. And now, i start from 1, when i hold "Y" key it add stacks to max, 200, but here is my problem when it reach max 200 stacks it create new item (that what i want) with 1 stack but when i still adding stacks it change both items to 1 and adding stacks to max, 200. You got it ?
I really need help with this ;/
Have you ever heard from: else if ()? You dont have to use else and the if
but else if is a little crap and .. i dont need it here i think, in what it can help me , coz i really dont see it in my code now ;p
Your answer
Follow this Question
Related Questions
Creating an interactable inventory? 1 Answer
Inventory stack system problam 0 Answers
GUI focus control - inventory system issue 1 Answer
UI: Dynamically sized inventory window with scroll 0 Answers
enum comparing 1 Answer