-
Notifications
You must be signed in to change notification settings - Fork 0
/
architecture.py
62 lines (54 loc) · 2.07 KB
/
architecture.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
class Cell():
"""Base map cell.
Attributes:
creature -- creature (if any) in the cell
contents -- list of items within the cell
inscriptions -- runic inscriptions on this cell
adjacent -- list of adjacent cells (clockwise starting at north)
Flags:
open -- cell passable
lit -- cell lit by a light source
glow -- cell permanently lit by its own light source
seen -- cell is in player FOV
"""
def __init__(self, contents=[], inscriptions=[], creature=None, clear=True,
door=False, lit=False, seen=False, glow=False):
self.open = clear # Cell passabiliy
self.door = door
self.lit = lit # Cell is in range and LOS of a light source
self.seen = seen # Cell is in player FOV
self.glow = glow # Cell is permanently lit by its own light source
self.creature = creature # Creature (if any) occupying the cell
self.contents = contents # Objects contained within the cell
self.inscriptions = inscriptions # Runic inscriptions on this cell
self.adjacent = []
def character(self):
if not self.open:
if self.door:
char = '+'
else:
char = '#'
else:
if self.door:
char = '-'
else:
char = '.'
return char
def render(self):
if self.creature:
return self.creature.render()
elif self.contents:
return self.contents[0].render()
elif self.inscriptions:
return self.inscriptions[0].render()
else:
return self.character()
def open_door(self):
if self.door:
self.open = True
def close_door(self):
if self.door:
self.open = False
def wall(contents=[], inscriptions=[], creature=[], open=False, door=False,
lit=False, seen=False, glow=False):
return Cell(contents, inscriptions, creature, open, lit, seen, glow)