1
+ let screen_width = window . innerWidth , screen_height = window . innerHeight ;
2
+ let canvas_width , canvas_height ;
3
+ let fps = 24 , paused = false ;
4
+ let mobile ;
5
+
6
+ if ( / A n d r o i d | w e b O S | i P h o n e | i P a d | i P o d | B l a c k B e r r y | I E M o b i l e | O p e r a M i n i / i. test ( navigator . userAgent ) ) {
7
+ mobile = true ;
8
+ } else {
9
+ mobile = false ;
10
+ }
11
+
12
+ let canvas = document . getElementById ( "canvas" ) ;
13
+ let context = canvas . getContext ( "2d" ) ;
14
+
15
+ let polar_display = document . getElementById ( "polar-display" ) ;
16
+ let ang_display = document . getElementById ( "ang-display" ) ;
17
+
18
+ let num_display = document . getElementById ( "num-display" )
19
+
20
+ let repulsion_display = document . getElementById ( "repulsion-display" ) ;
21
+ let repulsion_input = document . getElementById ( "repulsion-input" ) ;
22
+
23
+ let orientation_display = document . getElementById ( "orientation-display" ) ;
24
+ let orientation_input = document . getElementById ( "orientation-input" ) ;
25
+
26
+ let attraction_display = document . getElementById ( "attraction-display" ) ;
27
+ let attraction_input = document . getElementById ( "attraction-input" ) ;
28
+
29
+ let moving_speed_display = document . getElementById ( "moving-speed-display" ) ;
30
+ let moving_speed_input = document . getElementById ( "moving-speed-input" ) ;
31
+
32
+ let turning_speed_display = document . getElementById ( "turning-speed-display" ) ;
33
+ let turning_speed_input = document . getElementById ( "turning-speed-input" ) ;
34
+
35
+ let noise_display = document . getElementById ( "noise-display" ) ;
36
+ let noise_input = document . getElementById ( "noise-input" ) ;
37
+
38
+ let blind_display = document . getElementById ( "blind-display" ) ;
39
+ let blind_input = document . getElementById ( "blind-input" ) ;
40
+
41
+ let reflect_button = document . getElementById ( "reflect-button" ) ;
42
+ let pause_button = document . getElementById ( "pause-button" ) ;
43
+
44
+ if ( mobile ) {
45
+ canvas_width = 0.9 * screen_width ;
46
+ }
47
+ else {
48
+ canvas_width = 0.45 * screen_width ;
49
+ }
50
+ canvas_height = canvas_width ;
51
+
52
+ canvas . width = canvas_width ;
53
+ canvas . height = canvas_height ;
54
+
55
+ let animate = window . requestAnimationFrame
56
+ || window . webkitRequestAnimationFrame
57
+ || window . mozRequestAnimationFrame
58
+ || function ( callback ) {
59
+ window . setTimeout ( callback , 1000 / fps ) ;
60
+ } ;
61
+
62
+ function step ( ) {
63
+ if ( ! paused ) {
64
+ update ( ) ;
65
+ }
66
+ render ( ) ;
67
+ animate ( step ) ;
68
+ }
69
+
70
+ window . onload = function ( ) {
71
+ defaultParams ( ) ;
72
+ initParams ( ) ;
73
+ animate ( step ) ;
74
+ }
75
+
76
+ function defaultParams ( ) {
77
+ if ( mobile ) {
78
+ spoke_length = 5 ;
79
+ characteristic_length = 8 ;
80
+ }
81
+ else {
82
+ spoke_length = 8 ;
83
+ characteristic_length = 12 ;
84
+ }
85
+
86
+ repulsion_input . value = 1 ;
87
+ orientation_input . value = 3 ;
88
+ attraction_input . value = 15 ;
89
+
90
+ moving_speed_input . value = 7 ;
91
+ turning_speed_input . value = 8 ;
92
+ noise_input . value = 10 ;
93
+
94
+ blind_input . value = 90 ;
95
+ reflect = false ;
96
+
97
+ if ( reflect == false ) {
98
+ reflect_button . innerHTML = "Reflect: Off" ;
99
+ }
100
+ else {
101
+ reflect_button . innerHTML = "Reflect: On" ;
102
+ }
103
+ }
104
+
105
+ let click_x , click_y , pressed ;
106
+
107
+ if ( mobile ) {
108
+ canvas . addEventListener ( "touchstart" , function ( e ) {
109
+ getTouchPosition ( canvas , e ) ;
110
+ let touch = e . touches [ 0 ] ;
111
+ let mouseEvent = new MouseEvent ( "mousedown" , {
112
+ clientX : touch . clientX ,
113
+ clientY : touch . clientY
114
+ } ) ;
115
+ canvas . dispatchEvent ( mouseEvent ) ;
116
+ pressed = true ;
117
+ clicked ( ) ;
118
+ } , false ) ;
119
+
120
+ canvas . addEventListener ( "touchmove" , function ( e ) {
121
+ getTouchPosition ( canvas , e ) ;
122
+ let touch = e . touches [ 0 ] ;
123
+ let mouseEvent = new MouseEvent ( "mousemove" , {
124
+ clientX : touch . clientX ,
125
+ clientY : touch . clientY
126
+ } ) ;
127
+ canvas . dispatchEvent ( mouseEvent ) ;
128
+ moved ( ) ;
129
+ } , false ) ;
130
+
131
+ canvas . addEventListener ( "touchend" , function ( e ) {
132
+ getTouchPosition ( canvas , e ) ;
133
+ let touch = e . touches [ 0 ] ;
134
+ let mouseEvent = new MouseEvent ( "mouseup" , {
135
+ clientX : touch . clientX ,
136
+ clientY : touch . clientY
137
+ } ) ;
138
+ canvas . dispatchEvent ( mouseEvent ) ;
139
+ pressed = false ;
140
+ released ( ) ;
141
+ } , false ) ;
142
+ }
143
+ else {
144
+ canvas . addEventListener ( "mousedown" , function ( e ) {
145
+ getMousePosition ( canvas , e ) ;
146
+ pressed = true ;
147
+ clicked ( ) ;
148
+ } ) ;
149
+
150
+ canvas . addEventListener ( "mousemove" , function ( e ) {
151
+ getMousePosition ( canvas , e ) ;
152
+ moved ( ) ;
153
+ } ) ;
154
+
155
+ canvas . addEventListener ( "mouseup" , function ( e ) {
156
+ getMousePosition ( canvas , e ) ;
157
+ pressed = false ;
158
+ released ( ) ;
159
+ } ) ;
160
+
161
+ window . addEventListener ( "keydown" , function ( e ) {
162
+ keyPressed ( e . keyCode ) ;
163
+ } , false ) ;
164
+
165
+ window . addEventListener ( "keydown" , function ( e ) {
166
+ keyReleased ( e . keyCode ) ;
167
+ } , false ) ;
168
+ }
169
+
170
+ function getMousePosition ( canvas , event ) {
171
+ rect = canvas . getBoundingClientRect ( ) ;
172
+ click_x = event . clientX - rect . left ;
173
+ click_y = event . clientY - rect . top ;
174
+ }
175
+
176
+ function getTouchPosition ( canvas , event ) {
177
+ var rect = canvas . getBoundingClientRect ( ) ;
178
+ click_x = event . touches [ 0 ] . clientX - rect . left ;
179
+ click_y = event . touches [ 0 ] . clientY - rect . top ;
180
+ }
181
+
182
+ function pauseToggle ( ) {
183
+ if ( paused ) {
184
+ paused = false ;
185
+ pause_button . innerHTML = "Pause" ;
186
+ }
187
+ else {
188
+ paused = true ;
189
+ pause_button . innerHTML = "Resume" ;
190
+ }
191
+ }
192
+
193
+ function toggleReflection ( ) {
194
+ if ( reflect ) {
195
+ reflect = false ;
196
+ reflect_button . innerHTML = "Reflect: Off" ;
197
+ }
198
+ else {
199
+ reflect = true ;
200
+ reflect_button . innerHTML = "Reflect: On" ;
201
+ }
202
+ }
0 commit comments