home · contact · privacy
Server: Optimize thing position calculation.
[plomrogue] / server / update_map_memory.py
index d018e84d01ee60f8d108071514a54d4c83a3fa1f..003e0cf54778f8f16aeb1fd65f58b2cace242961 100644 (file)
@@ -24,26 +24,36 @@ def update_map_memory(t, age_map=True):
         fovmap = c_pointer_to_bytearray(t["fovmap"])
         libpr.age_some_memdepthmap_on_nonfov_cells(memdepthmap, fovmap)
 
+    def update_mem_and_memdepthmap_via_fovmap():
+        # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so:
+        # for pos in [pos for pos in range(world_db["MAP_LENGTH"] ** 2)
+        #             if ord_v == t["fovmap"][pos]]:
+        #     t["T_MEMDEPTHMAP"][pos] = ord_0
+        #     t["T_MEMMAP"][pos] = world_db["MAP"][pos]
+        memdepthmap = c_pointer_to_bytearray(t["T_MEMDEPTHMAP"])
+        memmap = c_pointer_to_bytearray(t["T_MEMMAP"])
+        fovmap = c_pointer_to_bytearray(t["fovmap"])
+        map = c_pointer_to_bytearray(world_db["MAP"])
+        libpr.update_mem_and_memdepthmap_via_fovmap(map, fovmap, memdepthmap,
+                                                    memmap)
+
     if not t["T_MEMMAP"]:
         t["T_MEMMAP"] = bytearray(b' ' * (world_db["MAP_LENGTH"] ** 2))
     if not t["T_MEMDEPTHMAP"]:
         t["T_MEMDEPTHMAP"] = bytearray(b' ' * (world_db["MAP_LENGTH"] ** 2))
-    ord_v = ord("v")
-    ord_0 = ord("0")
-    for pos in [pos for pos in range(world_db["MAP_LENGTH"] ** 2)
-                if ord_v == t["fovmap"][pos]]:
-        t["T_MEMDEPTHMAP"][pos] = ord_0
-        t["T_MEMMAP"][pos] = world_db["MAP"][pos]
+    update_mem_and_memdepthmap_via_fovmap()
     if age_map:
         age_some_memdepthmap_on_nonfov_cells()
+    ord_v = ord("v")
     t["T_MEMTHING"] = [mt for mt in t["T_MEMTHING"]
                        if ord_v != t["fovmap"][(mt[1] * world_db["MAP_LENGTH"])
                                                + mt[2]]]
-    for id in [id for id in world_db["Things"]
-               if not world_db["Things"][id]["carried"]]:
-        type = world_db["Things"][id]["T_TYPE"]
-        if not world_db["ThingTypes"][type]["TT_LIFEPOINTS"]:
-            y = world_db["Things"][id]["T_POSY"]
-            x = world_db["Things"][id]["T_POSX"]
-            if ord_v == t["fovmap"][(y * world_db["MAP_LENGTH"]) + x]:
-                t["T_MEMTHING"].append((type, y, x))
+    maplength = world_db["MAP_LENGTH"]
+    [t["T_MEMTHING"].append((world_db["Things"][id]["T_TYPE"],
+                             world_db["Things"][id]["T_POSY"],
+                             world_db["Things"][id]["T_POSX"]))
+     for id in world_db["Things"]
+     if not world_db["Things"][id]["carried"]
+     if not world_db["ThingTypes"][world_db["Things"][id]["T_TYPE"]]
+                                                              ["TT_LIFEPOINTS"]
+     if ord_v == t["fovmap"][world_db["Things"][id]["pos"]]]