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
116
117
118
119
120
121
122
123
124
125
126
|
from constants import (
DOOR_ORDER, DOOR_INDEX, DOOR_FLAGS, SPEC_FLAGS,
ENEM_INDEX, ITEM_INDEX, ITEM_FLAGS
)
import gtk
class Room:
def __init__(self, x = -1, y = -1, str=None):
self._x = x
self._y = y
self.doors = {}
self.enemy = []
self.item = []
self.has_doors = False
self.has_enemy = False
self.has_item = False
for index in DOOR_INDEX:
self.doors[index] = ['0', '0']
self.special = '0'
for index in range(0,4):
self.enemy.append( '0' )
for index in range(0,4):
self.item.append( ['0', '0'] )
# Load room from str
# TODO VALIDATE FLAGS
if str:
self.add_door( str[0], str[1] )
self.add_door( str[2], str[3] )
self.add_door( str[4], str[5] )
self.add_door( str[6], str[7] )
self.set_room_flag( str[8] )
self.set_enemy( 0, str[9] )
self.set_enemy( 1, str[10] )
self.set_enemy( 2, str[11] )
self.set_enemy( 3, str[12] )
self.set_item( 0, str[13], str[14] )
self.set_item( 1, str[15], str[16] )
self.set_item( 2, str[17], str[18] )
self.set_item( 3, str[19], str[20] )
def add_door(self, door, flag):
if door == "0":
return
elif door in DOOR_INDEX and flag in DOOR_FLAGS:
self.has_doors = True
self.doors[door] = [door, flag]
else:
print "INVALID DOOR AND/OR FLAG"
def remove_door(self, door):
if door in DOOR_INDEX:
#TODO Check if should change has_door
self.doors[door] = ['0', '0']
else:
print "INVALID DOOR"
def get_door( self, door):
if door in DOOR_INDEX:
return self.doors[door][1]
def set_room_flag(self, flag):
if flag in SPEC_FLAGS:
self.special = flag
else:
print "INVALID FLAG"
def get_room_flag( self ):
return self.special
def set_enemy( self, pos, enemy ):
if enemy == "0":
return
elif pos >= 0 and pos <=3 and enemy in ENEM_INDEX:
if enemy != '0':
self.has_enemy = True
self.enemy[pos] = enemy
else:
print "INVALID ENEMY POS OR ID"
def get_enemy(self, pos):
if pos >=0 and pos <=3:
return self.enemy[pos]
def set_item(self, pos, id, flag):
if id == "0":
return
elif pos >= 0 and pos <=3 and id in ITEM_INDEX and flag in ITEM_FLAGS:
if item != '0':
self.has_item = True
self.item[ pos ] = [id, flag]
else:
print "INVALID POS OR ID OR FLAG"
def room_to_string(self):
str = ""
for index in DOOR_ORDER:
str += self.doors[index][0] + self.doors[index][1]
str += self.special
for enemy in self.enemy:
str += enemy
for item in self.item:
str += item[0] + item[1]
return str
def not_empty_room(self):
return self.has_doors or self.has_enemy or self.has_item
def render_room(self):
if self.not_empty_room():
but = gtk.Button("(%d, %d)" %(self._x, self._y))
else:
but = gtk.Button("")
but.set_size_request(100, 100)
return but
|