chiark / gitweb /
pandemic-counter: Makefiles etc.
[reprap-play.git] / pandemic-counter.scad
1 // -*- C -*-
2
3 tokenrad=13;
4 tokenthick=1.8;
5
6 joinwidth=1.0;
7
8 circlerad=15;
9
10 module Letter(depth) {
11   translate([-circlerad,-circlerad])
12     import(file=str("pandemic-counter-l",depth,".dxf"), convexity=100);
13 }
14
15 module Token(depth) {
16   linear_extrude(height=tokenthick) union(){
17     difference(){
18       circle(tokenrad);
19       Letter(depth);
20     }
21     child();
22   }
23 }
24
25 module Token_CDC(){ ////toplevel
26   Token(30){};
27 }
28 module Token_Lab(){ ////toplevel
29   Token(31){};
30 }
31 module Token_Act(){ ////toplevel
32   Token(32){
33     translate([0, 1])
34       square([tokenrad*.75, joinwidth], center=true);
35   }
36 }
37 module Token_Spec(){ ////toplevel
38   Token(33){};
39 }
40 module Token_Terr(){ ////toplevel
41   Token(34){};
42 }
43 module Token_TerrMove(){ ////toplevel
44   Token(35){
45     translate([-tokenrad*.75, -1])
46       square([tokenrad*.75, joinwidth]);
47   };
48 }
49
50 spacing = tokenrad * 2 + 2;
51
52 module Tokens(rows=1,cols=1) {
53   for (i=[0:rows-1])
54     for (j=[0:cols-1])
55       translate([j*spacing, i*spacing, 0])
56         child(0);
57 }
58
59 module Tokens_Act(){ //// toplevel
60   // Print *twice*, LAPIS BLUE or SQUEEZED ORANGE
61   // ordinary actions
62   //  up to 4 for 5 players, plus 2 for Borrowed Time plus 1 for Generalist
63   //  so need 23, make 24
64   Tokens(4,3) Token_Act();
65 }
66
67 module Tokens_Spec(){ //// toplevel
68   // ELECTRIC BLUE or MELLOW YELLOW
69   // once-per-turn special action, one each for 5 players
70   Tokens(5) Token_Spec();
71 }
72
73 module Tokens_CDC(){ //// toplevel
74   // STORM GREY
75   // CDC
76   // 1 action per turn + 2 Borrowed Time
77   Tokens(3) Token_CDC();
78 }
79
80 module Tokens_Lab(){ //// toplevel
81   // WHITE
82   // free Lab action (on building research station, etc)
83   // make 2 (probably want less than that)
84   Tokens(2) Token_Lab();
85 }
86
87 module Tokens_Terr(){ //// toplevel
88   // FIRE TRUCK RED
89   // Bioterrorist general actions
90   Tokens(2) Token_Terr();
91 }
92
93 module Tokens_TerrMove(){ //// toplevel
94   // CLASSIC BLACK
95   // Bioterrorist drive/ferry
96   Tokens(1) Token_TerrMove();
97 }
98
99 module PosToken(i,j){
100   translate([j*spacing, i*spacing, 0]) child();
101 }
102
103 module Demo(){ //// toplevel
104   PosToken(0,0) Token_CDC();
105   PosToken(1,0) Token_Lab();
106   PosToken(2,0) Token_Act();
107   PosToken(0,1) Token_Spec();
108   PosToken(1,1) Token_Terr();
109   PosToken(2,1) Token_TerrMove();
110 }
111
112 //Tokens_Act();
113 //Demo();