From: Christian Heller Date: Thu, 24 Aug 2017 21:45:01 +0000 (+0200) Subject: Refactor transfer of task command arguments. X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/blog?a=commitdiff_plain;h=9a83921c91a36e7dcb53ee1ea20605cdb6127c26;p=plomrogue2-experiments Refactor transfer of task command arguments. --- diff --git a/server.py b/server.py index 6f79e0d..215317d 100755 --- a/server.py +++ b/server.py @@ -79,40 +79,47 @@ class IO_Handler(socketserver.BaseRequestHandler): self.request.close() +class Task: + + def __init__(self, name, args=(), kwargs={}): + self.name = name + self.args = args + self.kwargs = kwargs + self.todo = 1 + + class Thing: def __init__(self, position): self.position = position - self.task = 'wait' - self.todo = 0 + self.task = Task('wait') def task_wait(self): pass - def task_moveup(self): - self.position[0] -= 1 - - def task_movedown(self): - self.position[0] += 1 + def task_move(self, direction): + if direction == 'UP': + self.position[0] -= 1 + elif direction == 'DOWN': + self.position[0] += 1 def decide_task(self): self.set_task('wait') - def set_task(self, task): - self.task = task - self.todo = 1 + def set_task(self, task, *args, **kwargs): + self.task = Task(task, args, kwargs) def proceed(self, is_AI=True): """Further the thing in its tasks. - Decrements self.todo; if it thus falls to <= 0, enacts the method whose - name is 'task_' + self.task and sets self.task = None. If is_AI, calls - self.decide_task to decide a new self.task. + Decrements .task.todo; if it thus falls to <= 0, enacts method whose + name is 'task_' + self.task.name and sets .task = None. If is_AI, calls + .decide_task to decide a self.task. """ - self.todo -= 1 - if self.todo <= 0: - task= getattr(self, 'task_' + self.task) - task() + self.task.todo -= 1 + if self.task.todo <= 0: + task= getattr(self, 'task_' + self.task.name) + task(*self.task.args, **self.task.kwargs) self.task = None if is_AI and self.task is None: self.decide_task() @@ -245,13 +252,10 @@ class CommandHandler: self.send_to(connection_id, str(self.world.turn)) def cmd_move(self, direction, connection_id): - """Set player task to 'moveup' or 'movedown', finish player turn.""" + """Set player task to 'move' with direction arg, finish player turn.""" if not direction in {'UP', 'DOWN'}: raise ArgumentError('MOVE ARGUMENT MUST BE "UP" or "DOWN"') - if direction == 'UP': - self.world.player.set_task('moveup') - else: - self.world.player.set_task('movedown') + self.world.player.set_task('move', direction=direction) self.proceed_to_next_player_turn(connection_id) def cmd_wait(self, connection_id):