-
Notifications
You must be signed in to change notification settings - Fork 1
/
inventory.py
115 lines (95 loc) · 2.88 KB
/
inventory.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import tcod_colors as libtcod
from flair import *
class Inventory:
def __init__(self):
self._items = {
'a': None,
'b': None,
'c': None,
'd': None,
'e': None,
'f': None,
'g': None,
'h': None,
'i': None }
self._slotnames = {
'a': 'head',
'b': 'neck',
'c': 'trunk',
'd': 'left hand',
'e': 'right hand',
'f': 'legs',
'g': 'feet',
'h': 'backpack 1',
'i': 'backpack 2'}
self._slotnums = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
def draw(self, dlev, plev, floor=None):
def fmt(slot):
nm = self._slotnames[slot]
nm = nm[0].upper() + nm[1:]
pad = ' '*(10-len(nm))
itm = ' -'
tmp = self._items[slot]
if tmp:
itm = str(tmp)
return "%c%c)%s %s: %c%s" % (libtcod.COLCTRL_5,
slot, pad, nm,
libtcod.COLCTRL_1,
itm)
s = [fmt(slot) for slot in self._slotnums]
if floor:
s.extend(floor)
s.extend(["",
"Character level: %d" % plev,
" Dungeon level: %d" % dlev])
return draw_window(s)
def take(self, i, slot=None):
if not slot:
slot = i.slot
if slot in self._items and not self._items[slot]:
self._items[slot] = i
return True
elif not self._items['h']:
self._items['h'] = i
return True
elif not self._items['i']:
self._items['i'] = i
return True
return False
def get_tagged(self):
i = []
for slot in self._slotnums:
j = self._items[slot]
if j and j.tag:
i.append((j.tag, slot, j))
i.sort()
return i
def drop(self, slot):
if slot in self._items:
ret = self._items[slot]
self._items[slot] = None
return ret
return None
def check(self, slot):
if slot in self._items:
return self._items[slot]
return None
class _iter:
def __init__(self, i):
self.inv = i
self.slot = -1
def __iter__(self):
return self
def next(self):
self.slot += 1
if self.slot >= len(self.inv._slotnums):
raise StopIteration()
s = self.inv._slotnums[self.slot]
i = self.inv._items[s]
return (i, s)
def __iter__(self):
return self._iter(self)
def purge(self, item):
for k,v in self._items.iteritems():
if v == item:
self._items[k] = None