self.send_gamestate()
def get_command(self, command_name):
- from functools import partial
+
+ def partial_with_attrs(f, *args, **kwargs):
+ from functools import partial
+ p = partial(f, *args, **kwargs)
+ p.__dict__.update(f.__dict__)
+ return p
def cmd_TASK_colon(task_name, game, *args):
game.world.get_player().set_task(task_name, args)
if command_name[:len(task_prefix)] == task_prefix:
task_name = command_name[len(task_prefix):]
if task_name in self.tasks:
- f = partial(task_command, task_name, self)
+ f = partial_with_attrs(task_command, task_name, self)
task = self.tasks[task_name]
if argtypes_prefix:
f.argtypes = argtypes_prefix + ' ' + task.argtypes
if command:
return command
if command_name in self.commands:
- f = partial(self.commands[command_name], self)
- if hasattr(self.commands[command_name], 'argtypes'):
- f.argtypes = self.commands[command_name].argtypes
+ f = partial_with_attrs(self.commands[command_name], self)
return f
return None
def stringify_yx(tuple_):
"""Transform tuple (y,x) into string 'Y:'+str(y)+',X:'+str(x)."""
return 'Y:' + str(tuple_[0]) + ',X:' + str(tuple_[1])
-
-
-
-if __name__ == "__main__":
- import sys
- import os
- if len(sys.argv) != 2:
- print('wrong number of arguments, expected one (game file)')
- exit(1)
- game_file_name = sys.argv[1]
- game = Game(game_file_name)
- if os.path.exists(game_file_name):
- if not os.path.isfile(game_file_name):
- print('game file name does not refer to a valid game file')
- else:
- with open(game_file_name, 'r') as f:
- lines = f.readlines()
- for i in range(len(lines)):
- line = lines[i]
- print("FILE INPUT LINE %5s: %s" % (i, line), end='')
- game.io.handle_input(line, store=False)
- else:
- game.io.handle_input('GEN_WORLD Y:16,X:16 bar')
- game.io.run_loop_with_server()