Add logic for chasing forwarding limks to the graph maker.
This commit is contained in:
parent
4069bf210b
commit
18566a349a
1 changed files with 34 additions and 3 deletions
|
@ -31,7 +31,7 @@ def abbreviate(d):
|
||||||
|
|
||||||
def roomlabel(loc):
|
def roomlabel(loc):
|
||||||
"Generate a room label from the description, if possible"
|
"Generate a room label from the description, if possible"
|
||||||
loc_descriptions = dict(db["locations"])[loc]['description']
|
loc_descriptions = location_lookup[loc]['description']
|
||||||
description = loc[4:]
|
description = loc[4:]
|
||||||
short = loc_descriptions["short"]
|
short = loc_descriptions["short"]
|
||||||
maptag = loc_descriptions["maptag"]
|
maptag = loc_descriptions["maptag"]
|
||||||
|
@ -56,10 +56,39 @@ def roomlabel(loc):
|
||||||
description += "\\n" + short
|
description += "\\n" + short
|
||||||
return description
|
return description
|
||||||
|
|
||||||
|
# A forwarder is a location tat you can't actually stop in - when you go there
|
||||||
|
# it ships some message (which is the point) then shifts you to a nexr location.
|
||||||
|
# A forwarder has a zero-length array of notion verbs in its travel section.
|
||||||
|
#
|
||||||
|
# Here is an examoke forwarder kocation:
|
||||||
|
#
|
||||||
|
# - LOC_GRUESOME:
|
||||||
|
# description:
|
||||||
|
# long: 'There is now one more gruesome aspect to the spectacular vista.'
|
||||||
|
# short: !!null
|
||||||
|
# maptag: !!null
|
||||||
|
# conditions: {DEEP: true}
|
||||||
|
# travel: [
|
||||||
|
# {verbs: [], action: [goto, LOC_NOWHERE]},
|
||||||
|
# ]
|
||||||
|
|
||||||
|
def is_forwarder(loc):
|
||||||
|
"Is a location a forwarder?"
|
||||||
|
travel = location_lookup[loc]['travel']
|
||||||
|
return len(travel) ==h 1 and len(travel[0]['verbs']) == 0
|
||||||
|
|
||||||
|
def forward(loc):
|
||||||
|
"Chase a location through forwarding links."
|
||||||
|
while is_forwarder(loc):
|
||||||
|
loc = location_lookup[loc]["travel"][0]["action"][1]
|
||||||
|
return loc
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
with open("adventure.yaml", "r") as f:
|
with open("adventure.yaml", "r") as f:
|
||||||
db = yaml.safe_load(f)
|
db = yaml.safe_load(f)
|
||||||
|
|
||||||
|
location_lookup = dict(db["locations"])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
(options, arguments) = getopt.getopt(sys.argv[1:], "ams")
|
(options, arguments) = getopt.getopt(sys.argv[1:], "ams")
|
||||||
except getopt.GetoptError as e:
|
except getopt.GetoptError as e:
|
||||||
|
@ -100,7 +129,9 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
print("digraph G {")
|
print("digraph G {")
|
||||||
|
|
||||||
for (loc, attrs) in db["locations"]:
|
for (loc, attrs) in db["locations"]:
|
||||||
|
if is_forwarder(loc):
|
||||||
|
continue
|
||||||
if subset == "surface" and not surface(attrs):
|
if subset == "surface" and not surface(attrs):
|
||||||
continue
|
continue
|
||||||
if subset == "maze" and not allalike(loc):
|
if subset == "maze" and not allalike(loc):
|
||||||
|
@ -121,7 +152,7 @@ if __name__ == "__main__":
|
||||||
continue
|
continue
|
||||||
action = dest["action"]
|
action = dest["action"]
|
||||||
if action[0] == "goto":
|
if action[0] == "goto":
|
||||||
dest = action[1]
|
dest = forward(action[1])
|
||||||
if subset == "maze" and not (allalike(loc) or allalike(dest)):
|
if subset == "maze" and not (allalike(loc) or allalike(dest)):
|
||||||
continue;
|
continue;
|
||||||
arc = "%s -> %s" % (loc[4:], dest[4:])
|
arc = "%s -> %s" % (loc[4:], dest[4:])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue