-
Notifications
You must be signed in to change notification settings - Fork 4
/
TrailSystem.pde
72 lines (61 loc) · 2.07 KB
/
TrailSystem.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// TrailSystem.pde
// (c) 2012 David Troy (@davetroy)
//
// TrailSystem is a wrapper for a Hashtable that tracks trails for individual objects
// in this case, the keys are screenNames associated with tweets. We keep all of the
// active trails in the TrailSystem. When a trail finally fades out and dies, we remove
// it from the system. The system is also responsible for rotating through our color palette.
// (Two palettes provided, courtesy of Friends of the Web, Baltimore -- one dark, one light --
// note that hex colors are provided in 32-bit alpha+rgb order format.)
class TrailSystem {
Hashtable trails;
PFont labelFont;
String[] palette = {"FFF17479","FFF29F63","FFE7CB46","FFB6D061","FF11E686","FF72DDB3","FF60CAE9","FF8999C3","FFBA80C3","FFDD8CB4"};
String[] palette1 = {"FFFF8D91","FFFFB47C","FFFFED72","FFC5DD77","FF33FFA3","FF8AEBC5","FF78D9F5","FF9DACD3","FFCA95D1","FFEDA3C8"};
color[] colors;
int colorIndex;
TrailSystem() {
colors = new color[palette.length];
colorIndex = 0;
trails = new Hashtable();
labelFont = createFont("Helvetica", 12);
for (int i=0; i<palette.length; i++) {
colors[i] = color(unhex(palette[i]));
}
}
color nextColor() {
if (colorIndex>=colors.length) colorIndex=0;
return colors[colorIndex++];
}
Trail findOrCreateTrail(String screenName) {
Trail trail = (Trail)trails.get(screenName);
if (trail == null) {
trail = new Trail(nextColor());
trails.put(screenName, trail);
}
return trail;
}
void addTweets(ArrayList<Tweet> tweets) {
Iterator<Tweet> it = tweets.iterator();
while (it.hasNext()) {
Tweet t = it.next();
Trail trail = findOrCreateTrail(t.screenName);
trail.add(t);
}
}
int size() {
return trails.size();
}
void draw() {
Iterator<Trail> it = trails.values().iterator();
while (it.hasNext()) {
Trail tr = it.next();
textFont(labelFont);
tr.draw();
// remove the trail from the system if it is dead
if (tr.isDead()) {
it.remove();
}
}
}
}