home · contact · privacy
Server: Minor performance optimizations in seeing_thing().
authorChristian Heller <c.heller@plomlompom.de>
Wed, 2 Mar 2016 00:35:30 +0000 (01:35 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 2 Mar 2016 00:35:30 +0000 (01:35 +0100)
server/ai.py

index 6c1aab802de6dea0f11b8d93e997767e842d41ca..854340958c54a3e2873231176187b44865ccf01a 100644 (file)
@@ -86,25 +86,33 @@ def get_dir_to_target(t, filter):
     def seeing_thing():
         maplength = world_db["MAP_LENGTH"]
         if t["fovmap"] and "a" == filter:
-            targets = [Thing for Thing in animates_in_fov(maplength)
-                       if good_attack_target(Thing)]
-            if len(targets):
-                return True
+            try:
+                next((Thing for Thing in animates_in_fov(maplength)
+                            if good_attack_target(Thing)))
+            except StopIteration:
+                return False
+            return True
         elif t["fovmap"] and "f" == filter:
-            targets = [Thing for Thing in animates_in_fov(maplength)
-                       if good_flee_target(Thing)]
-            if len(targets):
-                return True
+            try:
+                next((Thing for Thing in animates_in_fov(maplength)
+                            if good_flee_target(Thing)))
+            except StopIteration:
+                return False
+            return True
         elif t["T_MEMMAP"] and "c" == filter:
             eat_cost = eat_vs_hunger_threshold(t["T_TYPE"])
             ord_blank = ord(" ")
-            for mt in t["T_MEMTHING"]:
-                if ord_blank != chr(t["T_MEMMAP"][(mt[1] * \
-                       world_db["MAP_LENGTH"]) + mt[2]]) \
-                   and world_db["ThingTypes"][mt[0]]["TT_TOOL"] == "food" \
-                   and world_db["ThingTypes"][mt[0]]["TT_TOOLPOWER"] \
-                       > eat_cost:
-                    return True
+            map_len = world_db["MAP_LENGTH"]
+            try:
+                next(mt for mt in t["T_MEMTHING"]
+                     if ord_blank != t["T_MEMMAP"][mt[1] * map_len + mt[2]]
+                     and world_db["ThingTypes"][mt[0]]["TT_TOOL"] == "food"
+                     and world_db["ThingTypes"][mt[0]]["TT_TOOLPOWER"]
+                        > eat_cost)
+            except StopIteration:
+                return False
+            return True
+
         return False
 
     def set_cells_passable_on_memmap_to_65534_on_scoremap():