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
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
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
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