Inventory System - GUI

I had posted not one but two articles on Inventory Management, but I found that some users were still unclear and had no idea on how to use or include it in an application. I tried to find out what would help them to understand, so I have some code that will help the developer to understand how it all works with a little GUI demo too.


The previous Articles can be found at here and here

Now what we shall do for this tutorial is create 5 coloured block, that are randomly placed on the screen (as things would be in the game) and as we click on them, we get them to appear in our inventory box which is at the bottom of the screen. Then if we click on the items whilst they are in our inventory, we print to the console that we are using that item. I have left it as en exercise for the reader to work out dealing with the objects, re-arrange it and remove that item back to the screen.

What you've all been waiting for, the code...

--Inventory Example with picking up items and using them
-- Author : Jayant C Varma [dev@oz-apps.com]
-- © 2011, OZ Apps (http://www.oz-apps.com)
--
--
--create 5 elements to pick up

local i, randX, randY
local colours = {
	{255,0,0},
	{0,255,0},
	{0,0,255},
	{255,255,0},
	{0,255,255},
}

local boxsize = 25
local index = 1

local _W = display.contentWidth
local _H = display.contentHeight

display.setStatusBar(display.HiddenStatusBar)

local inventoryBox = display.newRoundedRect(10,
           _H-((boxsize+8)*2), _W-20, ((boxsize+5)*2),10)
	inventoryBox.alpha=0.3

local function quad(colorTable)
	return colorTable[1],colorTable[2],colorTable[3]
end


for i=1,#colours do
	randX = math.random(1,_W-15)
	randY = math.random(1,_H-((boxsize+15)*2))
	
	local box = display.newRect(randX, randY, boxsize, boxsize)
	box:setFillColor(quad(colours[i]))
	box:setStrokeColor(255,255,255)
	box.strokeWidth=1
	
	box.isWild = true	--Indicates if the item is in the inventory or not
	box.itemNumber = i	-- a tag for identifying the item number
	
	
	local function addItemToInventory(thisItem)
		if thisItem.isWild==true then
			thisItem.isWild = false
			local x = 10 + (index * (boxsize+10))
			local y = _H - boxsize - 10
			box.x = x
			box.y = y
			index = index + 1
			print("Picked up object " .. thisItem.itemNumber)
		end
	end
	
	local function useItemFromInventory(thisItem)
		if thisItem.isWild == false then
			print("Using the object " .. thisItem.itemNumber)
			
--[[
			--on using, the object can be removed or placed back like dropping it
			thisItem.isWild = true
			randX = math.random(1,_W-15)
			randY = math.random(1,_H-50)
			box.x = randX
			box.y = randY
			index = index - 1
			--Adjust all Items
--]]

		end
	end
	
	local function onTap(event)
		local target = event.target
		if target.isWild == true then --This is not in the inventory
			addItemToInventory(target) --so add it into the inventory
		else
			useItemFromInventory(target) -- This is in the inventory, so use it
		end
	end
	
	box:addEventListener("tap",onTap)
end


have fun...

Comments

Popular Posts