-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathsketch.js
More file actions
108 lines (92 loc) · 2.12 KB
/
sketch.js
File metadata and controls
108 lines (92 loc) · 2.12 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
var images = [];
var countries;
var files_map;
var filenames;
var assetsDir = 'assets/';
var emojisDir = assetsDir + 'emoji-flags/';
var scaling = 15;
var rx;
var ry;
var currentCountry;
var currentIndex;
var theta;
var hand;
var largeFlagRadius;
function preload() {
countries = Object.keys(files_map);
filenames = Object.values(files_map);
for(var i = 0; i < filenames.length; i++) {
filepath = emojisDir + filenames[i];
images.push(loadImage(filepath));
}
}
function imageLoaded(image) {
images.push(image);
}
function setup() {
createCanvas(windowWidth, windowHeight);
var minSize = min([windowWidth, windowHeight, displayWidth, displayHeight]);
ry = 0.95 * minSize / 2;
hand = new Hand(ry);
setupMusic();
}
function draw() {
background(50);
translate(width / 2, height / 2);
drawFlags();
hand.update();
drawLargeFlag();
fill(255);
}
function inFlag() {
var distanceToCenter = dist(mouseX, mouseY, width/2, height/2);
return distanceToCenter < largeFlagRadius;
}
function touchStarted() {
if (inFlag()){
hand.addImpulses = true;
}
return false;
}
function touchMoved() {
if (!inFlag()){
hand.addImpulses = false;
}
return false;
}
function touchEnded() {
hand.addImpulses = false;
return false;
}
function drawFlags() {
var x;
var y;
var img;
var N = images.length;
var flagTheta;
for (var i = 0; i < N; i++) {
img = images[i];
imWidth = img.width / scaling;
imHeight = img.height / scaling;
flagTheta = i / N * TAU;
x = ry * cos(flagTheta) - imWidth / 2;
y = ry * sin(flagTheta) - imHeight / 2;
image(img, x, y, imWidth, imHeight);
}
}
function drawLargeFlag() {
currentIndex = Math.round(map(hand.theta, 0, TAU, 0, images.length));
currentIndex = constrain(currentIndex, 0, images.length - 1);
var img = images[currentIndex];
var RATIO = 2;
var w = img.width * RATIO;
var h = img.height * RATIO;
largeFlagRadius = w / 2;
image(img, -w / 2, -h / 2, w, h);
var oldCountry = currentCountry;
currentCountry = countries[currentIndex];
if (currentCountry != oldCountry) {
print(currentCountry);
playEnv();
}
}