-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy patheffect.cpp
More file actions
318 lines (292 loc) · 19.7 KB
/
effect.cpp
File metadata and controls
318 lines (292 loc) · 19.7 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
#include <Arduino.h>
#include <math.h>
#include "effect.h"
const int16_t bandtable[1140]={
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,391,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,386,-1,-1,-1,-1,-1,-1,-1,-1,-1,385,-1,-1,-1,-1,-1,-1,-1,-1,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,-1,389,-1,-1,-1,-1,-1,-1,-1,-1,-1,388,-1,-1,-1,-1,-1,-1,-1,-1,-1,387,-1,-1,-1,-1,
380,-1,-1,-1,-1,-1,-1,-1,-1,-1,379,-1,-1,-1,-1,-1,-1,-1,-1,-1,384,-1,-1,-1,-1,-1,-1,-1,-1,-1,383,-1,-1,-1,-1,-1,-1,-1,-1,-1,382,-1,-1,-1,-1,-1,-1,-1,-1,-1,381,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,371,-1,-1,377,-1,-1,372,-1,-1,-1,360,-1,-1,361,-1,-1,355,-1,-1,-1,347,-1,-1,353,-1,-1,348,-1,-1,-1,336,-1,-1,337,-1,-1,331,-1,-1,-1,323,-1,-1,329,-1,-1,324,-1,-1,-1,311,-1,-1,318,-1,-1,312,-1,
-1,-1,370,376,375,378,374,373,368,-1,-1,359,-1,366,-1,367,-1,362,-1,356,-1,-1,346,352,351,354,350,349,344,-1,-1,335,-1,342,-1,343,-1,338,-1,332,-1,-1,322,328,327,330,326,325,320,-1,-1,310,-1,317,-1,319,-1,313,-1,307,
-1,299,-1,-1,-1,369,-1,-1,-1,286,-1,-1,-1,365,-1,364,-1,363,-1,-1,-1,262,-1,-1,-1,345,-1,-1,-1,249,-1,-1,-1,341,-1,340,-1,339,-1,-1,-1,225,-1,-1,-1,321,-1,-1,-1,212,-1,-1,-1,316,-1,315,-1,314,-1,-1,
305,-1,300,-1,294,-1,285,-1,292,-1,287,-1,281,358,-1,-1,-1,357,261,-1,268,-1,263,-1,257,-1,248,-1,255,-1,250,-1,244,334,-1,-1,-1,333,224,-1,231,-1,226,-1,220,-1,211,-1,218,-1,213,-1,207,309,-1,-1,-1,308,298,-1,
304,306,-1,301,-1,-1,-1,291,-1,293,288,-1,-1,-1,273,279,274,-1,-1,-1,267,269,-1,264,-1,-1,-1,254,-1,256,251,-1,-1,-1,236,242,237,-1,-1,-1,230,232,-1,227,-1,-1,-1,217,-1,219,214,-1,-1,-1,198,204,199,-1,-1,-1,
-1,303,302,-1,295,-1,284,-1,290,289,-1,282,-1,272,278,280,275,270,-1,260,-1,266,265,-1,258,-1,247,-1,253,252,-1,245,-1,235,241,243,238,233,-1,223,-1,229,228,-1,221,-1,210,-1,216,215,-1,208,-1,197,203,206,205,200,-1,297,
-1,-1,296,-1,180,175,181,-1,283,-1,-1,-1,164,-1,277,271,276,-1,151,-1,-1,-1,259,-1,143,138,144,-1,246,-1,-1,-1,127,-1,240,234,239,-1,114,-1,-1,-1,222,-1,106,101,107,-1,209,-1,-1,-1,89,-1,202,196,201,-1,188,-1,
-1,183,-1,174,179,182,177,176,-1,163,-1,170,165,-1,159,-1,150,-1,157,152,-1,146,-1,137,142,145,140,139,-1,126,-1,133,128,-1,122,-1,113,-1,120,115,-1,109,-1,100,105,108,103,102,-1,88,-1,95,96,-1,90,-1,187,-1,194,189,
190,-1,-1,-1,173,178,172,-1,-1,-1,169,171,-1,166,-1,-1,-1,156,-1,158,153,-1,-1,-1,136,141,135,-1,-1,-1,132,134,-1,129,-1,-1,-1,119,-1,121,116,-1,-1,-1,99,104,98,-1,-1,-1,94,97,-1,91,-1,-1,-1,193,-1,195,
191,-1,184,65,-1,-1,-1,66,162,-1,168,-1,167,-1,160,-1,149,-1,155,-1,154,-1,147,41,-1,-1,-1,42,125,-1,131,-1,130,-1,123,-1,112,-1,118,-1,117,-1,110,16,-1,-1,-1,17,87,-1,93,-1,92,-1,85,-1,186,-1,192,-1,
-1,-1,-1,71,-1,72,-1,67,-1,-1,-1,161,-1,-1,-1,53,-1,-1,-1,148,-1,-1,-1,47,-1,48,-1,43,-1,-1,-1,124,-1,-1,-1,29,-1,-1,-1,111,-1,-1,-1,22,-1,23,-1,24,-1,-1,-1,86,-1,-1,-1,77,-1,-1,-1,185,
-1,64,-1,70,-1,73,-1,68,-1,61,-1,-1,52,57,58,60,59,55,54,-1,-1,40,-1,46,-1,49,-1,44,-1,37,-1,-1,28,33,34,36,35,31,30,-1,-1,15,-1,21,-1,25,-1,19,-1,18,-1,-1,76,81,82,84,83,79,78,-1,
-1,-1,63,-1,-1,69,-1,-1,62,-1,-1,-1,51,-1,-1,56,-1,-1,50,-1,-1,-1,39,-1,-1,45,-1,-1,38,-1,-1,-1,27,-1,-1,32,-1,-1,26,-1,-1,-1,14,-1,-1,20,-1,-1,13,-1,-1,-1,75,-1,-1,80,-1,-1,74,-1,
4,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
const uint16_t ledindex[392]={980,990,1000,1010,960,970,1035,1045,1055,1065,1075,1025,1125,948,942,881,763,767,889,887,945,883,823,825,827,885,938,932,872,815,878,877,
935,873,874,876,875,869,928,922,861,743,747,807,867,925,863,803,805,865,918,912,852,795,858,857,915,853,854,856,855,849,908,902,
841,723,727,787,847,905,843,783,785,845,958,952,892,835,898,897,955,893,894,896,895,774,831,768,649,592,654,713,772,770,710,651,
652,711,706,704,643,585,647,646,705,644,584,586,645,641,762,819,756,636,578,639,700,760,758,697,638,699,634,754,811,748,629,572,
632,693,752,750,690,631,691,686,684,623,565,627,626,685,624,564,566,625,621,742,799,736,616,558,619,680,740,738,677,618,679,614,
734,791,728,609,552,612,673,732,730,670,611,671,666,664,603,545,607,606,665,604,544,546,605,601,722,839,776,656,598,659,660,720,
778,717,658,719,595,533,474,476,537,596,594,534,475,536,535,412,531,588,526,406,349,410,470,529,528,467,408,469,404,524,582,519,
398,341,402,463,522,521,460,400,461,517,575,513,454,456,516,576,574,514,455,515,392,511,568,506,386,329,390,450,509,508,447,388,
449,384,504,562,499,378,321,382,443,502,501,440,380,441,497,555,493,434,436,496,556,554,494,435,495,372,491,548,486,366,309,370,
430,489,488,427,368,429,364,484,542,539,418,301,362,423,482,481,420,360,421,299,417,413,291,232,238,297,357,355,353,293,235,295,
288,345,282,222,228,287,286,284,283,225,285,218,279,397,393,271,212,215,277,337,335,333,273,275,268,325,262,202,208,267,266,264,
263,205,265,198,259,377,373,251,192,195,257,317,315,313,253,255,248,305,242,182,188,247,246,244,243,185,245,130,120,170,160,150,
140,75,65,115,105,95,85,15};
const int8_t xtable[392]={72,72,72,72,72,72,72,72,72,72,72,72,72,66,66,53,40,40,53,58,62,58,49,45,49,53,67,67,55,48,55,61,
65,61,53,53,59,53,66,66,53,40,40,49,58,62,58,49,45,53,67,67,55,48,55,61,65,61,53,53,59,53,66,66,
53,40,40,49,58,62,58,49,45,53,67,67,55,48,55,61,65,61,53,53,59,37,45,32,11,3,16,25,35,33,22,12,
14,24,28,28,8,-3,8,17,24,17,5,5,13,11,32,45,37,16,3,12,22,33,35,25,14,24,16,37,45,32,11,3,
14,25,35,33,22,12,24,28,28,8,-3,8,17,24,17,5,5,13,11,32,45,37,16,3,12,22,33,35,25,14,24,16,
37,45,32,11,3,14,25,35,33,22,12,24,28,28,8,-3,8,17,24,17,5,5,13,11,32,45,37,16,3,12,22,33,
35,25,14,24,3,-8,-28,-28,-8,-5,-5,-17,-24,-17,-13,-32,-11,-3,-16,-37,-45,-33,-22,-12,-14,-25,-35,-24,-37,-16,-3,-11,
-32,-45,-35,-25,-14,-12,-22,-33,-24,-8,3,-8,-28,-28,-17,-5,-5,-17,-24,-13,-32,-11,-3,-16,-37,-45,-33,-22,-12,-14,-25,-35,
-24,-37,-16,-3,-11,-32,-45,-35,-25,-14,-12,-22,-33,-24,-8,3,-8,-28,-28,-17,-5,-5,-17,-24,-13,-32,-11,-3,-16,-37,-45,-33,
-22,-12,-14,-25,-35,-24,-37,-16,-3,-11,-32,-45,-35,-25,-14,-12,-22,-33,-24,-53,-40,-40,-53,-66,-66,-58,-49,-45,-49,-58,-62,-53,
-55,-48,-55,-67,-67,-61,-53,-53,-61,-65,-59,-66,-53,-40,-40,-53,-66,-62,-58,-49,-45,-49,-58,-53,-55,-48,-55,-67,-67,-61,-53,-53,
-61,-65,-59,-66,-53,-40,-40,-53,-66,-62,-58,-49,-45,-49,-58,-53,-55,-48,-55,-67,-67,-61,-53,-53,-61,-65,-59,-72,-72,-72,-72,-72,
-72,-72,-72,-72,-72,-72,-72,-72};
const int8_t ytable[392]={11,22,11,-11,-22,-11,0,11,11,0,-11,-11,0,-11,11,22,11,-11,-22,-11,0,11,11,0,-11,0,23,34,51,51,34,31,
31,41,48,41,39,53,34,23,30,48,60,51,43,33,31,40,50,41,10,-10,-17,0,17,10,0,-10,-6,6,0,-30,-23,-34,
-53,-60,-48,-40,-31,-33,-43,-51,-50,-41,-34,-23,-34,-51,-51,-41,-31,-31,-41,-48,-39,-53,-34,-23,-30,-48,-60,-51,-43,-33,-31,-40,
-50,-41,-10,10,17,0,-17,-10,0,10,6,-6,0,30,23,34,53,60,48,40,31,33,43,51,50,41,67,60,60,67,74,74,
69,65,63,65,69,72,67,66,55,55,66,72,67,61,57,61,67,63,44,44,25,7,7,25,31,37,31,19,13,19,25,-7,
-7,-25,-44,-44,-25,-19,-13,-19,-31,-37,-31,-25,-55,-66,-72,-66,-55,-57,-61,-67,-67,-61,-63,-74,-67,-60,-60,-67,-74,-72,-69,-65,
-63,-65,-69,-67,-66,-55,-55,-66,-72,-67,-61,-57,-61,-67,-63,-44,-44,-25,-7,-7,-25,-31,-37,-31,-19,-13,-19,-25,7,7,25,44,
44,25,19,13,19,31,37,31,25,55,66,72,66,55,57,61,67,67,61,63,67,74,74,67,60,60,65,69,72,69,65,63,
67,53,60,48,30,23,34,43,51,50,40,31,33,41,17,0,-17,-10,10,10,6,-6,-10,0,0,-23,-30,-48,-60,-53,-34,-33,
-31,-40,-50,-51,-43,-41,-60,-67,-74,-74,-67,-60,-63,-65,-69,-72,-69,-65,-67,-53,-60,-48,-30,-23,-34,-43,-51,-50,-40,-31,-33,-41,
-17,0,17,10,-10,-10,-6,6,10,0,0,23,30,48,60,53,34,33,31,40,50,51,43,41,51,51,34,23,34,41,48,41,
31,31,39,11,22,11,-11,-22,-11,0,11,11,0,-11,-11,0,-34,-51,-51,-34,-23,-31,-41,-48,-41,-31,-39,-11,-22,-11,11,22,
11,0,-11,-11,0,11,11,0};
const int8_t ztable[392]={-19,0,19,19,0,-19,-12,-6,6,13,6,-6,0,33,33,48,62,62,48,43,38,43,53,57,53,48,25,7,9,29,39,30,
18,12,20,31,22,-4,-7,-26,-43,-41,-21,-16,-11,-19,-31,-36,-28,-24,-33,-33,-49,-59,-49,-42,-36,-42,-52,-52,-45,-43,-26,-7,
-4,-21,-41,-36,-31,-19,-11,-16,-28,-24,7,25,39,29,9,12,18,30,31,20,22,39,49,64,68,57,43,45,47,56,62,60,
51,53,70,70,74,76,74,72,70,72,74,74,72,68,64,49,39,43,57,60,62,56,47,45,51,53,30,26,5,-11,-7,13,
17,21,13,0,-3,4,9,-25,-44,-51,-38,-22,-27,-35,-45,-42,-31,-36,-60,-52,-55,-65,-73,-71,-65,-58,-57,-61,-67,-69,-63,-73,
-65,-55,-52,-60,-71,-69,-67,-61,-57,-58,-65,-63,-44,-25,-22,-38,-51,-45,-35,-27,-31,-42,-36,-7,-11,5,26,30,13,4,-3,0,
13,21,17,9,38,51,44,25,22,31,42,45,35,27,36,52,60,71,73,65,55,57,58,65,69,67,61,63,65,73,71,60,
52,55,61,67,69,65,58,57,63,51,38,22,25,44,45,42,31,27,35,36,11,7,-13,-30,-26,-5,0,3,-4,-17,-21,-13,
-9,-39,-43,-57,-68,-64,-49,-47,-45,-51,-60,-62,-56,-53,-74,-76,-74,-70,-70,-72,-74,-74,-72,-70,-72,-64,-68,-57,-43,-39,-49,-56,
-62,-60,-51,-45,-47,-53,-26,-30,-13,7,11,-5,-13,-21,-17,-4,3,0,-9,4,21,41,43,26,7,11,16,28,36,31,19,24,
49,59,49,33,33,42,52,52,42,36,45,26,43,41,21,4,7,19,31,36,28,16,11,24,-9,-29,-39,-25,-7,-12,-20,-31,
-30,-18,-22,-33,-48,-62,-62,-48,-33,-38,-43,-53,-57,-53,-43,-48,-39,-29,-9,-7,-25,-30,-31,-20,-12,-18,-22,-19,0,19,19,0,
-19,-13,-6,6,12,6,-6,0};
const uint8_t phitable[392]={20,30,40,50,0,10,15,25,35,45,55,5,45,48,42,41,43,47,49,47,45,43,43,45,47,45,38,32,32,35,38,37,
35,33,34,36,35,29,28,22,21,23,27,27,27,25,23,23,25,25,18,12,12,15,18,17,15,13,14,16,15,9,8,2,
1,3,7,7,7,5,3,3,5,5,58,52,52,55,58,57,55,53,54,56,55,54,51,48,49,52,54,53,52,50,50,51,
52,51,46,44,43,45,47,46,45,44,44,46,45,41,42,39,36,36,38,39,40,40,38,37,38,39,34,34,31,28,29,32,
32,33,32,30,30,31,31,26,24,23,25,27,26,25,24,24,26,25,21,22,19,16,16,18,19,20,20,18,17,18,19,14,
14,11,8,9,12,12,13,12,10,10,11,11,6,4,3,5,7,6,5,4,4,6,5,1,2,59,56,56,58,59,0,0,
58,57,58,59,55,53,54,56,57,56,54,54,55,56,55,52,51,48,46,46,49,50,50,49,48,47,48,49,44,44,42,39,
38,41,42,43,42,41,40,40,41,37,35,33,34,36,36,36,34,34,35,35,32,31,28,26,26,29,30,30,29,28,27,28,
29,24,24,22,19,18,21,22,23,22,21,20,20,21,17,15,13,14,16,16,16,14,14,15,15,12,11,8,6,6,9,10,
10,9,8,7,8,9,4,4,2,59,58,1,2,3,2,1,0,0,1,59,57,53,51,52,58,57,57,55,53,53,55,55,
48,45,42,42,48,47,46,44,43,45,45,38,39,37,33,31,32,35,37,37,35,33,33,35,28,25,22,22,28,27,26,24,
23,25,25,18,19,17,13,11,12,15,17,17,15,13,13,15,8,5,2,2,8,7,6,4,3,5,5,10,0,50,40,30,
20,15,5,55,45,35,25,15};
const uint8_t thetatable[392]={16,16,16,16,16,16,17,17,17,17,17,17,18,15,15,14,12,12,14,14,15,14,13,13,13,14,15,15,14,13,14,14,
15,14,14,14,14,14,15,15,14,12,12,13,14,15,14,13,13,14,15,15,14,13,14,14,15,14,14,14,14,14,15,15,
14,12,12,13,14,15,14,13,13,14,15,15,14,13,14,14,15,14,14,14,14,12,13,12,10,9,10,11,12,12,11,10,
10,11,11,11,10,9,10,10,11,10,9,9,10,10,12,13,12,10,9,10,11,12,12,11,10,11,10,12,13,12,10,9,
10,11,12,12,11,10,11,11,11,10,9,10,10,11,10,9,9,10,10,12,13,12,10,9,10,11,12,12,11,10,11,10,
12,13,12,10,9,10,11,12,12,11,10,11,11,11,10,9,10,10,11,10,9,9,10,10,12,13,12,10,9,10,11,12,
12,11,10,11,9,8,7,7,8,9,9,8,7,8,8,6,8,9,8,6,5,6,7,8,8,7,6,7,6,8,9,8,
6,5,6,7,8,8,7,6,7,8,9,8,7,7,8,9,9,8,7,8,6,8,9,8,6,5,6,7,8,8,7,6,
7,6,8,9,8,6,5,6,7,8,8,7,6,7,8,9,8,7,7,8,9,9,8,7,8,6,8,9,8,6,5,6,
7,8,8,7,6,7,6,8,9,8,6,5,6,7,8,8,7,6,7,4,6,6,4,3,3,4,5,5,5,4,3,4,
4,5,4,3,3,4,4,4,4,3,4,3,4,6,6,4,3,3,4,5,5,5,4,4,4,5,4,3,3,4,4,4,
4,3,4,3,4,6,6,4,3,3,4,5,5,5,4,4,4,5,4,3,3,4,4,4,4,3,4,2,2,2,2,2,
2,1,1,1,1,1,1,0};
const uint8_t decaytable1[256]={0,0,1,2,3,4,5,6,7,8,9,9,10,11,12,13,14,15,16,17,18,18,19,20,21,22,23,24,25,26,27,27,
28,29,30,31,32,33,34,35,36,36,37,38,39,40,41,42,43,44,45,45,46,47,48,49,50,51,52,53,54,54,55,56,
57,58,59,60,61,62,63,63,64,65,66,67,68,69,70,71,72,72,73,74,75,76,77,78,79,80,81,81,82,83,84,85,
86,87,88,89,90,90,91,92,93,94,95,96,97,98,99,99,100,101,102,103,104,105,106,107,108,108,109,110,111,112,113,114,
115,116,117,117,118,119,120,121,122,123,124,125,126,126,127,128,129,130,131,132,133,134,135,135,136,137,138,139,140,141,142,143,
144,144,145,146,147,148,149,150,151,152,153,153,154,155,156,157,158,159,160,161,162,162,163,164,165,166,167,168,169,170,171,171,
172,173,174,175,176,177,178,179,180,180,181,182,183,184,185,186,187,188,189,189,190,191,192,193,194,195,196,197,198,198,199,200,
201,202,203,204,205,206,207,207,208,209,210,211,212,213,214,215,216,216,217,218,219,220,221,222,223,224,225,225,226,227,228,229};
const uint8_t decaytable2[256]={0,0,1,2,2,3,4,4,5,6,7,7,8,9,9,10,11,11,12,13,14,14,15,16,16,17,18,18,19,20,21,21,
22,23,23,24,25,25,26,27,28,28,29,30,30,31,32,32,33,34,35,35,36,37,37,38,39,39,40,41,42,42,43,44,
44,45,46,46,47,48,49,49,50,51,51,52,53,53,54,55,56,56,57,58,58,59,60,60,61,62,63,63,64,65,65,66,
67,67,68,69,70,70,71,72,72,73,74,74,75,76,77,77,78,79,79,80,81,81,82,83,84,84,85,86,86,87,88,88,
89,90,91,91,92,93,93,94,95,95,96,97,98,98,99,100,100,101,102,102,103,104,105,105,106,107,107,108,109,109,110,111,
112,112,113,114,114,115,116,116,117,118,119,119,120,121,121,122,123,123,124,125,126,126,127,128,128,129,130,130,131,132,133,133,
134,135,135,136,137,137,138,139,140,140,141,142,142,143,144,144,145,146,147,147,148,149,149,150,151,151,152,153,154,154,155,156,
156,157,158,158,159,160,161,161,162,163,163,164,165,165,166,167,168,168,169,170,170,171,172,172,173,174,175,175,176,177,177,178};
const uint8_t decaytable3[256]={0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,
16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,
32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,
48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63,
64,64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,
80,80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,
96,96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,
112,112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,120,121,121,122,122,123,123,124,124,125,125,126,126,127,127};
const uint8_t decaytable4[256]={0,0,0,0,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,9,9,
9,9,10,10,10,11,11,11,12,12,12,12,13,13,13,14,14,14,15,15,15,15,16,16,16,17,17,17,18,18,18,18,
19,19,19,20,20,20,21,21,21,21,22,22,22,23,23,23,24,24,24,24,25,25,25,26,26,26,27,27,27,27,28,28,
28,29,29,29,30,30,30,30,31,31,31,32,32,32,33,33,33,33,34,34,34,35,35,35,36,36,36,36,37,37,37,38,
38,38,39,39,39,39,40,40,40,41,41,41,42,42,42,42,43,43,43,44,44,44,45,45,45,45,46,46,46,47,47,47,
48,48,48,48,49,49,49,50,50,50,51,51,51,51,52,52,52,53,53,53,54,54,54,54,55,55,55,56,56,56,57,57,
57,57,58,58,58,59,59,59,60,60,60,60,61,61,61,62,62,62,63,63,63,63,64,64,64,65,65,65,66,66,66,66,
67,67,67,68,68,68,69,69,69,69,70,70,70,71,71,71,72,72,72,72,73,73,73,74,74,74,75,75,75,75,76,76};
const uint8_t decaytable5[256]={0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,
3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,
6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,
9,9,9,9,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,
12,12,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,
16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,18,19,19,
19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,22,22,22,22,
22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25};
effect::effect(char *_name, bool _isfield):parametric(_name) {
isfield = _isfield;
list = NULL;
field = NULL;
if (isfield) {
field = (ledfield_t*) malloc(sizeof(ledfield_t));
memset(field, 0, sizeof(ledfield_t));
} else {
list = (ledlist_t*) malloc(sizeof(ledlist_t));
memset(list, 0, sizeof(ledlist_t));
}
}
void effect::listdecay(uint8_t decayfactor) {
switch (decayfactor) {
case 0:
for (int i=0;i<LEDS;i++) {
list->r[i] = decaytable1[list->r[i]];
list->g[i] = decaytable1[list->g[i]];
list->b[i] = decaytable1[list->b[i]];
}
break;
case 1:
for (int i=0;i<LEDS;i++) {
list->r[i] = decaytable2[list->r[i]];
list->g[i] = decaytable2[list->g[i]];
list->b[i] = decaytable2[list->b[i]];
}
break;
case 2:
for (int i=0;i<LEDS;i++) {
list->r[i] = decaytable3[list->r[i]];
list->g[i] = decaytable3[list->g[i]];
list->b[i] = decaytable3[list->b[i]];
}
break;
case 3:
for (int i=0;i<LEDS;i++) {
list->r[i] = decaytable4[list->r[i]];
list->g[i] = decaytable4[list->g[i]];
list->b[i] = decaytable4[list->b[i]];
}
break;
default:
for (int i=0;i<LEDS;i++) {
list->r[i] = decaytable5[list->r[i]];
list->g[i] = decaytable5[list->g[i]];
list->b[i] = decaytable5[list->b[i]];
}
break;
}
}
const uint8_t *getdecaytable(uint8_t decayfactor) {
switch (decayfactor) {
case 0: return decaytable1;
case 1: return decaytable2;
case 2: return decaytable3;
case 3: return decaytable4;
default: return decaytable5;
}
}
void listdecaybuffer(uint8_t *buffer, uint8_t decayfactor) {
const uint8_t *decaytable = getdecaytable(decayfactor);
for (int i=0;i<LEDS;i++)
buffer[i] = decaytable[buffer[i]];
}
void effect::listdecayr(uint8_t decayfactor) {
listdecaybuffer(list->r, decayfactor);
}
void effect::listdecayg(uint8_t decayfactor) {
listdecaybuffer(list->g, decayfactor);
}
void effect::listdecayb(uint8_t decayfactor) {
listdecaybuffer(list->b, decayfactor);
}
void effect::shiftbufferleft(uint8_t *buffer, uint8_t n) {
for (int i=0;i<LEDH;i++) {
int ofs = i*LEDW;
memmove(buffer+ofs,buffer+ofs+n,LEDW-n);
memset(buffer+ofs+LEDW-n,0,n);
}
}
void effect::shiftbufferright(uint8_t *buffer, uint8_t n) {
for (int i=0;i<LEDH;i++) {
int ofs = i*LEDW;
memmove(buffer+ofs+n,buffer+ofs,LEDW-n);
memset(buffer+ofs,0,n);
}
}
void effect::rollbufferleft(uint8_t *buffer, uint8_t n) {
uint8_t temp[LEDW];
for (int i=0;i<LEDH;i++) {
int ofs = i*LEDW;
memcpy(temp,buffer+ofs,n);
memmove(buffer+ofs,buffer+ofs+n,LEDW-n);
memcpy(buffer+ofs+LEDW-n,temp,n);
}
}
void effect::rollbufferright(uint8_t *buffer, uint8_t n) {
uint8_t temp[LEDW];
for (int i=0;i<LEDH;i++) {
int ofs = i*LEDW;
memcpy(temp,buffer+ofs+LEDW-n,n);
memmove(buffer+ofs+n,buffer+ofs,LEDW-n);
memcpy(buffer+ofs,temp,n);
}
}
void effect::rollfield(int8_t n) {
if (n >= 0) {
// To the right
n = n % LEDW;
if (n == 0) return;
rollbufferright(field->r,n);
rollbufferright(field->g,n);
rollbufferright(field->b,n);
} else {
// to the left
n = (-n) % LEDW;
if (n == 0) return;
rollbufferleft(field->r,n);
rollbufferleft(field->g,n);
rollbufferleft(field->b,n);
}
}
void effect::shiftfield(int8_t n) {
if (n >= 0) {
// To the right
if (n == 0) return;
if (n >= LEDW) {
memset(field->r,0,LEDW*LEDH);
memset(field->g,0,LEDW*LEDH);
memset(field->b,0,LEDW*LEDH);
return;
}
shiftbufferright(field->r,n);
shiftbufferright(field->g,n);
shiftbufferright(field->b,n);
} else {
// to the left
n = -n;
if (n == 0) return;
if (n >= LEDW) {
memset(field->r,0,LEDW*LEDH);
memset(field->g,0,LEDW*LEDH);
memset(field->b,0,LEDW*LEDH);
return;
}
shiftbufferleft(field->r,n);
shiftbufferleft(field->g,n);
shiftbufferleft(field->b,n);
}
}