1
- /**
2
- * House of cards
3
- */
4
1
2
+ // Constants
5
3
var CARD_HEIGHT = 100 ;
6
4
var CARD_WIDTH = 60 ;
7
5
var CARD_COUNT = 40 ;
@@ -12,15 +10,33 @@ var BOTTOM = 400;
12
10
13
11
var TILT = Math . PI / 8 ;
14
12
var PYTH_ANGLE = Math . PI / 2 - TILT ;
13
+
15
14
var TILTED_CARD_HEIGHT = Math . sin ( PYTH_ANGLE ) * CARD_HEIGHT + 2 ;
16
15
var TILTED_CARD_WIDTH = Math . cos ( PYTH_ANGLE ) * CARD_HEIGHT ;
17
16
var PYRAMID_WIDTH = TILTED_CARD_WIDTH * 2 + 4 ;
18
17
18
+ function update_sizes ( ) {
19
+ var c = document . getElementById ( 'container' ) ;
20
+ WIDTH = c . clientWidth ;
21
+ HEIGHT = c . clientHeight ;
22
+ CARD_WIDTH = WIDTH * 0.05 ;
23
+ CARD_HEIGHT = HEIGHT * 0.15 ;
24
+ TILTED_CARD_HEIGHT = Math . sin ( PYTH_ANGLE ) * CARD_HEIGHT + 2 ;
25
+ TILTED_CARD_WIDTH = Math . cos ( PYTH_ANGLE ) * CARD_HEIGHT ;
26
+ PYRAMID_WIDTH = TILTED_CARD_WIDTH * 2 + 4 ;
27
+ for ( var i = 0 ; i < Deck . cards . length ; ++ i ) {
28
+ Deck . card_at ( i ) . style . height = CARD_HEIGHT + 'px' ;
29
+ Deck . card_at ( i ) . style . width = CARD_WIDTH + 'px' ;
30
+ }
31
+ }
32
+
19
33
var COLORS = randomColor ( {
20
34
count : 40 ,
21
35
luminosity : 'dark' ,
22
36
} ) ;
23
37
38
+
39
+ // Formations
24
40
var PILE = 1 ;
25
41
var HOUSE = 2 ;
26
42
var WALL = 3 ;
@@ -29,15 +45,13 @@ var current_mode = PILE;
29
45
30
46
var formation_builders = { } ;
31
47
formation_builders [ PILE ] = pile_positions ;
32
- formation_builders [ HOUSE ] = centered_house_positions ;
48
+ formation_builders [ HOUSE ] = house_positions ;
33
49
formation_builders [ WALL ] = wall_positions ;
34
50
formation_builders [ CYLINDER ] = cylinder_positions ;
35
51
36
52
function create_card ( container , index ) {
37
53
var card = document . createElement ( 'div' ) ;
38
54
card . className = 'card' ;
39
- card . style . height = CARD_HEIGHT + 'px' ;
40
- card . style . width = CARD_WIDTH + 'px' ;
41
55
card . style . background = COLORS [ index % COLORS . length ] ;
42
56
43
57
container . appendChild ( card ) ;
@@ -85,6 +99,7 @@ function build_formation(positions) {
85
99
}
86
100
87
101
function set_mode ( mode ) {
102
+ update_sizes ( ) ;
88
103
if ( mode == current_mode ) {
89
104
return ;
90
105
}
@@ -99,7 +114,7 @@ function set_mode(mode) {
99
114
100
115
build_formation ( positions ) ;
101
116
current_mode = mode ;
102
- } ;
117
+ }
103
118
104
119
function rotate_container ( ) {
105
120
var container = document . getElementById ( 'surface' ) ;
@@ -111,14 +126,16 @@ function rotate_container() {
111
126
}
112
127
113
128
function pile_positions ( ) {
114
- var positions = [ ] ;
115
129
Deck . reset ( ) ;
130
+ var positions = [ ] ;
131
+
116
132
var i = 0 ;
117
133
var card = Deck . next_card ( ) ;
118
134
var center = ( WIDTH - CARD_WIDTH ) / 2 ;
135
+ var y = HEIGHT - HEIGHT * 0.2 ;
119
136
while ( card ) {
120
137
positions . push ( {
121
- position : [ center , BOTTOM - i * 0.5 , 300 ] ,
138
+ position : [ center , y - i * 0.5 , WIDTH * 0.1 ] ,
122
139
rotation : [ Math . PI / 2 , 0 , 0 ] ,
123
140
} ) ;
124
141
++ i ;
@@ -127,12 +144,20 @@ function pile_positions() {
127
144
return positions ;
128
145
}
129
146
130
- function house_positions ( floors , x , y , z ) {
147
+ function house_positions ( ) {
131
148
Deck . reset ( ) ;
149
+
150
+ var floors = 5 ;
151
+ var y = ( floors - 1 ) * TILTED_CARD_HEIGHT + TILTED_CARD_HEIGHT / 2 ;
152
+ var z = - WIDTH * 0.2 ;
153
+ var x = ( WIDTH - PYRAMID_WIDTH * floors ) / 2 - TILTED_CARD_WIDTH ;
154
+
132
155
var positions = [ ] ;
133
156
var i ;
134
157
for ( i = 0 ; i < floors ; ++ i ) {
135
- positions = positions . concat ( house_row_positions ( floors - i , x + i * TILTED_CARD_WIDTH , y - i * TILTED_CARD_HEIGHT , z ) ) ;
158
+ var _x = x + i * TILTED_CARD_WIDTH ;
159
+ var _y = y - i * TILTED_CARD_HEIGHT ;
160
+ positions = positions . concat ( house_row_positions ( floors - i , _x , _y , z ) ) ;
136
161
}
137
162
138
163
return positions ;
@@ -178,11 +203,13 @@ function pyramid_postions(x, y, z) {
178
203
179
204
function wall_positions ( ) {
180
205
var positions = [ ] ;
181
- var start_x = ( WIDTH - 10 * CARD_WIDTH ) / 2 ;
182
- var start_y = ( HEIGHT - 4 * CARD_HEIGHT ) / 2 ;
206
+ var w = CARD_WIDTH + 10 ;
207
+ var h = CARD_HEIGHT + 10 ;
208
+ var start_x = ( WIDTH - 10 * w ) / 2 ;
209
+ var start_y = ( HEIGHT - 4 * h ) / 2 ;
183
210
for ( var i = 0 ; i < CARD_COUNT ; ++ i ) {
184
- var x = ( i % 10 ) * CARD_WIDTH + start_x ;
185
- var y = ( Math . floor ( i / 10 ) ) * CARD_HEIGHT + start_y ;
211
+ var x = ( i % 10 ) * w + start_x ;
212
+ var y = ( Math . floor ( i / 10 ) ) * h + start_y ;
186
213
positions . push ( {
187
214
position : [ x , y , 0 ] ,
188
215
rotation : [ 0 , 0 , 0 ]
@@ -194,7 +221,7 @@ function wall_positions() {
194
221
function cylinder_positions ( ) {
195
222
var positions = [ ] ;
196
223
var start_x = WIDTH / 2 ;
197
- var start_y = 100 ;
224
+ var start_y = HEIGHT * 0.05 ;
198
225
var radius = 100 ;
199
226
for ( var i = 0 ; i < CARD_COUNT ; ++ i ) {
200
227
var angle = ( ( i % 10 ) / 10 ) * 2 * Math . PI ;
@@ -221,17 +248,15 @@ function build_pile() {
221
248
set_mode ( PILE ) ;
222
249
}
223
250
224
-
225
- function centered_house_positions ( ) {
226
- // TODO: Actually center
227
- return house_positions ( 5 , 200 , BOTTOM , - 300 ) ;
228
- }
229
-
230
251
function init ( ) {
252
+ update_sizes ( ) ;
231
253
Deck . reset ( ) ;
232
254
build_wall ( ) ;
233
255
rotate_container ( ) ;
234
256
257
+ // Initialize fast click
258
+ FastClick . attach ( document . body ) ;
259
+
235
260
// Event handlers
236
261
var buttons = {
237
262
"pile_button" : PILE ,
0 commit comments