<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Items stack in a RPG Inventory system</title>
		<link>http://www.allegro.cc/forums/view/613714</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 31 Dec 2013 00:02:38 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello everyone.<br />I have finally created an inventory for my RPG game, right now It can do:</p><p>-&gt; Show the items I have in a 20 slot inventory.<br />-&gt; Show the icon of the item<br />-&gt; Show the description (3 lines max)</p><p>Here is how it looks now:</p><p><span class="remote-thumbnail"><span class="json">{"name":"at18.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/0\/e0ca6a4ca3e8a6cbf411a05ef11c1ee6.png","w":636,"h":476,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/0\/e0ca6a4ca3e8a6cbf411a05ef11c1ee6"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/e/0/e0ca6a4ca3e8a6cbf411a05ef11c1ee6-240.jpg" alt="at18.png" width="240" height="179" /></span></p><p>But, as you can see I have many potions on my inventory, what I want to do is to use only 1 slot for them, I mean have a &quot;stack&quot; of items, a number will show the quantity of items I have. Like that:</p><p><span class="remote-thumbnail"><span class="json">{"name":"3vg5.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/e\/ce647b46fa8d611541f39a0f30dd237a.png","w":636,"h":476,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/e\/ce647b46fa8d611541f39a0f30dd237a"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/c/e/ce647b46fa8d611541f39a0f30dd237a-240.jpg" alt="3vg5.png" width="240" height="179" /></span></p><p>I have tried to do that, but no success, here is my code for the Scene_Inventory class:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#pragma once</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5\allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5\allegro_primitives.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5\allegro_image.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5\allegro_font.h&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;allegro5\allegro_ttf.h&gt;</span>
<span class="number">   7</span><span class="p">#include &lt;algorithm&gt;</span>
<span class="number">   8</span><span class="p">#include "item.h"</span>
<span class="number">   9</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">  10</span><span class="k1">using</span> std::vector<span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="c">///////</span>
<span class="number">  13</span><span class="k1">int</span> potions <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  14</span>
<span class="number">  15</span>vector<span class="k3">&lt;</span>Item&gt; Inventory<span class="k2">;</span>
<span class="number">  16</span>vector<span class="k3">&lt;</span>Item&gt;::iterator it<span class="k2">;</span>
<span class="number">  17</span>
<span class="number">  18</span><span class="k1">int</span> slot_w <span class="k3">=</span> <span class="n">275</span><span class="k2">;</span>
<span class="number">  19</span><span class="k1">int</span> slot_h <span class="k3">=</span> <span class="n">30</span><span class="k2">;</span>
<span class="number">  20</span>
<span class="number">  21</span><span class="k1">int</span> slot <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="k1">int</span> selection <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  24</span><span class="k1">int</span> total_slots <span class="k3">=</span> <span class="n">20</span><span class="k2">;</span>
<span class="number">  25</span>
<span class="number">  26</span><span class="k1">int</span> cur_items <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  27</span>
<span class="number">  28</span><span class="k1">int</span> player_coins <span class="k3">=</span> <span class="n">102034</span><span class="k2">;</span> <span class="c">//Just for testing</span>
<span class="number">  29</span>
<span class="number">  30</span>Item itemname<span class="k2">;</span>
<span class="number">  31</span>
<span class="number">  32</span><span class="k1">class</span> Scene_Inventory <span class="k2">:</span> <span class="k1">public</span> Item
<span class="number">  33</span><span class="k2">{</span>
<span class="number">  34</span>public:
<span class="number">  35</span>  Scene_Inventory<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>inv<span class="k2">;</span>
<span class="number">  37</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">;</span>
<span class="number">  38</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>font2<span class="k2">;</span>
<span class="number">  39</span>  <span class="k1">void</span> Init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span>  <span class="k1">void</span> Draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>  <span class="k1">void</span> addItem<span class="k2">(</span>Item <span class="k3">&amp;</span>itemname<span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  43</span>
<span class="number">  44</span>Scene_Inventory::Scene_Inventory<span class="k2">(</span><span class="k2">)</span>
<span class="number">  45</span><span class="k2">{</span>
<span class="number">  46</span>  cur_items <span class="k3">=</span> Inventory.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span><span class="k2">}</span>
<span class="number">  48</span>
<span class="number">  49</span><span class="k1">void</span> Scene_Inventory::Init<span class="k2">(</span><span class="k2">)</span>
<span class="number">  50</span><span class="k2">{</span>
<span class="number">  51</span>  inv <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"inventory.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>  <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_font"><span class="a">al_load_font</span></a><span class="k2">(</span><span class="s">"arial.ttf"</span>, <span class="n">16</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>  font2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_font"><span class="a">al_load_font</span></a><span class="k2">(</span><span class="s">"arial.ttf"</span>, <span class="n">14</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span><span class="k2">}</span>
<span class="number">  55</span>
<span class="number">  56</span><span class="k1">void</span> Scene_Inventory::Draw<span class="k2">(</span><span class="k2">)</span>
<span class="number">  57</span><span class="k2">{</span>
<span class="number">  58</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>inv, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> Inventory.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  60</span>      <span class="k2">{</span>
<span class="number">  61</span>        <span class="k1">if</span><span class="k2">(</span>i <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">9</span><span class="k2">)</span>
<span class="number">  62</span>        <span class="k2">{</span>
<span class="number">  63</span>          <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>Inventory.at<span class="k2">(</span>i<span class="k2">)</span>.icon, <span class="n">50</span>, <span class="n">75</span> <span class="k3">+</span> <span class="k2">(</span>i <span class="k3">*</span> <span class="k2">(</span>slot_h <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>          <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">100</span>,<span class="n">100</span>,<span class="n">100</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span>, <span class="n">80</span>, <span class="n">76</span> <span class="k3">+</span> <span class="k2">(</span>i <span class="k3">*</span> <span class="k2">(</span>slot_h <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span>, <span class="n">0</span>, <span class="s">"%s"</span>, Inventory.at<span class="k2">(</span>i<span class="k2">)</span>.getName<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>          <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font2, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">100</span>,<span class="n">100</span>,<span class="n">100</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span>, <span class="n">45</span>, <span class="n">82</span> <span class="k3">+</span> <span class="k2">(</span>i <span class="k3">*</span> <span class="k2">(</span>slot_h <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span>, <span class="n">0</span>, <span class="s">"%i"</span>, Inventory.at<span class="k2">(</span>i<span class="k2">)</span>.cur_quantity<span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>          
<span class="number">  67</span>        <span class="k2">}</span>
<span class="number">  68</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>i <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">10</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> i <span class="k3">&lt;</span> total_slots<span class="k2">)</span>
<span class="number">  69</span>        <span class="k2">{</span>
<span class="number">  70</span>          <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>Inventory.at<span class="k2">(</span>i<span class="k2">)</span>.icon, <span class="n">334</span>, <span class="n">75</span> <span class="k3">+</span> <span class="k2">(</span><span class="k2">(</span>i-10<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span>slot_h <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>          <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">100</span>,<span class="n">100</span>,<span class="n">100</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span>, <span class="n">364</span>, <span class="n">76</span> <span class="k3">+</span> <span class="k2">(</span><span class="k2">(</span>i-10<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span>slot_h <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span>, <span class="n">0</span>, <span class="s">"%s"</span>, Inventory.at<span class="k2">(</span>i<span class="k2">)</span>.getName<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>        <span class="k2">}</span>
<span class="number">  73</span>      <span class="k2">}</span>
<span class="number">  74</span>
<span class="number">  75</span>      <span class="k1">if</span><span class="k2">(</span>selection <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">9</span><span class="k2">)</span>
<span class="number">  76</span>      <span class="k2">{</span>
<span class="number">  77</span>        <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span><span class="n">40</span>,<span class="n">70</span> <span class="k3">+</span> <span class="k2">(</span>selection <span class="k3">*</span> <span class="k2">(</span>slot_h <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span>,<span class="n">315</span>,<span class="n">100</span> <span class="k3">+</span> <span class="k2">(</span>selection <span class="k3">*</span> <span class="k2">(</span>slot_h <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">100</span>,<span class="n">100</span>,<span class="n">100</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>      <span class="k2">}</span>
<span class="number">  79</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>selection <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">10</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> selection <span class="k3">&lt;</span> <span class="n">20</span><span class="k2">)</span>
<span class="number">  80</span>      <span class="k2">{</span>
<span class="number">  81</span>        <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span><span class="n">323</span>,<span class="n">70</span> <span class="k3">+</span> <span class="k2">(</span><span class="k2">(</span>selection-10<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span>slot_h <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span>,<span class="n">600</span>,<span class="n">100</span> <span class="k3">+</span> <span class="k2">(</span><span class="k2">(</span>selection-10<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span>slot_h <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">100</span>,<span class="n">100</span>,<span class="n">100</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>      <span class="k2">}</span>
<span class="number">  83</span>
<span class="number">  84</span>  <span class="c">//DRAWING DESCRIPTION </span>
<span class="number">  85</span>    <span class="k1">if</span><span class="k2">(</span>selection <span class="k3">&lt;</span> Inventory.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  86</span>    <span class="k2">{</span>
<span class="number">  87</span>      <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">40</span>, <span class="n">405</span>, <span class="n">0</span>, <span class="s">"%s"</span>, Inventory.at<span class="k2">(</span>selection<span class="k2">)</span>.getDescription<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>      <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font2, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">40</span>, <span class="n">425</span>, <span class="n">0</span>, <span class="s">"%s"</span>, Inventory.at<span class="k2">(</span>selection<span class="k2">)</span>.getDescription<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>      <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font2, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">40</span>, <span class="n">440</span>, <span class="n">0</span>, <span class="s">"%s"</span>, Inventory.at<span class="k2">(</span>selection<span class="k2">)</span>.getDescription<span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>    <span class="k2">}</span>
<span class="number">  91</span>
<span class="number">  92</span>    <span class="c">//Drawing coins</span>
<span class="number">  93</span>    <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font2, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>,<span class="n">622</span>, <span class="n">15</span>, ALLEGRO_ALIGN_RIGHT, <span class="s">"Coins: %i"</span>, player_coins<span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>
<span class="number">  95</span>    <span class="c">//Size test</span>
<span class="number">  96</span>    <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">20</span>, <span class="n">20</span>, <span class="n">0</span>, <span class="s">"%i"</span>, Inventory.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>
<span class="number">  98</span><span class="k2">}</span>
<span class="number">  99</span>
<span class="number"> 100</span><span class="k1">void</span> Scene_Inventory::addItem<span class="k2">(</span>Item <span class="k3">&amp;</span>itemname<span class="k2">)</span>
<span class="number"> 101</span><span class="k2">{</span>
<span class="number"> 102</span>  <span class="k1">switch</span><span class="k2">(</span>itemname.have<span class="k2">)</span>
<span class="number"> 103</span>  <span class="k2">{</span>
<span class="number"> 104</span>  <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span>
<span class="number"> 105</span>    Inventory.push_back<span class="k2">(</span>itemname<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>    itemname.cur_quantity<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 107</span>    itemname.have <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 108</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 109</span>  
<span class="number"> 110</span>  <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>
<span class="number"> 111</span>    itemname.cur_quantity<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 112</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 113</span>  <span class="k2">}</span>
<span class="number"> 114</span><span class="k2">}</span>
</div></div><p>

The last function is the one I am talking about, this is how it should work:<br />1- Check if the player has the item (itemname.have)<br />2- If the player doesn&#39;t has the item, then we add a new element to the vector with the item name provided. Then increment the quantity by 1, then set &quot;have&quot; to true.<br />3- If the player has the item, then just increment it&#39;s quantity by 1.</p><p>Please help me, I really don&#39;t know how to do that, the function doesn&#39;t work...</p><p>Thank you very much <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (NickyP)</author>
		<pubDate>Mon, 30 Dec 2013 03:15:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, unless I&#39;m missing something(how do you call addItem?), the function can&#39;t work, because you aren&#39;t checking if an Item of the same type already exiss within the inventory. Allow me to explan, your method does the following:<br />1. Check if the itemname.have is 1 or 0. This is a bad idea and (in this case) meaningless. More about that later.<br />2. if itemname.have is zero, the Item gets put in the vector<br />3. if itemname.have is one, you incremet the quantity of the Item and then you actually don&#39;t do anything with it.</p><p>Example:<br />You want to add two SnackBars to the inventory. You have two options.</p><p>Option 1:<br />You create two Item objects, lets say snack1 and snack2, and pass them both to addItem()<br />Outcome:<br />-snack1 get added to the vector<br />-snack1.have is set to one<br />-snack1.cur_quantity is incremented<br />-snack2.cur_quantity is incremented, never to be used again</p><p>Option 2:<br />You create one Item object, lets say snacks, and pass it two times to addItem()<br />Outcome:<br />-snacks get added to the vector<br />-snacks.have is set to one<br />-snacks.cur_quantity is incremented<br />-snacks.cur_quantity is incremented again</p><p><s>Option two would do the job, actually. If that&#39;s what you&#39;re going for, that is. Assuming vector&lt;Item&gt; Inventory takes pointers isnstead of the actual objects. (Sorry, my C++ skills get a bit rusty... :/ )</s><br />Well... no. Just did some testing and it seems vectors store a copy of the object.<br />Either way, you should implement a function that checks if the type of item is in the inventory by scanning the vector instead of relying on a variable and incrementing the cur_quantity of the object that is already in the vector. That would be cleaner and more understandable, anyway.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lupuss.Umbrae)</author>
		<pubDate>Mon, 30 Dec 2013 04:16:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the reply.</p><p>Well, I call the function like that:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 1</span>Scene_Inventory.addItem<span class="k2">(</span>potion<span class="k2">)</span><span class="k2">;</span>
</div></div><p>

The vector takes the actual item... Maybe there is something that I&#39;m not doing correct.<br />Maybe I&#39;m not passing correctly the item to the function..</p><p>I&#39;m really stuck with this :S
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (NickyP)</author>
		<pubDate>Mon, 30 Dec 2013 04:35:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah, ya beat me to it, was just editing my post...</p><p>Here is a cleaner and more understandable approach</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">int</span> Scene_Inventory::containsItem<span class="k2">(</span>Item <span class="k3">&amp;</span>itemname<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>Inventory.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  4</span>   <span class="k2">{</span>
<span class="number">  5</span>       <span class="k1">if</span><span class="k2">(</span>Inventory.at<span class="k2">(</span>i<span class="k2">)</span>.name<span class="k3">=</span><span class="k3">=</span>itemname.name<span class="k2">)</span><span class="c">// i.e. "potion" or "gold ring" (use string class for name)</span>
<span class="number">  6</span>          <span class="k1">return</span> i<span class="k2">;</span><span class="c">//return position of Item of same type as itemname</span>
<span class="number">  7</span>   <span class="k2">}</span>
<span class="number">  8</span>   <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  9</span><span class="k2">}</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="k1">void</span> Scene_Inventory::addItem<span class="k2">(</span>Item <span class="k3">&amp;</span>itemname<span class="k2">)</span>
<span class="number"> 12</span><span class="k2">{</span>
<span class="number"> 13</span>   <span class="k1">int</span> itemPos<span class="k3">=</span>containsItem<span class="k2">(</span>itemname<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">if</span><span class="k2">(</span>itemPos<span class="k2">)</span> <span class="c">// itemPos&gt;=0 means the item is already there, increment quanity</span>
<span class="number"> 15</span>   <span class="k2">{</span>
<span class="number"> 16</span>      Inventory.at<span class="k2">(</span>itemPos<span class="k2">)</span>.cur_quantity<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 17</span>   <span class="k2">}</span>
<span class="number"> 18</span>   <span class="k1">else</span> <span class="c">//itemPos==-1 means this item is not yet listed in the inventory, add it</span>
<span class="number"> 19</span>   <span class="k2">{</span>
<span class="number"> 20</span>      Inventoy.push_back<span class="k2">(</span>itemname<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>   <span class="k2">}</span>
<span class="number"> 22</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lupuss.Umbrae)</author>
		<pubDate>Mon, 30 Dec 2013 04:45:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the example.<br />But I can&#39;t use Inventory.size() because at the start the vector is empty, so I&#39;m getting an &quot;out of range&quot; error...</p><p>I tried to switch Inventory.size() to 20, in line 3 of your code and anyway get the error...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (NickyP)</author>
		<pubDate>Mon, 30 Dec 2013 04:52:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>std::map<span class="k3">&lt;</span>string , int&gt; inv<span class="k2">;</span>

<span class="k1">void</span> AddItem<span class="k2">(</span>String item<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">if</span> <span class="k2">(</span>inv.find<span class="k2">(</span>item<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> inv.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
      inv<span class="k2">[</span>item<span class="k2">]</span><span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
   <span class="k1">else</span>
      inv<span class="k2">[</span>item<span class="k2">]</span> <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>

AddItem<span class="k2">(</span><span class="s">"Health Potion"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

<a href="http://www.sgi.com/tech/stl/">See the SGI STL guide</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 30 Dec 2013 04:55:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, right. Sorry, my bad.</p><p>make that
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> Scene_Inventory::containsItem<span class="k2">(</span>Item <span class="k3">&amp;</span>itemname<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>Inventory.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
   <span class="k2">{</span>
      <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>Inventory.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
      <span class="k2">{</span>
         <span class="k1">if</span><span class="k2">(</span>Inventory.at<span class="k2">(</span>i<span class="k2">)</span>.name<span class="k3">=</span><span class="k3">=</span>itemname.name<span class="k2">)</span><span class="c">// i.e. "potion" or "gold ring" (use string class for name)</span>
            <span class="k1">return</span> i<span class="k2">;</span><span class="c">//return position of Item of same type as itemname</span>
      <span class="k2">}</span>
   <span class="k2">}</span>
   <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

EDIT:<br />Or do what Edgar said <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lupuss.Umbrae)</author>
		<pubDate>Mon, 30 Dec 2013 04:58:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks everyone, I think I got it to work finally.<br /><s>The only thing is that now I have changed the Item name from char to string, the name is not displaying in the inventory...
Here is how I&#39;m drawing my item&#39;s name:

al_draw_textf(font, al_map_rgba(100,100,100, 0.5), 80, 76 + (i * (slot_h + 2)), 0, &quot;%s&quot;, Inventory.at(i).name);</s></p><p><img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" /> fixed now <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (NickyP)</author>
		<pubDate>Mon, 30 Dec 2013 05:27:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If <span class="source-code">name</span> is now a <span class="source-code">std::string</span>, use <span class="source-code">name.c_str<span class="k2">(</span><span class="k2">)</span></span> to convert it into a <span class="source-code"><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span></span> array.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Mon, 30 Dec 2013 05:31:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613714/994447#target">NickyP</a> said:</div><div class="quote"><p>Thanks everyone, I think I got it to work finally.</p></div></div><p>

You&#39;re welcome. Though Edgar Reynaldo brought up a valid point.<br />Unless your Item objects have other important properties that a name you could use a map as well. Would save up some RAM.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lupuss.Umbrae)</author>
		<pubDate>Mon, 30 Dec 2013 16:28:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could register classes of items with a registry. And if you wanted stackable inventory, you could use a multimap which allows you to have multiple copies of the key (item) and since you store an int then that is the count of the item in that &#39;pile&#39;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 31 Dec 2013 00:02:38 +0000</pubDate>
	</item>
</rss>
