Exemplo n.º 1
0
    def pickup(self, i):
        """returns True if i picked up successfully"""
        # TODO: move all this into HasInventory interface
        assert isinstance(i, Item), "Can't pick up a %s" % i

        if isinstance(i, Evidence):
            self.evidence.append(i)
            if not i.pos is None:  # found it in a locker
                self.map.remove(i)
            return Player.ITEM_PICKUP_COST

        item_index = None
        items = self.items
        if isinstance(i, SlotItem):
            items = [self.slot_items[i.valid_slot]]
        if not None in items:
            # prompt to drop something; drop it

            xu = self.map.size.x // 4
            yu = self.map.size.y // 4
            b = Menu(Position(xu, yu),
                     Position(xu * 2, yu * 2),
                     title="Pick Up")
            b.add('x', str(i))
            b.add_spacer()
            for idx in range(len(items)):
                v = items[idx]
                b.add('%d' % (idx + 1), str(v))
            c = b.get_key()

            if isinstance(c, str) and c.isnumeric():
                item_index = int(c) - 1
            self.redraw_screen()
            del b
            if item_index is None or item_index >= len(items):
                return 0.0
            items[item_index].drop_at(self.pos)
            self.map.add(items[item_index])
        else:
            item_index = items.index(None)

        if isinstance(i, SlotItem):
            self.slot_items[i.valid_slot] = i
        else:
            self.items[item_index] = i

        if not i.pos is None:  # if taken from locker or other bonus
            self.map.remove(i)
        i.take_by(self)
        return Player.ITEM_PICKUP_COST
Exemplo n.º 2
0
    def drop(self):
        # prompt to drop something; drop it
        xu = self.map.size.x//4
        yu = self.map.size.y//4
        b = Menu( Position(xu,yu), Position(xu*2,yu*2), title="Drop" )
        
        b.add('x','Do nothing')
        b.add_spacer()

        for idx in range(len(self.items)):
            v = self.items[idx]
            if not v is None:
                b.add('%d'%(idx+1),str(v))

        b.add_spacer()
        idx += 1

        for k in self.slot_keys:
            idx += 1
            if not self.slot_items[k] is None:
                b.add('%d'%idx,str(self.slot_items[k]))

        c = b.get_key()
                    
        item_index = None
        if isinstance(c,str) and c.isnumeric():
            item_index = int(c) - 1
        self.redraw_screen()
        del b

        if item_index is None:
            return 0.0

        i = None
        if item_index < len(self.items):
            i = self.items[item_index]
            self.items[item_index] = None
        elif item_index < len(self.items)+len(self.slot_keys):
            k = self.slot_keys[item_index-len(self.items)]
            i = self.slot_items[k]
            self.slot_items[k] = None

        if not i is None:
            i.drop_at(self.pos)
            self.map.add(i)
            return self.ITEM_DROP_COST 

        return 0.0
Exemplo n.º 3
0
    def pickup(self,i):
        """returns True if i picked up successfully"""
        # TODO: move all this into HasInventory interface
        assert isinstance(i,Item), "Can't pick up a %s"%i

        if isinstance(i,Evidence):
            self.evidence.append(i)
            if not i.pos is None: # found it in a locker
                self.map.remove(i)
            return Player.ITEM_PICKUP_COST

        item_index = None
        items      = self.items
        if isinstance(i,SlotItem):
            items  = [self.slot_items[i.valid_slot]]
        if not None in items:
            # prompt to drop something; drop it

            xu = self.map.size.x//4
            yu = self.map.size.y//4
            b = Menu( Position(xu,yu), Position(xu*2,yu*2), title="Pick Up" )
            b.add('x',str(i))
            b.add_spacer()
            for idx in range(len(items)):
                v = items[idx]
                b.add('%d'%(idx+1),str(v))
            c = b.get_key()

            if isinstance(c,str) and c.isnumeric():
                item_index = int(c) - 1
            self.redraw_screen()
            del b
            if item_index is None or item_index >= len(items):
                return 0.0
            items[item_index].drop_at(self.pos)
            self.map.add(items[item_index])
        else:
            item_index = items.index(None)

        if isinstance(i,SlotItem):
            self.slot_items[i.valid_slot] = i
        else:
            self.items[item_index] = i

        if not i.pos is None: # if taken from locker or other bonus
            self.map.remove(i)
        i.take_by(self)
        return Player.ITEM_PICKUP_COST
Exemplo n.º 4
0
    def drop(self):
        # prompt to drop something; drop it
        xu = self.map.size.x // 4
        yu = self.map.size.y // 4
        b = Menu(Position(xu, yu), Position(xu * 2, yu * 2), title="Drop")

        b.add('x', 'Do nothing')
        b.add_spacer()

        for idx in range(len(self.items)):
            v = self.items[idx]
            if not v is None:
                b.add('%d' % (idx + 1), str(v))

        b.add_spacer()
        idx += 1

        for k in self.slot_keys:
            idx += 1
            if not self.slot_items[k] is None:
                b.add('%d' % idx, str(self.slot_items[k]))

        c = b.get_key()

        item_index = None
        if isinstance(c, str) and c.isnumeric():
            item_index = int(c) - 1
        self.redraw_screen()
        del b

        if item_index is None:
            return 0.0

        i = None
        if item_index < len(self.items):
            i = self.items[item_index]
            self.items[item_index] = None
        elif item_index < len(self.items) + len(self.slot_keys):
            k = self.slot_keys[item_index - len(self.items)]
            i = self.slot_items[k]
            self.slot_items[k] = None

        if not i is None:
            i.drop_at(self.pos)
            self.map.add(i)
            return self.ITEM_DROP_COST

        return 0.0