X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=server%2Fupdate_map_memory.py;fp=server%2Fupdate_map_memory.py;h=d018e84d01ee60f8d108071514a54d4c83a3fa1f;hb=f6a1bf0aa76165c104d74fe8dfaf674d3e63b52d;hp=0000000000000000000000000000000000000000;hpb=d29cadf50b9a1daed21fa1d68a5c86ca5d953856;p=plomrogue diff --git a/server/update_map_memory.py b/server/update_map_memory.py new file mode 100644 index 0000000..d018e84 --- /dev/null +++ b/server/update_map_memory.py @@ -0,0 +1,49 @@ +# This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3 +# or any later version. For details on its copyright, license, and warranties, +# see the file NOTICE in the root directory of the PlomRogue source package. + + +def update_map_memory(t, age_map=True): + """Update t's T_MEMMAP with what's in its FOV now,age its T_MEMMEPTHMAP.""" + from server.utils import c_pointer_to_bytearray, libpr + from server.config.world_data import world_db + + def age_some_memdepthmap_on_nonfov_cells(): + # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so: + # ord_v = ord("v") + # ord_0 = ord("0") + # ord_9 = ord("9") + # for pos in [pos for pos in range(world_db["MAP_LENGTH"] ** 2) + # if not ord_v == t["fovmap"][pos] + # if ord_0 <= t["T_MEMDEPTHMAP"][pos] + # if ord_9 > t["T_MEMDEPTHMAP"][pos] + # if not rand.next() % (2 ** + # (t["T_MEMDEPTHMAP"][pos] - 48))]: + # t["T_MEMDEPTHMAP"][pos] += 1 + memdepthmap = c_pointer_to_bytearray(t["T_MEMDEPTHMAP"]) + fovmap = c_pointer_to_bytearray(t["fovmap"]) + libpr.age_some_memdepthmap_on_nonfov_cells(memdepthmap, fovmap) + + 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] + if age_map: + age_some_memdepthmap_on_nonfov_cells() + 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))