Differences From Artifact [9f0067d733f090c1]:
- File
src/gui.d
- 2012-07-15 12:20:17 - part of checkin [0e9ec945bb] on branch trunk - horock gui. (user: kinaba) [annotate]
To Artifact [a1f9b7cabb9073dd]:
- File
src/gui.d
- 2012-07-15 13:24:12 - part of checkin [b6026abfcf] on branch trunk - Simplified GUI code. (user: kinaba) [annotate]
9 { 9 {
10 this.solver = new Solver(g); 10 this.solver = new Solver(g);
11 setup_size(g.map.W, g.map.H); 11 setup_size(g.map.W, g.map.H);
12 setup_resources(g); 12 setup_resources(g);
13 draw(g); 13 draw(g);
14 } 14 }
15 15
16 private void delegate(char c) fn; | 16 void run(void delegate(char c) command, bool automate = true)
17 void set_fn(F)(F f) { this.fn = f; } <
18 <
19 void run(bool automate = false) <
20 { 17 {
21 if(automate) { 18 if(automate) {
22 Timer t = new Timer; 19 Timer t = new Timer;
23 t.interval = 50; 20 t.interval = 50;
24 t.tick ~= (Timer sender, EventArgs ea){ <
25 fn(solver.single_step()); | 21 t.tick ~= (Timer s, EventArgs e){command(solver.single_s
26 }; <
27 t.start(); 22 t.start();
28 this.closing ~= (Form f,CancelEventArgs c){t.stop();}; 23 this.closing ~= (Form f,CancelEventArgs c){t.stop();};
29 } else { 24 } else {
30 setup_keyhandling(); | 25 setup_keyhandling(command);
31 } 26 }
32 Application.run(this); 27 Application.run(this);
33 } 28 }
34 29
35 override void on_game_changed(char c, in Game g, bool finished) 30 override void on_game_changed(char c, in Game g, bool finished)
36 { 31 {
37 draw(g); 32 draw(g);
38 } 33 }
39 34
40 private: 35 private:
41 int cell; <
42 <
43 void setup_size(int W, int H) 36 void setup_size(int W, int H)
44 { 37 {
45 this.formBorderStyle = FormBorderStyle.FIXED_DIALOG; 38 this.formBorderStyle = FormBorderStyle.FIXED_DIALOG;
46 this.maximizeBox = false; 39 this.maximizeBox = false;
47 this.minimizeBox = false; 40 this.minimizeBox = false;
48 this.cell = min(1024/W, 640/H); 41 this.cell = min(1024/W, 640/H);
49 this.clientSize = Size(W*cell, H*cell); 42 this.clientSize = Size(W*cell, H*cell);
50 } 43 }
51 44
> 45 int cell;
52 Font font; 46 Font font;
53 Color[char] colors; 47 Color[char] colors;
54 string[char] render; 48 string[char] render;
55 Graphics graphicContext; 49 Graphics graphicContext;
56 50
57 void setup_resources(in Game g) 51 void setup_resources(in Game g)
58 { 52 {
................................................................................................................................................................................
81 this.render['\\'] = "λ"; 75 this.render['\\'] = "λ";
82 this.render['R'] = "☃"; 76 this.render['R'] = "☃";
83 this.render['d'] = "☠"; 77 this.render['d'] = "☠";
84 this.render['L'] = "☒"; 78 this.render['L'] = "☒";
85 this.render['O'] = "☐"; 79 this.render['O'] = "☐";
86 this.render['W'] = "ꔣ"; 80 this.render['W'] = "ꔣ";
87 this.render['!'] = "✄"; 81 this.render['!'] = "✄";
88 foreach(c,tp; g.map.tr_target) { | 82 foreach(c,tp; g.map.tr_target) this.render[c] = [cast(dchar)('☢'
89 char d = g.map[tp]; <
90 this.render[c] = [cast(dchar)('☢'+d-'1')].to!string(); <
91 } <
92 foreach(char c; '1'..':') this.render[c] = [cast(dchar)('☢'+c-'1 | 83 foreach(char c; '1'..':') this.render[c] = [cast(dchar)('☢'
93 this.paint ~= (Control c, PaintEventArgs ev) { 84 this.paint ~= (Control c, PaintEventArgs ev) {
94 graphicContext.copyTo(ev.graphics, Rect(0,0,this.clientS 85 graphicContext.copyTo(ev.graphics, Rect(0,0,this.clientS
95 }; 86 };
96 } 87 }
97 88
98 void draw(in Game g) 89 void draw(in Game g)
99 { 90 {
................................................................................................................................................................................
126 " Tide: ", g.water_until_rise, 117 " Tide: ", g.water_until_rise,
127 " Wadler: ", g.hige_until_rise, 118 " Wadler: ", g.hige_until_rise,
128 " Razor: ", g.map.razor); 119 " Razor: ", g.map.razor);
129 invalidate(); 120 invalidate();
130 } 121 }
131 122
132 private: 123 private:
133 void setup_keyhandling() | 124 void setup_keyhandling(void delegate(char c) command)
134 { 125 {
135 noMessageFilter(); 126 noMessageFilter();
136 this.keyDown ~= &my_keydown; | 127 this.keyDown ~= (Control c, KeyEventArgs ev) {
137 } <
138 <
139 void do_manual_command(char c) | 128 void do_manual_command(char c)
140 { | 129 {
141 solver.force(c); | 130 solver.force(c);
142 fn(c); | 131 command(c);
143 } | 132 }
144 <
145 void my_keydown(Control c, KeyEventArgs ev) <
146 { <
147 switch(ev.keyCode) | 133 switch(ev.keyCode)
148 { | 134 {
149 case Keys.DOWN: do_manual_command('D'); break; | 135 case Keys.DOWN: do_manual_command('D'); break;
150 case Keys.UP: do_manual_command('U'); break; | 136 case Keys.UP: do_manual_command('U'); break;
151 case Keys.LEFT: do_manual_command('L'); break; | 137 case Keys.LEFT: do_manual_command('L'); break;
152 case Keys.RIGHT: do_manual_command('R'); break; | 138 case Keys.RIGHT: do_manual_command('R'); break;
153 case Keys.W: do_manual_command('W'); break; | 139 case Keys.W: do_manual_command('W'); break;
154 case Keys.S: do_manual_command('S'); break; | 140 case Keys.S: do_manual_command('S'); break;
155 case Keys.A: do_manual_command('A'); break; | 141 case Keys.A: do_manual_command('A'); break;
156 case Keys.G: fn(solver.single_step()); break; | 142 case Keys.G: command(solver.single_step()); break;
157 default: break; | 143 default: break;
158 } | 144 }
> 145 };
159 } 146 }
160 147
161 Solver solver; 148 Solver solver;
162 } 149 }