items; } /** * Returns the Inventory from the session. * Implements the singleton pattern. * * @return Inventory the Inventory object */ public static function get() { if(!self::created()) { $_SESSION["inventory"] = new Inventory(); } return $_SESSION["inventory"]; } /** * Adds an Item object to the Inventory, incrementing the Item's count if it was already present. * * @param Item $item Item to add to the Inventory * @return array Item and Item's count */ private function _addItem($item) { foreach($this->items as $k => $object){ if($object[0] == $item){ $this->items[$k][1]++; return $this->items[$k]; } } $tab = array($item,1); $this->items[] = $tab; return $tab; } /** * Adds an Item object to the singleton's Inventory from session. * * @param Item $item Item to add to the Inventory * @return array Item and Item's count */ public static function addItem($item) { $inv = self::get(); $tab = $inv->_addItem($item); return $tab; } /** * Removes an Item object from the Inventory, not taking into account the Item's count. * * @param Item $item Item to remove from the Inventory * @return void */ private function _removeItem($item) { foreach($this->items as $k => $object) { if($object[0] == $item) { unset($this->items[$k]); return; } } } /** * Removes an Item object to the singleton's Inventory from session, not taking into account the Item's count. * * @param Item $item Item to remove from the Inventory * @return void */ public static function removeItem($item) { $inv = self::get(); $inv->_removeItem($item); } /** * Consumes an Item object from the Inventory, decrementing the Item's count and removing it if count reaches 0. * * @param Item $item Item to consume from the Inventory * @return array|false Item and updated Item's count, false if it was not found */ private function _useItem($item) { foreach($this->items as $k => $object){ if($object[0] == $item) { $nb = $this->items[$k][1]; if($nb > 0) { $this->items[$k][0]->consume(); $this->items[$k][1]--; } if($nb-1 <= 0) $this->_removeItem($item); return array($object[0], $nb-1); } } return false; } /** * Consumes an Item object to the singleton's Inventory from session, decrementing the Item's count and removing it if count reaches 0. * * @param Item $item Item to consume from the Inventory * @return array|false Item and updated Item's count, false if it was not found */ public static function useItem($item) { $inv = self::get(); $it = $inv->_useItem($item); return $it; } /** * Generates an XML tree describing the Inventory * * @param SimpleXMLElement $root root XML element to add the Inventory's Items to * @return void */ public function addToXML($root) { foreach($this->items as $item) $item[0]->addToXML($root, $item[1]); } } ?>