Mercurial > sypikslang
view gamelib/visualize.py @ 182:0cb67bf20f89
Remove unneeded skellington cruft
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sat, 12 May 2012 12:51:19 +0200 |
parents | e49f2dba0ad4 |
children |
line wrap: on
line source
import networkx from gamelib.lab import Lab COLORS = { 'schematic': 'green', 'research': 'blue', } def color(science): return COLORS[science.SCIENCE_TYPE] def add_node(rt, science): rt.add_node(science, label=science.NAME, color=color(science), group=science.NAME, fillcolor='light' + color(science), style='filled') def add_pre_node(rt, prior, science, points): name = "%s%s" % (science.NAME[:3], points) if name not in rt: rt.add_node(name, color=color(science), group=science.NAME) rt.add_edge(prior, name, color=color(science)) return name def add_prereqs(rt, science): for pre, points in science.PREREQUISITES: prior = pre for i in range(points): prior = add_pre_node(rt, prior, pre, i + 1) rt.add_edge(prior, science, color=color(science)) def graph_sciences(rt, sciences): for science in sciences: add_node(rt, science) for science in sciences: add_prereqs(rt, science) def construct_research_tree(lab): rt = networkx.DiGraph() # We do these separately for a better layout. graph_sciences(rt, lab.new_research) graph_sciences(rt, lab.new_schematics) return rt def draw(rt): agraph = networkx.to_agraph(rt) agraph.graph_attr['label'] = 'Research Tree' agraph.write('research_tree.dot') def main(): lab = Lab({'science': {}}) research_tree = construct_research_tree(lab) draw(research_tree)