map_height = len(map_lines)
if map_height > view_height and center_y > view_height / 2:
if center_y > map_height - view_height / 2:
- map_lines = map_lines[map_height - view_height:]
+ map_lines[:] = map_lines[map_height - view_height:]
else:
- start = center_y - int(view_height / 2)
+ start = center_y - int(view_height / 2) - 1
map_lines[:] = map_lines[start:start + view_height]
- def x_cut(self, map_lines, center_x, view_width):
- map_width = len(map_lines[0])
+ def x_cut(self, map_lines, center_x, view_width, map_width):
if map_width > view_width and center_x > view_width / 2:
if center_x > map_width - view_width / 2:
cut_start = map_width - view_width
map_lines = map_string_to_lines(map_string)
self.y_cut(map_lines, center[0], size[0])
- self.x_cut(map_lines, center[1], size[1])
+ self.x_cut(map_lines, center[1], size[1], self.size[1])
return map_lines
def format_to_view(self, map_string, center, size):
def map_string_to_lines(map_string):
- map_view_chars = [' ']
+ map_view_chars = ['0']
x = 0
y = 0
for c in map_string:
x = 0
y += 1
if y % 2 == 0:
- map_view_chars += [' ']
+ map_view_chars += ['0']
+ if y % 2 == 0:
+ map_view_chars = map_view_chars[:-1]
+ map_view_chars = map_view_chars[:-1]
return ''.join(map_view_chars).split('\n')
map_lines = map_string_to_lines(map_string)
self.y_cut(map_lines, center[0], size[0])
- self.x_cut(map_lines, center[1] * 2, size[1])
+ map_width = self.size[1] * 2 + 1
+ self.x_cut(map_lines, center[1] * 2, size[1], map_width)
return map_lines
}
self.do_quit = False
+ def get_command_signature(self, command_name):
+ method_candidate = 'cmd_' + command_name
+ method = None
+ argtypes = ''
+ if hasattr(self, method_candidate):
+ method = getattr(self, method_candidate)
+ if hasattr(method, 'argtypes'):
+ argtypes = method.argtypes
+ return method, argtypes
+
+ def get_string_options(self, string_option_type):
+ if string_option_type == 'geometry':
+ return self.map_manager.get_map_geometries()
+ return None
+
def handle_input(self, msg):
if msg == 'BYE':
self.do_quit = True
else:
command()
except ArgError as e:
- self.log('ARGUMENT ERROR: ' + msg + '\n' + str(e))
- self.to_update['log'] = True
+ self.log('ARGUMENT ERROR: ' + msg + '\n' + str(e))
+ self.to_update['log'] = True
def log(self, msg):
"""Prefix msg plus newline to self.log_text."""
self.log_text = msg + '\n' + self.log_text
+ self.to_update['log'] = True
def symbol_for_type(self, type_):
symbol = '?'
def cmd_LAST_PLAYER_TASK_RESULT(self, msg):
if msg != "success":
self.log(msg)
- self.to_update['log'] = True
cmd_LAST_PLAYER_TASK_RESULT.argtypes = 'string'
def cmd_TURN_FINISHED(self, n):
"""Set self.turn to n, empty self.things."""
self.world.turn = n
self.world.things = []
+ self.to_update['turn'] = False
+ self.to_update['map'] = False
cmd_NEW_TURN.argtypes = 'int:nonneg'
def cmd_VISIBLE_MAP_LINE(self, y, terrain_line):
self.log = LogWidget(self, (4, 0), (None, 20), ['log'])
self.map_ = MapWidget(self, (0, 21), (None, None), ['map'])
widgets = (self.edit, self.turn, self.log, self.map_)
+ map_mode = False
while True:
for w in widgets:
w.ensure_freshness()
self.to_update[key] = False
try:
key = self.stdscr.getkey()
- if len(key) == 1 and key in ASCII_printable and \
- len(self.to_send) < len(self.edit):
- self.to_send += [key]
- self.to_update['edit'] = True
- elif key == 'KEY_BACKSPACE':
- self.to_send[:] = self.to_send[:-1]
- self.to_update['edit'] = True
- elif key == '\n':
- plom_socket_io.send(self.socket, ''.join(self.to_send))
- self.to_send[:] = []
- self.to_update['edit'] = True
- elif key == 'KEY_RESIZE':
+ if key == 'KEY_RESIZE':
curses.endwin()
self.setup_screen(curses.initscr())
for w in widgets:
w.size = w.size_def
w.ensure_freshness(True)
+ elif key == '\t': # Tabulator key.
+ map_mode = False if map_mode else True
+ elif map_mode:
+ if type(self.game.world.map_) == MapSquare:
+ if key == 'a':
+ plom_socket_io.send(self.socket, 'TASK:MOVE LEFT')
+ elif key == 'd':
+ plom_socket_io.send(self.socket, 'TASK:MOVE RIGHT')
+ elif key == 'w':
+ plom_socket_io.send(self.socket, 'TASK:MOVE UP')
+ elif key == 's':
+ plom_socket_io.send(self.socket, 'TASK:MOVE DOWN')
+ elif type(self.game.world.map_) == MapHex:
+ if key == 'w':
+ plom_socket_io.send(self.socket, 'TASK:MOVE UPLEFT')
+ elif key == 'e':
+ plom_socket_io.send(self.socket, 'TASK:MOVE UPRIGHT')
+ if key == 's':
+ plom_socket_io.send(self.socket, 'TASK:MOVE LEFT')
+ elif key == 'd':
+ plom_socket_io.send(self.socket, 'TASK:MOVE RIGHT')
+ if key == 'x':
+ plom_socket_io.send(self.socket, 'TASK:MOVE DOWNLEFT')
+ elif key == 'c':
+ plom_socket_io.send(self.socket, 'TASK:MOVE DOWNRIGHT')
+ else:
+ if len(key) == 1 and key in ASCII_printable and \
+ len(self.to_send) < len(self.edit):
+ self.to_send += [key]
+ self.to_update['edit'] = True
+ elif key == 'KEY_BACKSPACE':
+ self.to_send[:] = self.to_send[:-1]
+ self.to_update['edit'] = True
+ elif key == '\n': # Return key
+ plom_socket_io.send(self.socket, ''.join(self.to_send))
+ self.to_send[:] = []
+ self.to_update['edit'] = True
except curses.error:
pass
if self.game.do_quit: