Option always runs a program.
Chris Pressey
5 years ago
9 | 9 | config.container.appendChild(can); |
10 | 10 | |
11 | 11 | var turtle = (new ErraticTurtle()).init({ canvas: can }); |
12 | turtle.reset(); | |
13 | var method = 'drawLines'; | |
14 | turtle[method](); | |
12 | var program = "setxyp 0.125 0.5 lt 90 repeat 7 [ repeat 50 [ fd 150 lt 180 ] shiftxyp 0.125 0.0 ]"; | |
13 | ||
14 | function run() { | |
15 | turtle.reset(); | |
16 | var p = (new Parser()).init(program); | |
17 | var i = p.parseInstrs(); | |
18 | console.log(uneval(i)); | |
19 | interpretInstrs(i, turtle); | |
20 | } | |
21 | ||
22 | run(); | |
15 | 23 | |
16 | 24 | var controlPanel = div( |
17 | 25 | div( |
20 | 28 | options: [ |
21 | 29 | { |
22 | 30 | text: 'Lines', |
23 | value: 'drawLines', | |
31 | value: "setxyp 0.125 0.5 lt 90 repeat 7 [ repeat 50 [ fd 150 lt 180 ] shiftxyp 0.125 0.0 ]" | |
24 | 32 | }, |
25 | 33 | { |
26 | 34 | text: 'Boxes', |
27 | value: 'drawBoxes', | |
35 | value: "setxyp 0.125 0.666 lt 90 repeat 7 [ repeat 400 [ fd 50 lt 90 ] shiftxyp 0.125 0.0 ]" | |
28 | 36 | }, |
29 | 37 | { |
30 | 38 | text: 'Circles', |
31 | value: 'drawCircles', | |
39 | value: "setxyp 0.125 0.666 lt 90 repeat 7 [ repeat 4500 [ fd 1.0 lt 4 ] shiftxyp 0.125 0.0 ]" | |
32 | 40 | }, |
33 | 41 | { |
34 | 42 | text: 'Circle Chain', |
35 | value: 'drawCircleChain', | |
36 | }, | |
37 | { | |
38 | text: 'Logo', | |
39 | value: 'logo', | |
40 | program: "setxyp 0.125 0.5 lt 90 repeat 7 [ repeat 50 [ fd 150 lt 180 ] shiftxyp 0.125 0.0 ]" | |
43 | value: "setxyp 1.0 0.5 lt 90 repeat 7 [ repeat 1845 [ fd 2.0 lt 4 ] lt 180 ] repeat 7 [ repeat 1845 [ fd 2.0 lt 4 ] lt 180 ]" | |
41 | 44 | } |
42 | 45 | ], |
43 | 46 | onchange: function(option) { |
44 | method = option.value; | |
45 | turtle.reset(); | |
46 | if (method === 'logo') { | |
47 | var p = (new Parser()).init(option.program); | |
48 | var i = p.parseInstrs(); | |
49 | console.log(uneval(i)); | |
50 | interpretInstrs(i, turtle); | |
51 | } else { | |
52 | turtle[method](); | |
53 | } | |
47 | program = option.value; | |
48 | run(); | |
54 | 49 | } |
55 | 50 | }) |
56 | 51 | ), |
57 | 52 | div( |
58 | button("Re-roll", { onclick: function() { turtle.reset(); turtle[method](); }}) | |
53 | button("Re-roll", { onclick: function() { run(); }}) | |
59 | 54 | ) |
60 | 55 | ); |
61 | 56 | config.container.appendChild(controlPanel); |