Ignore:
Timestamp:
10/24/09 06:17:27 (10 years ago)
Author:
b0rland_parpg
Message:

Ticket #107: patch by b0rland

  • Wrote initial version of the inventory storage class
  • Added some useful utility functions into container class and its derivatives
  • Created several combined classes for carryable containers
  • Extended tests and of course made new ones
  • Renamed old Inventory class to be InventoryGUI

Note: InventoryGUI still works the old way and doesn't use Inventory

Location:
trunk/game/scripts/objects
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/game/scripts/objects/base.py

    r315 r346  
    208208        except AttributeError : 
    209209            pass 
    210          
    211 class Inventory (object): 
    212     """Aggregate class for things that have multiple Containers""" 
    213     def __init__ (self, **kwargs): 
    214         self.is_inventory = True 
    215         self.containers = [] 
    216      
     210 
     211    def count (self): 
     212        return len(self.items) 
     213 
     214         
    217215class Living (object): 
    218216    def __init__ (self, **kwargs): 
     
    247245         
    248246class Wearable (object): 
    249     def __init__ (self, **kwargs): 
     247    def __init__ (self, slots, **kwargs): 
    250248        """Allows the object to be worn somewhere on the body (e.g. pants)""" 
    251249        self.is_wearable = True 
     250        if isinstance(slots,tuple) : 
     251            self.slots = slots 
     252        else : 
     253            self.slots = (slots,) 
    252254     
    253255class Usable (object): 
  • trunk/game/scripts/objects/composed.py

    r310 r346  
    1818"""Composite game object classes are kept here""" 
    1919 
     20from hgext.inotify.linux.watcher import getter 
    2021from base import * 
    2122 
     
    3233        self.blocking = True 
    3334 
     35class CarryableContainer(GameObject, Container, Carryable): 
     36    """Composite class that will be used for backpack, pouches, etc.""" 
     37    def __init__ (self, ID, **kwargs): 
     38        GameObject.__init__(self, ID, **kwargs) 
     39        Container.__init__(self, **kwargs) 
     40        Carryable.__init__(self,**kwargs) 
     41        self.own_weight = 0 
     42 
     43    def getWeight(self): 
     44        """Total weight of all items in container + container's own weight""" 
     45        return sum((item.weight for item in self.items), self.own_weight) 
     46 
     47 
     48    def setWeight(self, weight): 
     49        self.own_weight = weight 
     50 
     51    weight = property(getWeight, setWeight, "Total weight of container") 
     52 
     53    def __repr__(self): 
     54        return "[%s:%s "%(self.name, self.ID) +str(reduce((lambda a,b: a +', '+str(b)), self.items,""))+" ]" 
     55 
     56 
     57class SingleItemContainer (CarryableContainer) : 
     58    """Container that can only store a single item. This class can represent single-item inventory slots""" 
     59    def __init__ (self, ID, **kwargs): 
     60        CarryableContainer.__init__(self, ID,**kwargs) 
     61 
     62    def placeItem(self,item): 
     63        if len(self.items) > 0 : 
     64            raise ValueError ('%s is already busy' % self) 
     65        CarryableContainer.placeItem(self, item) 
     66 
    3467class Door(GameObject, Lockable, Scriptable, Trappable): 
    3568    """Composite class that can be used to create doors on a map.""" 
Note: See TracChangeset for help on using the changeset viewer.