- Home /
How to add an inventory to the Player
Hey there, I'm trying to create an inventory for my player. I created this short javascript code and didn't seem to work. Any ideas? I've tried fixing the errors but only leading to more. Please help!
public class Inventory
List items = new List();
InventoryItem selectedItem;
Player owner;
int currentlySelected = 0;
public void Init(Player newPlayer)
{
newPlayer = owner;
}
public bool AddItem(InventoryItem newItem)
{
if(owner.strength >= GetTotalMass() + newItem.mass)
{
items.Add(newItem);
return true;
} else {
return false;
}
}
public void DropItem(InventoryItem newItem)
{
items.Remove(newItem);
}
public float GetTotalMass()
{
float mass = 0;
foreach(InventoryItem it in items)
{
mass += it.mass;
}
return mass;
}
public InventoryItem DrawItemsGrid(int columns)
{
Texture2D[] textures = GetTextures();
currentlySelected = GUILayout.SelectionGrid(currentlySelected, textures, columns);
return items[currentlySelected];
}
public Texture2D[] GetTextures()
{
List textures = new List();
foreach(InventoryItem it in items)
{
textures.Add(it.icon);
}
return textures.ToArray();
}
}
public class Player : MonoBehaviour
{
public float strength;
public Inventory invent;
public Hat myHat;
public Sword mySword;
public Sword myOtherSword;
void Start()
{
invent.Init(this);
invent.Add(myHat);
invent.Add(mySword);
invent.Add(myOtherSword);
}
public void TipHat()
{
//play a hat-tipping animation!
}
public void Attack()
{
// swing a sword
}
void OnGUI()
{
InventoryItem currentItem = invent.DrawItemsGrid(2);
currentItem.DrawGUIInfo();
if(GUILayout.Button("Activate " + currentItem.itemName))
{
currentItem.Activate(this);
}
if(GUILayout.Button("Drop " + currentItem.itemName))
{
invent.DropItem(currentItem);
}
}
}
public abstract class InventoryItem
{
public string itemName;
public string dragInfo;
public float mass;
public Texture2D icon;
public abstract void Activate(Player player);
public void DrawGUIInfo(){ GUILayout.Label(dragInfo); }
}
[System.Serializable]
public class Hat : InventoryItem
{
void Activate(Player player)
{
player.TipHat();
}
}
[System.Serializable]
public class Sword : InventoryItem
{
void Activate(Player player)
{
player.Attack();
}
}
[Edit by Berenger : formatting. Please next time select your code and hit the 101 010 button.]
If u want help, fix your message (format your source), its painfull to read that code. Also say anything whats wrong, copy errors, or describe whats going on ... we are not $$anonymous$$d readers ...
Answer by ryba · Jan 23, 2013 at 11:45 AM
First of all, code you provided isn't javascript, but C#. In that case you must put that code in C# files, not javascript files. Thats probably 90-100% of your errors.
Also dont mix your scripts, decide to use either only javascript or only C#. Mixing javascript and C# is problematic, it can be done, but require experiance you lack of.
Another issue - avoid putting multiple classes in one single file.
Also what i've noticed - it seems you didnt instantiate Inventory class in your Player component. Do that:
void Start() {
invent = new Inventory();
invent.Init(this);
invent.Add(myHat);
invent.Add(mySword);
invent.Add(myOtherSword);
}
Hard to say whats also wrong, please apply my advices and ping us whats the results, then if it will still be wrong, we could move one.
Your answer
Follow this Question
Related Questions
Script Not Working 0 Answers
Pause online game 1 Answer
Trouble setting up an inventory system to interact with game objects. 2 Answers
Move RigidBody character relative to camera. 2 Answers
Item pickup add to inventory? 2 Answers