Various grapher improvements.
This commit is contained in:
parent
67a887f432
commit
74b1589b57
1 changed files with 37 additions and 27 deletions
|
@ -59,6 +59,8 @@ def roomlabel(loc):
|
||||||
else:
|
else:
|
||||||
short = short[0].upper() + short[1:]
|
short = short[0].upper() + short[1:]
|
||||||
description += "\\n" + short
|
description += "\\n" + short
|
||||||
|
if loc in startlocs:
|
||||||
|
description += "\\n(" + ",".join(startlocs[loc]).lower() + ")"
|
||||||
return description
|
return description
|
||||||
|
|
||||||
# A forwarder is a location that you can't actually stop in - when you go there
|
# A forwarder is a location that you can't actually stop in - when you go there
|
||||||
|
@ -124,29 +126,13 @@ if __name__ == "__main__":
|
||||||
else:
|
else:
|
||||||
startlocs[location] = [objname]
|
startlocs[location] = [objname]
|
||||||
|
|
||||||
startlocs = {}
|
# Compute reachability, using forwards.
|
||||||
for obj in db["objects"]:
|
# Dictionary ke6y is (from, to) iff its a valid link,
|
||||||
objname = obj[0]
|
# value is correspoinding motion verbs.
|
||||||
location = obj[1].get("locations")
|
links = {}
|
||||||
if "OBJ" not in objname and location != "LOC_NOWHERE" and ("immovable" not in obj[1] or not obj[1]["immovable"]):
|
nodes = set()
|
||||||
if location in startlocs:
|
|
||||||
startlocs[location].append(objname)
|
|
||||||
else:
|
|
||||||
startlocs[location] = [objname]
|
|
||||||
|
|
||||||
print("digraph G {")
|
|
||||||
|
|
||||||
for (loc, attrs) in db["locations"]:
|
|
||||||
if is_forwarder(loc):
|
|
||||||
continue
|
|
||||||
if not subset(loc):
|
|
||||||
continue
|
|
||||||
node_label = roomlabel(loc)
|
|
||||||
if loc in startlocs:
|
|
||||||
node_label += "\\n" + ",".join(startlocs[loc]).lower()
|
|
||||||
print(' %s [shape=box,label="%s"]' % (loc[4:], node_label))
|
|
||||||
|
|
||||||
for (loc, attrs) in db["locations"]:
|
for (loc, attrs) in db["locations"]:
|
||||||
|
nodes.add(loc)
|
||||||
travel = attrs["travel"]
|
travel = attrs["travel"]
|
||||||
if len(travel) > 0:
|
if len(travel) > 0:
|
||||||
for dest in travel:
|
for dest in travel:
|
||||||
|
@ -158,8 +144,32 @@ if __name__ == "__main__":
|
||||||
dest = forward(action[1])
|
dest = forward(action[1])
|
||||||
if not (subset(loc) or subset(dest)):
|
if not (subset(loc) or subset(dest)):
|
||||||
continue
|
continue
|
||||||
arc = "%s -> %s" % (loc[4:], dest[4:])
|
links[(loc, dest)] = verbs
|
||||||
label=",".join(verbs).lower()
|
|
||||||
|
neighbors = set()
|
||||||
|
for loc in nodes:
|
||||||
|
for (f, t) in links:
|
||||||
|
if f == 'LOC_NOWHERE' or t == 'LOC_NOWHERE':
|
||||||
|
continue
|
||||||
|
if (f == loc and subset(t)) or (t == loc and subset(f)):
|
||||||
|
if loc not in neighbors:
|
||||||
|
neighbors.add(loc)
|
||||||
|
|
||||||
|
print("digraph G {")
|
||||||
|
|
||||||
|
for loc in nodes:
|
||||||
|
if is_forwarder(loc):
|
||||||
|
continue
|
||||||
|
node_label = roomlabel(loc)
|
||||||
|
if subset(loc):
|
||||||
|
print(' %s [shape=box,label="%s"]' % (loc[4:], node_label))
|
||||||
|
elif loc in neighbors:
|
||||||
|
print(' %s [label="%s"]' % (loc[4:], node_label))
|
||||||
|
|
||||||
|
# Draw arcs
|
||||||
|
for (f, t) in links:
|
||||||
|
arc = "%s -> %s" % (f[4:], t[4:])
|
||||||
|
label=",".join(links[(f, t)]).lower()
|
||||||
if len(label) > 0:
|
if len(label) > 0:
|
||||||
arc += ' [label="%s"]' % label
|
arc += ' [label="%s"]' % label
|
||||||
print(" " + arc)
|
print(" " + arc)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue