From ba9a4a402779b49f3b960f937ca73565a4854e8d Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Sat, 5 Dec 2020 06:36:57 +0100
Subject: [PATCH] Fix buggy task code leading to endless collision flicker.

---
 plomrogue/things.py | 24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)

diff --git a/plomrogue/things.py b/plomrogue/things.py
index 3b00d1f..895f5ce 100644
--- a/plomrogue/things.py
+++ b/plomrogue/things.py
@@ -1,4 +1,4 @@
-from plomrogue.errors import GameError
+from plomrogue.errors import GameError, PlayError
 from plomrogue.mapping import YX
 
 
@@ -285,26 +285,20 @@ class ThingAnimate(Thing):
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        self.next_tasks = []
-        self.set_task('WAIT')
+        self.next_task = [None]
+        self.task = None
         self._fov = None
 
-    def set_task(self, task_name, args=()):
-        task_class = self.game.tasks[task_name]
-        self.task = task_class(self, args)
-        self.task.check()  # will throw GameError if necessary
-
     def set_next_task(self, task_name, args=()):
         task_class = self.game.tasks[task_name]
-        self.next_tasks += [task_class(self, args)]
+        self.next_task = [task_class(self, args)]
 
     def get_next_task(self):
-        if len(self.next_tasks) > 0:
-            task = self.next_tasks.pop(0)
+        if self.next_task[0]:
+            task = self.next_task[0]
+            self.next_task = [None]
             task.check()
             return task
-        else:
-            return None
 
     def proceed(self):
         self.drunk -= 1
@@ -321,12 +315,12 @@ class ThingAnimate(Thing):
             return
         try:
             self.task.check()
-        except GameError as e:
+        except (PlayError, GameError) as e:
             self.task = None
             raise e
         self.task.todo -= 1
         if self.task.todo <= 0:
-            self._last_task_result = self.task.do()
+            self.task.do()
             self.game.changed = True
             self.task = self.get_next_task()
 
-- 
2.30.2