AERA
video_screen.cpp
1 //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
2 //_/_/
3 //_/_/ AERA
4 //_/_/ Autocatalytic Endogenous Reflective Architecture
5 //_/_/
6 //_/_/ Copyright (c) 2022-2025 Jeff Thompson
7 //_/_/ Copyright (c) 2022-2025 Icelandic Institute for Intelligent Machines
8 //_/_/ http://www.iiim.is
9 //_/_/
10 //_/_/ --- Open-Source BSD License, with CADIA Clause v 1.0 ---
11 //_/_/
12 //_/_/ Redistribution and use in source and binary forms, with or without
13 //_/_/ modification, is permitted provided that the following conditions
14 //_/_/ are met:
15 //_/_/ - Redistributions of source code must retain the above copyright
16 //_/_/ and collaboration notice, this list of conditions and the
17 //_/_/ following disclaimer.
18 //_/_/ - Redistributions in binary form must reproduce the above copyright
19 //_/_/ notice, this list of conditions and the following disclaimer
20 //_/_/ in the documentation and/or other materials provided with
21 //_/_/ the distribution.
22 //_/_/
23 //_/_/ - Neither the name of its copyright holders nor the names of its
24 //_/_/ contributors may be used to endorse or promote products
25 //_/_/ derived from this software without specific prior
26 //_/_/ written permission.
27 //_/_/
28 //_/_/ - CADIA Clause: The license granted in and to the software
29 //_/_/ under this agreement is a limited-use license.
30 //_/_/ The software may not be used in furtherance of:
31 //_/_/ (i) intentionally causing bodily injury or severe emotional
32 //_/_/ distress to any person;
33 //_/_/ (ii) invading the personal privacy or violating the human
34 //_/_/ rights of any person; or
35 //_/_/ (iii) committing or preparing for any act of war.
36 //_/_/
37 //_/_/ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
38 //_/_/ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
39 //_/_/ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
40 //_/_/ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
41 //_/_/ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
42 //_/_/ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43 //_/_/ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
44 //_/_/ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
45 //_/_/ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
46 //_/_/ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
47 //_/_/ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
48 //_/_/ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
49 //_/_/ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
50 //_/_/ OF SUCH DAMAGE.
51 //_/_/
52 //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
53 
54 #include "../r_exec/mem.h"
55 #include "video_screen.h"
56 
57 using namespace std;
58 using namespace r_code;
59 using namespace r_exec;
60 
61 namespace video_screen {
62 
63 #define N_FOVEA_PATTERNS 512
64 
65  VideoScreen::VideoScreen(int width, int height)
66 : width_(width),
67  height_(height),
68  screen_(new bool[width * height]),
69  fovea_x_(3),
70  fovea_y_(5),
71  fovea_patterns_(NULL) {
72  clear_screen();
73 }
74 
75 bool VideoScreen::load(const vector<Code*> *objects) {
76  // Draw an initial objects.
77  draw_paddle(3, 5);
78  draw_ball(10, 10);
79 
80  if (fovea_patterns_)
81  // We don't expect this. load should only be called once.
82  delete fovea_patterns_;
83 
84  // See the order in fovea-patterns.replicode .
85  fovea_patterns_ = new Code*[N_FOVEA_PATTERNS] {
86  _Mem::find_object(objects, "pattern0"),
87  _Mem::find_object(objects, "pattern1"),
88  _Mem::find_object(objects, "pattern2"),
89  _Mem::find_object(objects, "pattern12"),
90  _Mem::find_object(objects, "pattern3"),
91  _Mem::find_object(objects, "pattern13"),
92  _Mem::find_object(objects, "pattern23"),
93  _Mem::find_object(objects, "pattern123"),
94  _Mem::find_object(objects, "pattern4"),
95  _Mem::find_object(objects, "pattern14"),
96  _Mem::find_object(objects, "pattern24"),
97  _Mem::find_object(objects, "pattern124"),
98  _Mem::find_object(objects, "pattern34"),
99  _Mem::find_object(objects, "pattern134"),
100  _Mem::find_object(objects, "pattern234"),
101  _Mem::find_object(objects, "pattern1234"),
102  _Mem::find_object(objects, "pattern5"),
103  _Mem::find_object(objects, "pattern15"),
104  _Mem::find_object(objects, "pattern25"),
105  _Mem::find_object(objects, "pattern125"),
106  _Mem::find_object(objects, "pattern35"),
107  _Mem::find_object(objects, "pattern135"),
108  _Mem::find_object(objects, "pattern235"),
109  _Mem::find_object(objects, "pattern1235"),
110  _Mem::find_object(objects, "pattern45"),
111  _Mem::find_object(objects, "pattern145"),
112  _Mem::find_object(objects, "pattern245"),
113  _Mem::find_object(objects, "pattern1245"),
114  _Mem::find_object(objects, "pattern345"),
115  _Mem::find_object(objects, "pattern1345"),
116  _Mem::find_object(objects, "pattern2345"),
117  _Mem::find_object(objects, "pattern12345"),
118  _Mem::find_object(objects, "pattern6"),
119  _Mem::find_object(objects, "pattern16"),
120  _Mem::find_object(objects, "pattern26"),
121  _Mem::find_object(objects, "pattern126"),
122  _Mem::find_object(objects, "pattern36"),
123  _Mem::find_object(objects, "pattern136"),
124  _Mem::find_object(objects, "pattern236"),
125  _Mem::find_object(objects, "pattern1236"),
126  _Mem::find_object(objects, "pattern46"),
127  _Mem::find_object(objects, "pattern146"),
128  _Mem::find_object(objects, "pattern246"),
129  _Mem::find_object(objects, "pattern1246"),
130  _Mem::find_object(objects, "pattern346"),
131  _Mem::find_object(objects, "pattern1346"),
132  _Mem::find_object(objects, "pattern2346"),
133  _Mem::find_object(objects, "pattern12346"),
134  _Mem::find_object(objects, "pattern56"),
135  _Mem::find_object(objects, "pattern156"),
136  _Mem::find_object(objects, "pattern256"),
137  _Mem::find_object(objects, "pattern1256"),
138  _Mem::find_object(objects, "pattern356"),
139  _Mem::find_object(objects, "pattern1356"),
140  _Mem::find_object(objects, "pattern2356"),
141  _Mem::find_object(objects, "pattern12356"),
142  _Mem::find_object(objects, "pattern456"),
143  _Mem::find_object(objects, "pattern1456"),
144  _Mem::find_object(objects, "pattern2456"),
145  _Mem::find_object(objects, "pattern12456"),
146  _Mem::find_object(objects, "pattern3456"),
147  _Mem::find_object(objects, "pattern13456"),
148  _Mem::find_object(objects, "pattern23456"),
149  _Mem::find_object(objects, "pattern123456"),
150  _Mem::find_object(objects, "pattern7"),
151  _Mem::find_object(objects, "pattern17"),
152  _Mem::find_object(objects, "pattern27"),
153  _Mem::find_object(objects, "pattern127"),
154  _Mem::find_object(objects, "pattern37"),
155  _Mem::find_object(objects, "pattern137"),
156  _Mem::find_object(objects, "pattern237"),
157  _Mem::find_object(objects, "pattern1237"),
158  _Mem::find_object(objects, "pattern47"),
159  _Mem::find_object(objects, "pattern147"),
160  _Mem::find_object(objects, "pattern247"),
161  _Mem::find_object(objects, "pattern1247"),
162  _Mem::find_object(objects, "pattern347"),
163  _Mem::find_object(objects, "pattern1347"),
164  _Mem::find_object(objects, "pattern2347"),
165  _Mem::find_object(objects, "pattern12347"),
166  _Mem::find_object(objects, "pattern57"),
167  _Mem::find_object(objects, "pattern157"),
168  _Mem::find_object(objects, "pattern257"),
169  _Mem::find_object(objects, "pattern1257"),
170  _Mem::find_object(objects, "pattern357"),
171  _Mem::find_object(objects, "pattern1357"),
172  _Mem::find_object(objects, "pattern2357"),
173  _Mem::find_object(objects, "pattern12357"),
174  _Mem::find_object(objects, "pattern457"),
175  _Mem::find_object(objects, "pattern1457"),
176  _Mem::find_object(objects, "pattern2457"),
177  _Mem::find_object(objects, "pattern12457"),
178  _Mem::find_object(objects, "pattern3457"),
179  _Mem::find_object(objects, "pattern13457"),
180  _Mem::find_object(objects, "pattern23457"),
181  _Mem::find_object(objects, "pattern123457"),
182  _Mem::find_object(objects, "pattern67"),
183  _Mem::find_object(objects, "pattern167"),
184  _Mem::find_object(objects, "pattern267"),
185  _Mem::find_object(objects, "pattern1267"),
186  _Mem::find_object(objects, "pattern367"),
187  _Mem::find_object(objects, "pattern1367"),
188  _Mem::find_object(objects, "pattern2367"),
189  _Mem::find_object(objects, "pattern12367"),
190  _Mem::find_object(objects, "pattern467"),
191  _Mem::find_object(objects, "pattern1467"),
192  _Mem::find_object(objects, "pattern2467"),
193  _Mem::find_object(objects, "pattern12467"),
194  _Mem::find_object(objects, "pattern3467"),
195  _Mem::find_object(objects, "pattern13467"),
196  _Mem::find_object(objects, "pattern23467"),
197  _Mem::find_object(objects, "pattern123467"),
198  _Mem::find_object(objects, "pattern567"),
199  _Mem::find_object(objects, "pattern1567"),
200  _Mem::find_object(objects, "pattern2567"),
201  _Mem::find_object(objects, "pattern12567"),
202  _Mem::find_object(objects, "pattern3567"),
203  _Mem::find_object(objects, "pattern13567"),
204  _Mem::find_object(objects, "pattern23567"),
205  _Mem::find_object(objects, "pattern123567"),
206  _Mem::find_object(objects, "pattern4567"),
207  _Mem::find_object(objects, "pattern14567"),
208  _Mem::find_object(objects, "pattern24567"),
209  _Mem::find_object(objects, "pattern124567"),
210  _Mem::find_object(objects, "pattern34567"),
211  _Mem::find_object(objects, "pattern134567"),
212  _Mem::find_object(objects, "pattern234567"),
213  _Mem::find_object(objects, "pattern1234567"),
214  _Mem::find_object(objects, "pattern8"),
215  _Mem::find_object(objects, "pattern18"),
216  _Mem::find_object(objects, "pattern28"),
217  _Mem::find_object(objects, "pattern128"),
218  _Mem::find_object(objects, "pattern38"),
219  _Mem::find_object(objects, "pattern138"),
220  _Mem::find_object(objects, "pattern238"),
221  _Mem::find_object(objects, "pattern1238"),
222  _Mem::find_object(objects, "pattern48"),
223  _Mem::find_object(objects, "pattern148"),
224  _Mem::find_object(objects, "pattern248"),
225  _Mem::find_object(objects, "pattern1248"),
226  _Mem::find_object(objects, "pattern348"),
227  _Mem::find_object(objects, "pattern1348"),
228  _Mem::find_object(objects, "pattern2348"),
229  _Mem::find_object(objects, "pattern12348"),
230  _Mem::find_object(objects, "pattern58"),
231  _Mem::find_object(objects, "pattern158"),
232  _Mem::find_object(objects, "pattern258"),
233  _Mem::find_object(objects, "pattern1258"),
234  _Mem::find_object(objects, "pattern358"),
235  _Mem::find_object(objects, "pattern1358"),
236  _Mem::find_object(objects, "pattern2358"),
237  _Mem::find_object(objects, "pattern12358"),
238  _Mem::find_object(objects, "pattern458"),
239  _Mem::find_object(objects, "pattern1458"),
240  _Mem::find_object(objects, "pattern2458"),
241  _Mem::find_object(objects, "pattern12458"),
242  _Mem::find_object(objects, "pattern3458"),
243  _Mem::find_object(objects, "pattern13458"),
244  _Mem::find_object(objects, "pattern23458"),
245  _Mem::find_object(objects, "pattern123458"),
246  _Mem::find_object(objects, "pattern68"),
247  _Mem::find_object(objects, "pattern168"),
248  _Mem::find_object(objects, "pattern268"),
249  _Mem::find_object(objects, "pattern1268"),
250  _Mem::find_object(objects, "pattern368"),
251  _Mem::find_object(objects, "pattern1368"),
252  _Mem::find_object(objects, "pattern2368"),
253  _Mem::find_object(objects, "pattern12368"),
254  _Mem::find_object(objects, "pattern468"),
255  _Mem::find_object(objects, "pattern1468"),
256  _Mem::find_object(objects, "pattern2468"),
257  _Mem::find_object(objects, "pattern12468"),
258  _Mem::find_object(objects, "pattern3468"),
259  _Mem::find_object(objects, "pattern13468"),
260  _Mem::find_object(objects, "pattern23468"),
261  _Mem::find_object(objects, "pattern123468"),
262  _Mem::find_object(objects, "pattern568"),
263  _Mem::find_object(objects, "pattern1568"),
264  _Mem::find_object(objects, "pattern2568"),
265  _Mem::find_object(objects, "pattern12568"),
266  _Mem::find_object(objects, "pattern3568"),
267  _Mem::find_object(objects, "pattern13568"),
268  _Mem::find_object(objects, "pattern23568"),
269  _Mem::find_object(objects, "pattern123568"),
270  _Mem::find_object(objects, "pattern4568"),
271  _Mem::find_object(objects, "pattern14568"),
272  _Mem::find_object(objects, "pattern24568"),
273  _Mem::find_object(objects, "pattern124568"),
274  _Mem::find_object(objects, "pattern34568"),
275  _Mem::find_object(objects, "pattern134568"),
276  _Mem::find_object(objects, "pattern234568"),
277  _Mem::find_object(objects, "pattern1234568"),
278  _Mem::find_object(objects, "pattern78"),
279  _Mem::find_object(objects, "pattern178"),
280  _Mem::find_object(objects, "pattern278"),
281  _Mem::find_object(objects, "pattern1278"),
282  _Mem::find_object(objects, "pattern378"),
283  _Mem::find_object(objects, "pattern1378"),
284  _Mem::find_object(objects, "pattern2378"),
285  _Mem::find_object(objects, "pattern12378"),
286  _Mem::find_object(objects, "pattern478"),
287  _Mem::find_object(objects, "pattern1478"),
288  _Mem::find_object(objects, "pattern2478"),
289  _Mem::find_object(objects, "pattern12478"),
290  _Mem::find_object(objects, "pattern3478"),
291  _Mem::find_object(objects, "pattern13478"),
292  _Mem::find_object(objects, "pattern23478"),
293  _Mem::find_object(objects, "pattern123478"),
294  _Mem::find_object(objects, "pattern578"),
295  _Mem::find_object(objects, "pattern1578"),
296  _Mem::find_object(objects, "pattern2578"),
297  _Mem::find_object(objects, "pattern12578"),
298  _Mem::find_object(objects, "pattern3578"),
299  _Mem::find_object(objects, "pattern13578"),
300  _Mem::find_object(objects, "pattern23578"),
301  _Mem::find_object(objects, "pattern123578"),
302  _Mem::find_object(objects, "pattern4578"),
303  _Mem::find_object(objects, "pattern14578"),
304  _Mem::find_object(objects, "pattern24578"),
305  _Mem::find_object(objects, "pattern124578"),
306  _Mem::find_object(objects, "pattern34578"),
307  _Mem::find_object(objects, "pattern134578"),
308  _Mem::find_object(objects, "pattern234578"),
309  _Mem::find_object(objects, "pattern1234578"),
310  _Mem::find_object(objects, "pattern678"),
311  _Mem::find_object(objects, "pattern1678"),
312  _Mem::find_object(objects, "pattern2678"),
313  _Mem::find_object(objects, "pattern12678"),
314  _Mem::find_object(objects, "pattern3678"),
315  _Mem::find_object(objects, "pattern13678"),
316  _Mem::find_object(objects, "pattern23678"),
317  _Mem::find_object(objects, "pattern123678"),
318  _Mem::find_object(objects, "pattern4678"),
319  _Mem::find_object(objects, "pattern14678"),
320  _Mem::find_object(objects, "pattern24678"),
321  _Mem::find_object(objects, "pattern124678"),
322  _Mem::find_object(objects, "pattern34678"),
323  _Mem::find_object(objects, "pattern134678"),
324  _Mem::find_object(objects, "pattern234678"),
325  _Mem::find_object(objects, "pattern1234678"),
326  _Mem::find_object(objects, "pattern5678"),
327  _Mem::find_object(objects, "pattern15678"),
328  _Mem::find_object(objects, "pattern25678"),
329  _Mem::find_object(objects, "pattern125678"),
330  _Mem::find_object(objects, "pattern35678"),
331  _Mem::find_object(objects, "pattern135678"),
332  _Mem::find_object(objects, "pattern235678"),
333  _Mem::find_object(objects, "pattern1235678"),
334  _Mem::find_object(objects, "pattern45678"),
335  _Mem::find_object(objects, "pattern145678"),
336  _Mem::find_object(objects, "pattern245678"),
337  _Mem::find_object(objects, "pattern1245678"),
338  _Mem::find_object(objects, "pattern345678"),
339  _Mem::find_object(objects, "pattern1345678"),
340  _Mem::find_object(objects, "pattern2345678"),
341  _Mem::find_object(objects, "pattern12345678"),
342  _Mem::find_object(objects, "pattern9"),
343  _Mem::find_object(objects, "pattern19"),
344  _Mem::find_object(objects, "pattern29"),
345  _Mem::find_object(objects, "pattern129"),
346  _Mem::find_object(objects, "pattern39"),
347  _Mem::find_object(objects, "pattern139"),
348  _Mem::find_object(objects, "pattern239"),
349  _Mem::find_object(objects, "pattern1239"),
350  _Mem::find_object(objects, "pattern49"),
351  _Mem::find_object(objects, "pattern149"),
352  _Mem::find_object(objects, "pattern249"),
353  _Mem::find_object(objects, "pattern1249"),
354  _Mem::find_object(objects, "pattern349"),
355  _Mem::find_object(objects, "pattern1349"),
356  _Mem::find_object(objects, "pattern2349"),
357  _Mem::find_object(objects, "pattern12349"),
358  _Mem::find_object(objects, "pattern59"),
359  _Mem::find_object(objects, "pattern159"),
360  _Mem::find_object(objects, "pattern259"),
361  _Mem::find_object(objects, "pattern1259"),
362  _Mem::find_object(objects, "pattern359"),
363  _Mem::find_object(objects, "pattern1359"),
364  _Mem::find_object(objects, "pattern2359"),
365  _Mem::find_object(objects, "pattern12359"),
366  _Mem::find_object(objects, "pattern459"),
367  _Mem::find_object(objects, "pattern1459"),
368  _Mem::find_object(objects, "pattern2459"),
369  _Mem::find_object(objects, "pattern12459"),
370  _Mem::find_object(objects, "pattern3459"),
371  _Mem::find_object(objects, "pattern13459"),
372  _Mem::find_object(objects, "pattern23459"),
373  _Mem::find_object(objects, "pattern123459"),
374  _Mem::find_object(objects, "pattern69"),
375  _Mem::find_object(objects, "pattern169"),
376  _Mem::find_object(objects, "pattern269"),
377  _Mem::find_object(objects, "pattern1269"),
378  _Mem::find_object(objects, "pattern369"),
379  _Mem::find_object(objects, "pattern1369"),
380  _Mem::find_object(objects, "pattern2369"),
381  _Mem::find_object(objects, "pattern12369"),
382  _Mem::find_object(objects, "pattern469"),
383  _Mem::find_object(objects, "pattern1469"),
384  _Mem::find_object(objects, "pattern2469"),
385  _Mem::find_object(objects, "pattern12469"),
386  _Mem::find_object(objects, "pattern3469"),
387  _Mem::find_object(objects, "pattern13469"),
388  _Mem::find_object(objects, "pattern23469"),
389  _Mem::find_object(objects, "pattern123469"),
390  _Mem::find_object(objects, "pattern569"),
391  _Mem::find_object(objects, "pattern1569"),
392  _Mem::find_object(objects, "pattern2569"),
393  _Mem::find_object(objects, "pattern12569"),
394  _Mem::find_object(objects, "pattern3569"),
395  _Mem::find_object(objects, "pattern13569"),
396  _Mem::find_object(objects, "pattern23569"),
397  _Mem::find_object(objects, "pattern123569"),
398  _Mem::find_object(objects, "pattern4569"),
399  _Mem::find_object(objects, "pattern14569"),
400  _Mem::find_object(objects, "pattern24569"),
401  _Mem::find_object(objects, "pattern124569"),
402  _Mem::find_object(objects, "pattern34569"),
403  _Mem::find_object(objects, "pattern134569"),
404  _Mem::find_object(objects, "pattern234569"),
405  _Mem::find_object(objects, "pattern1234569"),
406  _Mem::find_object(objects, "pattern79"),
407  _Mem::find_object(objects, "pattern179"),
408  _Mem::find_object(objects, "pattern279"),
409  _Mem::find_object(objects, "pattern1279"),
410  _Mem::find_object(objects, "pattern379"),
411  _Mem::find_object(objects, "pattern1379"),
412  _Mem::find_object(objects, "pattern2379"),
413  _Mem::find_object(objects, "pattern12379"),
414  _Mem::find_object(objects, "pattern479"),
415  _Mem::find_object(objects, "pattern1479"),
416  _Mem::find_object(objects, "pattern2479"),
417  _Mem::find_object(objects, "pattern12479"),
418  _Mem::find_object(objects, "pattern3479"),
419  _Mem::find_object(objects, "pattern13479"),
420  _Mem::find_object(objects, "pattern23479"),
421  _Mem::find_object(objects, "pattern123479"),
422  _Mem::find_object(objects, "pattern579"),
423  _Mem::find_object(objects, "pattern1579"),
424  _Mem::find_object(objects, "pattern2579"),
425  _Mem::find_object(objects, "pattern12579"),
426  _Mem::find_object(objects, "pattern3579"),
427  _Mem::find_object(objects, "pattern13579"),
428  _Mem::find_object(objects, "pattern23579"),
429  _Mem::find_object(objects, "pattern123579"),
430  _Mem::find_object(objects, "pattern4579"),
431  _Mem::find_object(objects, "pattern14579"),
432  _Mem::find_object(objects, "pattern24579"),
433  _Mem::find_object(objects, "pattern124579"),
434  _Mem::find_object(objects, "pattern34579"),
435  _Mem::find_object(objects, "pattern134579"),
436  _Mem::find_object(objects, "pattern234579"),
437  _Mem::find_object(objects, "pattern1234579"),
438  _Mem::find_object(objects, "pattern679"),
439  _Mem::find_object(objects, "pattern1679"),
440  _Mem::find_object(objects, "pattern2679"),
441  _Mem::find_object(objects, "pattern12679"),
442  _Mem::find_object(objects, "pattern3679"),
443  _Mem::find_object(objects, "pattern13679"),
444  _Mem::find_object(objects, "pattern23679"),
445  _Mem::find_object(objects, "pattern123679"),
446  _Mem::find_object(objects, "pattern4679"),
447  _Mem::find_object(objects, "pattern14679"),
448  _Mem::find_object(objects, "pattern24679"),
449  _Mem::find_object(objects, "pattern124679"),
450  _Mem::find_object(objects, "pattern34679"),
451  _Mem::find_object(objects, "pattern134679"),
452  _Mem::find_object(objects, "pattern234679"),
453  _Mem::find_object(objects, "pattern1234679"),
454  _Mem::find_object(objects, "pattern5679"),
455  _Mem::find_object(objects, "pattern15679"),
456  _Mem::find_object(objects, "pattern25679"),
457  _Mem::find_object(objects, "pattern125679"),
458  _Mem::find_object(objects, "pattern35679"),
459  _Mem::find_object(objects, "pattern135679"),
460  _Mem::find_object(objects, "pattern235679"),
461  _Mem::find_object(objects, "pattern1235679"),
462  _Mem::find_object(objects, "pattern45679"),
463  _Mem::find_object(objects, "pattern145679"),
464  _Mem::find_object(objects, "pattern245679"),
465  _Mem::find_object(objects, "pattern1245679"),
466  _Mem::find_object(objects, "pattern345679"),
467  _Mem::find_object(objects, "pattern1345679"),
468  _Mem::find_object(objects, "pattern2345679"),
469  _Mem::find_object(objects, "pattern12345679"),
470  _Mem::find_object(objects, "pattern89"),
471  _Mem::find_object(objects, "pattern189"),
472  _Mem::find_object(objects, "pattern289"),
473  _Mem::find_object(objects, "pattern1289"),
474  _Mem::find_object(objects, "pattern389"),
475  _Mem::find_object(objects, "pattern1389"),
476  _Mem::find_object(objects, "pattern2389"),
477  _Mem::find_object(objects, "pattern12389"),
478  _Mem::find_object(objects, "pattern489"),
479  _Mem::find_object(objects, "pattern1489"),
480  _Mem::find_object(objects, "pattern2489"),
481  _Mem::find_object(objects, "pattern12489"),
482  _Mem::find_object(objects, "pattern3489"),
483  _Mem::find_object(objects, "pattern13489"),
484  _Mem::find_object(objects, "pattern23489"),
485  _Mem::find_object(objects, "pattern123489"),
486  _Mem::find_object(objects, "pattern589"),
487  _Mem::find_object(objects, "pattern1589"),
488  _Mem::find_object(objects, "pattern2589"),
489  _Mem::find_object(objects, "pattern12589"),
490  _Mem::find_object(objects, "pattern3589"),
491  _Mem::find_object(objects, "pattern13589"),
492  _Mem::find_object(objects, "pattern23589"),
493  _Mem::find_object(objects, "pattern123589"),
494  _Mem::find_object(objects, "pattern4589"),
495  _Mem::find_object(objects, "pattern14589"),
496  _Mem::find_object(objects, "pattern24589"),
497  _Mem::find_object(objects, "pattern124589"),
498  _Mem::find_object(objects, "pattern34589"),
499  _Mem::find_object(objects, "pattern134589"),
500  _Mem::find_object(objects, "pattern234589"),
501  _Mem::find_object(objects, "pattern1234589"),
502  _Mem::find_object(objects, "pattern689"),
503  _Mem::find_object(objects, "pattern1689"),
504  _Mem::find_object(objects, "pattern2689"),
505  _Mem::find_object(objects, "pattern12689"),
506  _Mem::find_object(objects, "pattern3689"),
507  _Mem::find_object(objects, "pattern13689"),
508  _Mem::find_object(objects, "pattern23689"),
509  _Mem::find_object(objects, "pattern123689"),
510  _Mem::find_object(objects, "pattern4689"),
511  _Mem::find_object(objects, "pattern14689"),
512  _Mem::find_object(objects, "pattern24689"),
513  _Mem::find_object(objects, "pattern124689"),
514  _Mem::find_object(objects, "pattern34689"),
515  _Mem::find_object(objects, "pattern134689"),
516  _Mem::find_object(objects, "pattern234689"),
517  _Mem::find_object(objects, "pattern1234689"),
518  _Mem::find_object(objects, "pattern5689"),
519  _Mem::find_object(objects, "pattern15689"),
520  _Mem::find_object(objects, "pattern25689"),
521  _Mem::find_object(objects, "pattern125689"),
522  _Mem::find_object(objects, "pattern35689"),
523  _Mem::find_object(objects, "pattern135689"),
524  _Mem::find_object(objects, "pattern235689"),
525  _Mem::find_object(objects, "pattern1235689"),
526  _Mem::find_object(objects, "pattern45689"),
527  _Mem::find_object(objects, "pattern145689"),
528  _Mem::find_object(objects, "pattern245689"),
529  _Mem::find_object(objects, "pattern1245689"),
530  _Mem::find_object(objects, "pattern345689"),
531  _Mem::find_object(objects, "pattern1345689"),
532  _Mem::find_object(objects, "pattern2345689"),
533  _Mem::find_object(objects, "pattern12345689"),
534  _Mem::find_object(objects, "pattern789"),
535  _Mem::find_object(objects, "pattern1789"),
536  _Mem::find_object(objects, "pattern2789"),
537  _Mem::find_object(objects, "pattern12789"),
538  _Mem::find_object(objects, "pattern3789"),
539  _Mem::find_object(objects, "pattern13789"),
540  _Mem::find_object(objects, "pattern23789"),
541  _Mem::find_object(objects, "pattern123789"),
542  _Mem::find_object(objects, "pattern4789"),
543  _Mem::find_object(objects, "pattern14789"),
544  _Mem::find_object(objects, "pattern24789"),
545  _Mem::find_object(objects, "pattern124789"),
546  _Mem::find_object(objects, "pattern34789"),
547  _Mem::find_object(objects, "pattern134789"),
548  _Mem::find_object(objects, "pattern234789"),
549  _Mem::find_object(objects, "pattern1234789"),
550  _Mem::find_object(objects, "pattern5789"),
551  _Mem::find_object(objects, "pattern15789"),
552  _Mem::find_object(objects, "pattern25789"),
553  _Mem::find_object(objects, "pattern125789"),
554  _Mem::find_object(objects, "pattern35789"),
555  _Mem::find_object(objects, "pattern135789"),
556  _Mem::find_object(objects, "pattern235789"),
557  _Mem::find_object(objects, "pattern1235789"),
558  _Mem::find_object(objects, "pattern45789"),
559  _Mem::find_object(objects, "pattern145789"),
560  _Mem::find_object(objects, "pattern245789"),
561  _Mem::find_object(objects, "pattern1245789"),
562  _Mem::find_object(objects, "pattern345789"),
563  _Mem::find_object(objects, "pattern1345789"),
564  _Mem::find_object(objects, "pattern2345789"),
565  _Mem::find_object(objects, "pattern12345789"),
566  _Mem::find_object(objects, "pattern6789"),
567  _Mem::find_object(objects, "pattern16789"),
568  _Mem::find_object(objects, "pattern26789"),
569  _Mem::find_object(objects, "pattern126789"),
570  _Mem::find_object(objects, "pattern36789"),
571  _Mem::find_object(objects, "pattern136789"),
572  _Mem::find_object(objects, "pattern236789"),
573  _Mem::find_object(objects, "pattern1236789"),
574  _Mem::find_object(objects, "pattern46789"),
575  _Mem::find_object(objects, "pattern146789"),
576  _Mem::find_object(objects, "pattern246789"),
577  _Mem::find_object(objects, "pattern1246789"),
578  _Mem::find_object(objects, "pattern346789"),
579  _Mem::find_object(objects, "pattern1346789"),
580  _Mem::find_object(objects, "pattern2346789"),
581  _Mem::find_object(objects, "pattern12346789"),
582  _Mem::find_object(objects, "pattern56789"),
583  _Mem::find_object(objects, "pattern156789"),
584  _Mem::find_object(objects, "pattern256789"),
585  _Mem::find_object(objects, "pattern1256789"),
586  _Mem::find_object(objects, "pattern356789"),
587  _Mem::find_object(objects, "pattern1356789"),
588  _Mem::find_object(objects, "pattern2356789"),
589  _Mem::find_object(objects, "pattern12356789"),
590  _Mem::find_object(objects, "pattern456789"),
591  _Mem::find_object(objects, "pattern1456789"),
592  _Mem::find_object(objects, "pattern2456789"),
593  _Mem::find_object(objects, "pattern12456789"),
594  _Mem::find_object(objects, "pattern3456789"),
595  _Mem::find_object(objects, "pattern13456789"),
596  _Mem::find_object(objects, "pattern23456789"),
597  _Mem::find_object(objects, "pattern123456789"),
598  };
599 
600  for (size_t i = 0; i < N_FOVEA_PATTERNS; ++i) {
601  if (!fovea_patterns_[i])
602  return false;
603  }
604 
605  return true;
606 }
607 
608 void VideoScreen::move_eye(int delta_x, int delta_y, int& actual_delta_x, int& actual_delta_y) {
609  // Keep the full fovea within the boundaries of the screen.
610  int new_x = max(1, min(width_ - 2, fovea_x_ + delta_x));
611  int new_y = max(1, min(height_ - 2, fovea_y_ + delta_y));
612 
613  // TODO: Need a critical section?
614  actual_delta_x = new_x - fovea_x_;
615  actual_delta_y = new_y - fovea_y_;
616  fovea_x_ = new_x;
617  fovea_y_ = new_y;
618 }
619 
621  // move_eye already made sure we are within bounds.
622  // Get the bit pattern, same order as in fovea-patterns.replicode .
623  bool fovea[] {
624  get_screen(fovea_x_ - 1, fovea_y_ + 1),
625  get_screen(fovea_x_, fovea_y_ + 1),
626  get_screen(fovea_x_ + 1, fovea_y_ + 1),
627  get_screen(fovea_x_ - 1, fovea_y_),
628  get_screen(fovea_x_, fovea_y_),
629  get_screen(fovea_x_ + 1, fovea_y_),
630  get_screen(fovea_x_ - 1, fovea_y_ - 1),
631  get_screen(fovea_x_, fovea_y_ - 1),
632  get_screen(fovea_x_ + 1, fovea_y_ - 1),
633  };
634  int index = 0;
635  for (int i = 8; i >= 0; --i) {
636  index <<= 1;
637  if (fovea[i])
638  index |= 1;
639  }
640 
641  // TODO: Cache this.
642  return fovea_patterns_[index];
643 }
644 
645 }
video_screen::VideoScreen::get_fovea_pattern
r_code::Code * get_fovea_pattern() const
Definition: video_screen.cpp:620
r_code::Code
Definition: r_code/object.h:224
video_screen::VideoScreen::move_eye
void move_eye(int delta_x, int delta_y, int &actual_delta_x, int &actual_delta_y)
Definition: video_screen.cpp:608
video_screen::VideoScreen::load
bool load(const std::vector< r_code::Code * > *objects)
Definition: video_screen.cpp:75