Mercurial > sypikslang
view gamelib/visualize.py @ 146:2587f8c34f84
Science juggling and visualization improvements.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Fri, 11 May 2012 16:20:49 +0200 |
parents | 94258a86f773 |
children | e49f2dba0ad4 |
line wrap: on
line source
import networkx from gamelib.lab import Lab COLORS = { 'schematic': 'green', 'research': 'pink', } def color(science): return COLORS[science.SCIENCE_TYPE] def add_node(rt, science): rt.add_node(science, label=science.NAME, color=color(science)) 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)) 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 construct_research_tree(lab): rt = networkx.DiGraph() sciences = lab.new_research + lab.new_schematics for science in sciences: add_node(rt, science) for science in sciences: add_prereqs(rt, science) 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)