x


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.]

more ▼

asked Jan 23 '13 at 09:59 AM

xhybridxreflex gravatar image

xhybridxreflex
1 1 3 4

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 mind readers ...

Jan 23 '13 at 11:06 AM ryba
(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

At first look, your gui stuff isn't in an area and you're using guilayout. The rest seems ok.

more ▼

answered Jan 23 '13 at 11:16 AM

Berenger gravatar image

Berenger
12.4k 15 21 63

(comments are locked)
10|3000 characters needed characters left

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.

more ▼

answered Jan 23 '13 at 11:45 AM

ryba gravatar image

ryba
267 2 8 10

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x5404
x1182
x405

asked: Jan 23 '13 at 09:59 AM

Seen: 884 times

Last Updated: Jan 23 '13 at 11:45 AM