from plomrogue.io_tcp import PlomSocket
from plomrogue.game import GameBase
from plomrogue.parser import Parser
-from plomrogue.mapping import YX
+from plomrogue.mapping import YX, MapGeometrySquare, MapGeometryHex
from plomrogue.things import ThingBase
from plomrogue.misc import quote
t.name = name
cmd_THING_NAME.argtypes = 'int:nonneg string'
-def cmd_MAP(game, size, content):
- game.map_geometry.size = size
+def cmd_MAP(game, geometry, size, content):
+ map_geometry_class = globals()['MapGeometry' + geometry]
+ game.map_geometry = map_geometry_class(size)
game.map_content = content
-cmd_MAP.argtypes = 'yx_tuple:pos string'
+ if type(game.map_geometry) == MapGeometrySquare:
+ game.tui.movement_keys = {
+ 'w': 'UP',
+ 'a': 'LEFT',
+ 's': 'DOWN',
+ 'd': 'RIGHT',
+ }
+ elif type(game.map_geometry) == MapGeometryHex:
+ game.tui.movement_keys = {
+ 'w': 'UPLEFT',
+ 'e': 'UPRIGHT',
+ 'd': 'RIGHT',
+ 'c': 'DOWNRIGHT',
+ 'x': 'DOWNLEFT',
+ 's': 'LEFT',
+ }
+cmd_MAP.argtypes = 'string:map_geometry yx_tuple:pos string'
def cmd_GAME_STATE_COMPLETE(game):
game.info_db = {}
self.info_db = {}
self.portals = {}
+ def get_string_options(self, string_option_type):
+ if string_option_type == 'map_geometry':
+ return ['Hex', 'Square']
+ return None
+
def get_command(self, command_name):
from functools import partial
f = partial(self.commands[command_name], self)
if self.mode.shows_info:
map_lines_split[self.explorer.y][self.explorer.x] = '?'
map_lines = []
- for line in map_lines_split:
- map_lines += [''.join(line)]
- map_center = YX(int(self.game.map_geometry.size.y / 2),
- int(self.game.map_geometry.size.x / 2))
+ if type(self.game.map_geometry) == MapGeometryHex:
+ indent = 0
+ for line in map_lines_split:
+ map_lines += [indent*' ' + ' '.join(line)]
+ indent = 0 if indent else 1
+ else:
+ for line in map_lines_split:
+ map_lines += [''.join(line)]
window_center = YX(int(self.size.y / 2),
int(self.window_width / 2))
player = self.game.get_thing(self.game.player_id, False)
center = player.position
if self.mode.shows_info:
center = self.explorer
+ if type(self.game.map_geometry) == MapGeometryHex:
+ center = YX(center.y, center.x * 2)
offset = center - window_center
+ if type(self.game.map_geometry) == MapGeometryHex and offset.y % 2:
+ offset += YX(0, 1)
term_y = max(0, -offset.y)
term_x = max(0, -offset.x)
map_y = max(0, offset.y)
self.switch_mode('play')
self.input_ = ''
elif self.mode == self.mode_study:
- if key == 'c':
+ if key == 'C':
self.switch_mode('chat')
- elif key == 'p':
+ elif key == 'P':
self.switch_mode('play')
elif key == 'A':
self.switch_mode('annotate', keep_position=True)
- elif key == 'P':
+ elif key == 'p':
self.switch_mode('portal', keep_position=True)
- elif key == 'w':
- move_explorer('UP')
- elif key == 'a':
- move_explorer('LEFT')
- elif key == 's':
- move_explorer('DOWN')
- elif key == 'd':
- move_explorer('RIGHT')
+ elif key in self.movement_keys:
+ move_explorer(self.movement_keys[key])
elif self.mode == self.mode_play:
- if key == 'c':
+ if key == 'C':
self.switch_mode('chat')
elif key == '?':
self.switch_mode('study')
- if key == 'e':
+ if key == 'E':
self.switch_mode('edit')
elif key == 'f':
self.send('TASK:FLATTEN_SURROUNDINGS')
- elif key == 'w':
- self.send('TASK:MOVE UP')
- elif key == 'a':
- self.send('TASK:MOVE LEFT')
- elif key == 's':
- self.send('TASK:MOVE DOWN')
- elif key == 'd':
- self.send('TASK:MOVE RIGHT')
+ elif key in self.movement_keys:
+ self.send('TASK:MOVE ' + self.movement_keys[key])
elif self.mode == self.mode_edit:
self.send('TASK:WRITE ' + key)
self.switch_mode('play')