From: Christian Heller Date: Wed, 26 Aug 2015 01:39:07 +0000 (+0200) Subject: Further server optimization by outsourcing to libplomrogue. X-Git-Tag: tce~325 X-Git-Url: https://plomlompom.com/repos/?p=plomrogue;a=commitdiff_plain;h=e82bb6fc98e7fca1856730bbbb22def6f86a40a0 Further server optimization by outsourcing to libplomrogue. --- diff --git a/roguelike-server b/roguelike-server index db5e93b..4944701 100755 --- a/roguelike-server +++ b/roguelike-server @@ -39,6 +39,12 @@ def prep_library(): return libpr +def c_pointer_to_bytearray(ba): + """Return C char * pointer to ba.""" + type = ctypes.c_char * len(ba) + return type.from_buffer(ba) + + def strong_write(file, string): """Apply write(string), then flush().""" file.write(string) @@ -821,6 +827,17 @@ def get_dir_to_target(t, filter): return True return False + def set_cells_passable_on_memmap_to_65534_on_scoremap(): + # OUTSOURCED TO libplomrogue.so: + # memmap = t["T_MEMMAP"] + # for i in [i for i in range(world_db["MAP_LENGTH"] ** 2) + # if ord_dot == memmap[i]]: + # set_map_score(i, 65534) # i.e. 65535-1 + map = c_pointer_to_bytearray(t["T_MEMMAP"]) + if libpr.set_cells_passable_on_memmap_to_65534_on_scoremap(map): + raise RuntimeError("No score map allocated for " + "set_cells_passable_on_memmap_to_65534_on_scoremap().") + def init_score_map(): test = libpr.init_score_map() if test: @@ -828,9 +845,7 @@ def get_dir_to_target(t, filter): ord_dot = ord(".") ord_v = ord("v") ord_blank = ord(" ") - for i in [i for i in range(world_db["MAP_LENGTH"] ** 2) - if ord_dot == t["T_MEMMAP"][i]]: - set_map_score(i, 65535 - 1) + set_cells_passable_on_memmap_to_65534_on_scoremap() if "a" == filter: for id in world_db["Things"]: Thing = world_db["Things"][id] diff --git a/src/server/libplomrogue.c b/src/server/libplomrogue.c index 0e8f3fb..7cd76d9 100644 --- a/src/server/libplomrogue.c +++ b/src/server/libplomrogue.c @@ -599,3 +599,21 @@ extern void age_some_memdepthmap_on_nonfov_cells(char * memdepthmap, } } } + +extern uint8_t set_cells_passable_on_memmap_to_65534_on_scoremap(char * mem_map) +{ + if (!score_map) + { + return 1; + } + uint32_t map_size = maplength * maplength; + uint16_t pos; + for (pos = 0; pos < map_size; pos++) + { + if ('.' == mem_map[pos]) + { + score_map[pos] = 65534; + } + } + return 0; +}