home
·
contact
·
privacy
projects
/
plomrogue
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
aa19546
)
Server: Optimize thing position calculation.
author
Christian Heller
<c.heller@plomlompom.de>
Thu, 3 Mar 2016 01:04:49 +0000
(
02:04
+0100)
committer
Christian Heller
<c.heller@plomlompom.de>
Thu, 3 Mar 2016 01:04:49 +0000
(
02:04
+0100)
server/actions.py
patch
|
blob
|
history
server/ai.py
patch
|
blob
|
history
server/commands.py
patch
|
blob
|
history
server/decrement_lifepoints.py
patch
|
blob
|
history
server/io.py
patch
|
blob
|
history
server/new_thing.py
patch
|
blob
|
history
server/update_map_memory.py
patch
|
blob
|
history
server/worldstate_write_helpers.py
patch
|
blob
|
history
diff --git
a/server/actions.py
b/server/actions.py
index 7222ad871cea7c0f3153cf8a61833dff6691d02d..4dc470b69d068ad5173946ae9ec2d62eb114dc53 100644
(file)
--- a/
server/actions.py
+++ b/
server/actions.py
@@
-55,9
+55,11
@@
def actor_move(t):
if passable:
t["T_POSY"] = move_result[1]
t["T_POSX"] = move_result[2]
if passable:
t["T_POSY"] = move_result[1]
t["T_POSX"] = move_result[2]
+ t["pos"] = move_result[1] * world_db["MAP_LENGTH"] + move_result[2]
for id in t["T_CARRIES"]:
world_db["Things"][id]["T_POSY"] = move_result[1]
world_db["Things"][id]["T_POSX"] = move_result[2]
for id in t["T_CARRIES"]:
world_db["Things"][id]["T_POSY"] = move_result[1]
world_db["Things"][id]["T_POSX"] = move_result[2]
+ world_db["Things"][id]["pos"] = t["pos"]
build_fov_map(t)
if t == world_db["Things"][0]:
log("You MOVE " + dir + ".")
build_fov_map(t)
if t == world_db["Things"][0]:
log("You MOVE " + dir + ".")
@@
-71,8
+73,7
@@
def actor_pickup(t):
"""
ids = [id for id in world_db["Things"] if world_db["Things"][id] != t
if not world_db["Things"][id]["carried"]
"""
ids = [id for id in world_db["Things"] if world_db["Things"][id] != t
if not world_db["Things"][id]["carried"]
- if world_db["Things"][id]["T_POSY"] == t["T_POSY"]
- if world_db["Things"][id]["T_POSX"] == t["T_POSX"]]
+ if world_db["Things"][id]["pos"] == t["pos"]]
if len(ids):
lowest_tid = -1
for iid in ids:
if len(ids):
lowest_tid = -1
for iid in ids:
diff --git
a/server/ai.py
b/server/ai.py
index 661d3022acefdeba50460ff4134d4adf3c61084f..71961a33c401d3ec6d5be95318d61f811f43f6f9 100644
(file)
--- a/
server/ai.py
+++ b/
server/ai.py
@@
-59,14
+59,18
@@
def get_dir_to_target(t, filter):
def animates_in_fov(maplength):
return [Thing for Thing in world_db["Things"].values()
if Thing["T_LIFEPOINTS"] and not Thing["carried"]
def animates_in_fov(maplength):
return [Thing for Thing in world_db["Things"].values()
if Thing["T_LIFEPOINTS"] and not Thing["carried"]
- and not Thing == t and 118 == t["fovmap"][Thing["T_POSY"] *
- maplength + Thing["T_POSX"]]]
+ and not Thing == t and 118 == t["fovmap"][Thing["pos"]]]
+
+ #def animates_in_fov_gen(maplength):
+ # return (Thing for Thing in world_db["Things"].values()
+ # if Thing["T_LIFEPOINTS"] and not Thing["carried"]
+ # and not Thing == t and 118 == t["fovmap"][Thing["pos"]])
def good_attack_target(v):
eat_cost = eat_vs_hunger_threshold(t["T_TYPE"])
def good_attack_target(v):
eat_cost = eat_vs_hunger_threshold(t["T_TYPE"])
- ty
pe
= world_db["ThingTypes"][v["T_TYPE"]]
- type_corpse = world_db["ThingTypes"][ty
pe
["TT_CORPSE_ID"]]
- if t["T_LIFEPOINTS"] > ty
pe
["TT_LIFEPOINTS"] \
+ ty = world_db["ThingTypes"][v["T_TYPE"]]
+ type_corpse = world_db["ThingTypes"][ty["TT_CORPSE_ID"]]
+ if t["T_LIFEPOINTS"] > ty["TT_LIFEPOINTS"] \
and type_corpse["TT_TOOL"] == "food" \
and type_corpse["TT_TOOLPOWER"] > eat_cost:
return True
and type_corpse["TT_TOOL"] == "food" \
and type_corpse["TT_TOOLPOWER"] > eat_cost:
return True
@@
-129,10
+133,10
@@
def get_dir_to_target(t, filter):
set_cells_passable_on_memmap_to_65534_on_scoremap()
maplen = world_db["MAP_LENGTH"]
if "a" == filter:
set_cells_passable_on_memmap_to_65534_on_scoremap()
maplen = world_db["MAP_LENGTH"]
if "a" == filter:
- [set_map_score(Thing["
T_POSY"] * maplen + Thing["T_POSX
"], 0) for
+ [set_map_score(Thing["
pos
"], 0) for
Thing in animates_in_fov(maplen) if good_attack_target(Thing)]
elif "f" == filter:
Thing in animates_in_fov(maplen) if good_attack_target(Thing)]
elif "f" == filter:
- [set_map_score(Thing["
T_POSY"] * maplen + Thing["T_POSX
"], 0) for
+ [set_map_score(Thing["
pos
"], 0) for
Thing in animates_in_fov(maplen) if good_flee_target(Thing)]
elif "c" == filter:
eat_cost = eat_vs_hunger_threshold(t["T_TYPE"])
Thing in animates_in_fov(maplen) if good_flee_target(Thing)]
elif "c" == filter:
eat_cost = eat_vs_hunger_threshold(t["T_TYPE"])
@@
-145,12
+149,12
@@
def get_dir_to_target(t, filter):
elif "s" == filter:
zero_score_map_where_char_on_memdepthmap(mem_depth_c[0])
if "f" == filter:
elif "s" == filter:
zero_score_map_where_char_on_memdepthmap(mem_depth_c[0])
if "f" == filter:
- [set_map_score(Thing["
T_POSY"] * maplen + Thing["T_POSX
"], 65535)
- for Thing in animates_in_fov(maplen)
if get_map_score(
-
Thing["T_POSY"] * maplen + Thing["T_POSX
"])]
+ [set_map_score(Thing["
pos
"], 65535)
+ for Thing in animates_in_fov(maplen)
+
if get_map_score(Thing["pos
"])]
elif "a" != filter:
elif "a" != filter:
- [set_map_score(Thing["
T_POSY"] * maplen + Thing["T_POSX"],
-
65535)
for Thing in animates_in_fov(maplen)]
+ [set_map_score(Thing["
pos"], 65535)
+ for Thing in animates_in_fov(maplen)]
def rand_target_dir(neighbors, cmp, dirs):
candidates = []
def rand_target_dir(neighbors, cmp, dirs):
candidates = []
@@
-174,7
+178,7
@@
def get_dir_to_target(t, filter):
import math
dir_to_target = False
dirs = "edcxsw"
import math
dir_to_target = False
dirs = "edcxsw"
- eye_pos = t["
T_POSY"] * world_db["MAP_LENGTH"] + t["T_POSX
"]
+ eye_pos = t["
pos
"]
neighbors = get_neighbor_scores(dirs, eye_pos)
minmax_start = 0 if "f" == filter else 65535 - 1
minmax_neighbor = minmax_start
neighbors = get_neighbor_scores(dirs, eye_pos)
minmax_start = 0 if "f" == filter else 65535 - 1
minmax_neighbor = minmax_start
@@
-230,8
+234,7
@@
def standing_on_food(t):
eat_cost = eat_vs_hunger_threshold(t["T_TYPE"])
for id in [id for id in world_db["Things"] if world_db["Things"][id] != t
if not world_db["Things"][id]["carried"]
eat_cost = eat_vs_hunger_threshold(t["T_TYPE"])
for id in [id for id in world_db["Things"] if world_db["Things"][id] != t
if not world_db["Things"][id]["carried"]
- if world_db["Things"][id]["T_POSY"] == t["T_POSY"]
- if world_db["Things"][id]["T_POSX"] == t["T_POSX"]
+ if world_db["Things"][id]["pos"] == t["pos"]
if world_db["ThingTypes"][world_db["Things"][id]["T_TYPE"]]
["TT_TOOL"] == "food"
if world_db["ThingTypes"][world_db["Things"][id]["T_TYPE"]]
if world_db["ThingTypes"][world_db["Things"][id]["T_TYPE"]]
["TT_TOOL"] == "food"
if world_db["ThingTypes"][world_db["Things"][id]["T_TYPE"]]
diff --git
a/server/commands.py
b/server/commands.py
index 7755f880fdb78d1489894c8212466fdac958d3a8..536e330522a6c98e2c8a8d26856049da79db43a9 100644
(file)
--- a/
server/commands.py
+++ b/
server/commands.py
@@
-57,8
+57,7
@@
def command_thingshere(str_y, str_x):
for id in world_db["Things"]
if not world_db["Things"][id]["carried"]
if world_db["Things"][id]["T_TYPE"] == tid
for id in world_db["Things"]
if not world_db["Things"][id]["carried"]
if world_db["Things"][id]["T_TYPE"] == tid
- if y == world_db["Things"][id]["T_POSY"]
- if x == world_db["Things"][id]["T_POSX"]]:
+ if pos == world_db["Things"][id]["pos"]]:
type = world_db["Things"][id]["T_TYPE"]
name = world_db["ThingTypes"][type]["TT_NAME"]
strong_write(io_db["file_out"], name + "\n")
type = world_db["Things"][id]["T_TYPE"]
name = world_db["ThingTypes"][type]["TT_NAME"]
strong_write(io_db["file_out"], name + "\n")
@@
-403,7
+402,9
@@
def setter_tpos(axis):
val = integer_test(str_int, 0, 255)
if None != val:
if val < world_db["MAP_LENGTH"]:
val = integer_test(str_int, 0, 255)
if None != val:
if val < world_db["MAP_LENGTH"]:
- world_db["Things"][command_tid.id]["T_POS" + axis] = val
+ t = world_db["Things"][command_tid.id]
+ t["T_POS" + axis] = val
+ t["pos"] = t["T_POSY"] * world_db["MAP_LENGTH"] + t["T_POSX"]
if world_db["WORLD_ACTIVE"] \
and world_db["Things"][command_tid.id]["T_LIFEPOINTS"]:
build_fov_map(world_db["Things"][command_tid.id])
if world_db["WORLD_ACTIVE"] \
and world_db["Things"][command_tid.id]["T_LIFEPOINTS"]:
build_fov_map(world_db["Things"][command_tid.id])
@@
-442,8
+443,7
@@
def play_pickup():
t = world_db["Things"][0]
ids = [tid for tid in world_db["Things"] if tid
if not world_db["Things"][tid]["carried"]
t = world_db["Things"][0]
ids = [tid for tid in world_db["Things"] if tid
if not world_db["Things"][tid]["carried"]
- if world_db["Things"][tid]["T_POSY"] == t["T_POSY"]
- if world_db["Things"][tid]["T_POSX"] == t["T_POSX"]]
+ if world_db["Things"][tid]["pos"] == t["pos"]]
from server.config.commands import play_pickup_attempt_hook
if not len(ids):
log("NOTHING to pick up.")
from server.config.commands import play_pickup_attempt_hook
if not len(ids):
log("NOTHING to pick up.")
diff --git
a/server/decrement_lifepoints.py
b/server/decrement_lifepoints.py
index b8cab9740abd995b4e8938c61644b079c06a45ca..d3043deb273e3e5b084ec533a102231397f26160 100644
(file)
--- a/
server/decrement_lifepoints.py
+++ b/
server/decrement_lifepoints.py
@@
-17,8
+17,6
@@
def decrement_lifepoints(t):
live_tid = t["T_TYPE"]
for tid in t["T_CARRIES"]:
t["T_CARRIES"].remove(tid)
live_tid = t["T_TYPE"]
for tid in t["T_CARRIES"]:
t["T_CARRIES"].remove(tid)
- world_db["Things"][tid]["T_POSY"] = t["T_POSY"]
- world_db["Things"][tid]["T_POSX"] = t["T_POSX"]
world_db["Things"][tid]["carried"] = False
t["T_TYPE"] = world_db["ThingTypes"][t["T_TYPE"]]["TT_CORPSE_ID"]
if world_db["Things"][0] == t:
world_db["Things"][tid]["carried"] = False
t["T_TYPE"] = world_db["ThingTypes"][t["T_TYPE"]]["TT_CORPSE_ID"]
if world_db["Things"][0] == t:
diff --git
a/server/io.py
b/server/io.py
index bb5d3ac13e7661feb6bfd3b7f2594038759c6772..ad30cc2d1fe892e1fcdf65549d6d5fadb2aad60f 100644
(file)
--- a/
server/io.py
+++ b/
server/io.py
@@
-185,7
+185,7
@@
def save_world():
t = world_db["Things"][tid]
for key in sorted(t.keys()):
if key not in {"T_CARRIES", "carried", "fovmap", "T_MEMMAP",
t = world_db["Things"][tid]
for key in sorted(t.keys()):
if key not in {"T_CARRIES", "carried", "fovmap", "T_MEMMAP",
- "T_MEMTHING", "T_MEMDEPTHMAP"}:
+ "T_MEMTHING", "T_MEMDEPTHMAP"
, "pos"
}:
argument = t[key]
string += key + " " + (quote_escape(argument) if \
str == type(argument) else str(argument)) + "\n"
argument = t[key]
string += key + " " + (quote_escape(argument) if \
str == type(argument) else str(argument)) + "\n"
diff --git
a/server/new_thing.py
b/server/new_thing.py
index 84bc5917d15ec5abc385fd080579088e0c357504..5c48177307d26fef4edf6f0092c353aab624ff5d 100644
(file)
--- a/
server/new_thing.py
+++ b/
server/new_thing.py
@@
-16,6
+16,7
@@
def new_Thing(_type, pos=(0, 0)):
thing["T_TYPE"] = _type
thing["T_POSY"] = pos[0]
thing["T_POSX"] = pos[1]
thing["T_TYPE"] = _type
thing["T_POSY"] = pos[0]
thing["T_POSX"] = pos[1]
+ thing["pos"] = thing["T_POSY"] * world_db["MAP_LENGTH"] + thing["T_POSX"]
if world_db["WORLD_ACTIVE"] and thing["T_LIFEPOINTS"]:
build_fov_map(thing)
return thing
if world_db["WORLD_ACTIVE"] and thing["T_LIFEPOINTS"]:
build_fov_map(thing)
return thing
diff --git
a/server/update_map_memory.py
b/server/update_map_memory.py
index cd5323c0b6e6e0c3f06429ca8c232a4f7947e1af..003e0cf54778f8f16aeb1fd65f58b2cace242961 100644
(file)
--- a/
server/update_map_memory.py
+++ b/
server/update_map_memory.py
@@
-56,5
+56,4
@@
def update_map_memory(t, age_map=True):
if not world_db["Things"][id]["carried"]
if not world_db["ThingTypes"][world_db["Things"][id]["T_TYPE"]]
["TT_LIFEPOINTS"]
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]["T_POSY"] * maplength)
- + world_db["Things"][id]["T_POSX"]]]
+ if ord_v == t["fovmap"][world_db["Things"][id]["pos"]]]
diff --git
a/server/worldstate_write_helpers.py
b/server/worldstate_write_helpers.py
index 8ec4b354bc2707a80de03d2117d2e65a366bd58d..cda1bfcea13c23a83db13ecfc5a8d6ae8961fec3 100644
(file)
--- a/
server/worldstate_write_helpers.py
+++ b/
server/worldstate_write_helpers.py
@@
-37,12
+37,10
@@
def write_fov_map():
if not world_db["Things"][id]["carried"]
if world_db["Things"][id]["T_TYPE"] == tid
if world_db["Things"][0]["fovmap"][
if not world_db["Things"][id]["carried"]
if world_db["Things"][id]["T_TYPE"] == tid
if world_db["Things"][0]["fovmap"][
- world_db["Things"][id]["T_POSY"] * length
- + world_db["Things"][id]["T_POSX"]] == ord_v]:
+ world_db["Things"][id]["pos"]] == ord_v]:
type = world_db["Things"][id]["T_TYPE"]
c = ord(world_db["ThingTypes"][type]["TT_SYMBOL"])
type = world_db["Things"][id]["T_TYPE"]
c = ord(world_db["ThingTypes"][type]["TT_SYMBOL"])
- fov[world_db["Things"][id]["T_POSY"] * length
- + world_db["Things"][id]["T_POSX"]] = c
+ fov[world_db["Things"][id]["pos"]] = c
return write_map(fov, length)
def write_mem_map():
return write_map(fov, length)
def write_mem_map():