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)