Mercurial > sypikslang
comparison gamelib/visualize.py @ 149:e49f2dba0ad4
More visualization wrangling.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Fri, 11 May 2012 17:13:28 +0200 |
parents | 2587f8c34f84 |
children |
comparison
equal
deleted
inserted
replaced
148:3abb05f7e720 | 149:e49f2dba0ad4 |
---|---|
3 from gamelib.lab import Lab | 3 from gamelib.lab import Lab |
4 | 4 |
5 | 5 |
6 COLORS = { | 6 COLORS = { |
7 'schematic': 'green', | 7 'schematic': 'green', |
8 'research': 'pink', | 8 'research': 'blue', |
9 } | 9 } |
10 | 10 |
11 | 11 |
12 def color(science): | 12 def color(science): |
13 return COLORS[science.SCIENCE_TYPE] | 13 return COLORS[science.SCIENCE_TYPE] |
14 | 14 |
15 | 15 |
16 def add_node(rt, science): | 16 def add_node(rt, science): |
17 rt.add_node(science, label=science.NAME, color=color(science)) | 17 rt.add_node(science, label=science.NAME, color=color(science), |
18 group=science.NAME, fillcolor='light' + color(science), | |
19 style='filled') | |
18 | 20 |
19 | 21 |
20 def add_pre_node(rt, prior, science, points): | 22 def add_pre_node(rt, prior, science, points): |
21 name = "%s%s" % (science.NAME[:3], points) | 23 name = "%s%s" % (science.NAME[:3], points) |
22 if name not in rt: | 24 if name not in rt: |
23 rt.add_node(name, color=color(science)) | 25 rt.add_node(name, color=color(science), group=science.NAME) |
24 rt.add_edge(prior, name, color=color(science)) | 26 rt.add_edge(prior, name, color=color(science)) |
25 return name | 27 return name |
26 | 28 |
27 | 29 |
28 def add_prereqs(rt, science): | 30 def add_prereqs(rt, science): |
31 for i in range(points): | 33 for i in range(points): |
32 prior = add_pre_node(rt, prior, pre, i + 1) | 34 prior = add_pre_node(rt, prior, pre, i + 1) |
33 rt.add_edge(prior, science, color=color(science)) | 35 rt.add_edge(prior, science, color=color(science)) |
34 | 36 |
35 | 37 |
36 def construct_research_tree(lab): | 38 def graph_sciences(rt, sciences): |
37 rt = networkx.DiGraph() | |
38 sciences = lab.new_research + lab.new_schematics | |
39 for science in sciences: | 39 for science in sciences: |
40 add_node(rt, science) | 40 add_node(rt, science) |
41 for science in sciences: | 41 for science in sciences: |
42 add_prereqs(rt, science) | 42 add_prereqs(rt, science) |
43 | |
44 | |
45 def construct_research_tree(lab): | |
46 rt = networkx.DiGraph() | |
47 # We do these separately for a better layout. | |
48 graph_sciences(rt, lab.new_research) | |
49 graph_sciences(rt, lab.new_schematics) | |
43 return rt | 50 return rt |
44 | 51 |
45 | 52 |
46 def draw(rt): | 53 def draw(rt): |
47 agraph = networkx.to_agraph(rt) | 54 agraph = networkx.to_agraph(rt) |