@@ -160,10 +160,18 @@ class Game{
160
160
1 : [ ]
161
161
} ;
162
162
this . sockets = { } ;
163
+ this . status = 'wait-for-player' ;
164
+ this . processTurn ( ) ;
163
165
}
164
166
165
167
attachPlayerAndSocket ( playerName , socket ) {
166
168
this . players [ playerName ] . socket = socket ;
169
+ if ( this . status === 'wait-for-player' ) return ;
170
+ if ( typeof this . status === 'string' ) socket . emit ( this . status ) ;
171
+ else {
172
+ if ( this . status . name !== undefined && this . status . name !== playerName ) return ;
173
+ socket . emit ( this . status . content , this . status . data ) ;
174
+ }
167
175
}
168
176
169
177
detachPlayerAndSocket ( playerName , socket ) {
@@ -181,7 +189,7 @@ class Game{
181
189
}
182
190
183
191
getPieceInTile ( piecePosition ) {
184
- this . players . map ( ( v ) => v . pieces ) . map ( ( v ) => {
192
+ return Object . keys ( this . players ) . map ( ( v ) => this . players [ v ] . pieces ) . map ( ( v ) => {
185
193
return v . filter ( ( v ) => {
186
194
return ! v . finished && v . pos === piecePosition ;
187
195
} ) ;
@@ -249,7 +257,7 @@ class Game{
249
257
sleep ( 500 ) ;
250
258
}
251
259
var movementPoint = 1 ;
252
- while ( movementPoint != = 1 ) {
260
+ while ( movementPoint > = 1 ) {
253
261
this . requestThrowYut ( ) ;
254
262
255
263
var frontStatus = 0 ;
@@ -280,17 +288,8 @@ class Game{
280
288
this . players [ k ] . yutStatus = undefined ;
281
289
} ) ;
282
290
283
- var turnPlayer = Object . keys ( this . players ) [ this . turn ] ;
291
+ var turnPlayer = this . players [ Object . keys ( this . players ) [ this . turn ] ] ;
284
292
var groupnizable = ( turnPlayer . getAvailablePieces ( ) . length === 2 ) && ( turnPlayer . pieces [ 0 ] . pos === turnPlayer . pieces [ 1 ] . pos ) && turnPlayer . pieces [ 0 ] . pos !== 0 ;
285
- if ( turnPlayer . socket !== undefined ) turnPlayer . socket . emit ( 'select piece' , {
286
- data : turnPlayer . getAvailablePieces ( ) . map ( ( v ) => {
287
- return {
288
- id : v . pieceId ,
289
- pos : v . pos
290
- } ;
291
- } ) ,
292
- groupnizable : groupnizable
293
- } ) ;
294
293
295
294
var waitAmount = 0 ;
296
295
@@ -301,15 +300,42 @@ class Game{
301
300
turnPlayer . selectedPiece = turnPlayer . getAvailablePieces ( ) [ 0 ] . pieceIndex ;
302
301
}
303
302
304
- while ( turnPlayer . selectedPiece !== undefined ) {
303
+ this . status = {
304
+ name : turnPlayer ,
305
+ content : 'select piece' ,
306
+ data : {
307
+ data : turnPlayer . getAvailablePieces ( ) . map ( ( v ) => {
308
+ return {
309
+ id : v . pieceId ,
310
+ pos : v . pos
311
+ } ;
312
+ } ) ,
313
+ groupnizable : groupnizable
314
+ }
315
+ } ;
316
+
317
+ if ( turnPlayer . socket !== undefined ) turnPlayer . socket . emit ( 'select piece' , {
318
+ data : turnPlayer . getAvailablePieces ( ) . map ( ( v ) => {
319
+ return {
320
+ id : v . pieceId ,
321
+ pos : v . pos
322
+ } ;
323
+ } ) ,
324
+ groupnizable : groupnizable
325
+ } ) ;
326
+
327
+ var selectWait = 0 ;
328
+ while ( turnPlayer . selectedPiece === undefined ) {
305
329
sleep ( 500 ) ;
306
- waitAmount ++ ;
307
- if ( waitAmount > 40 ) {
330
+ selectWait ++ ;
331
+ if ( selectWait > 40 ) {
308
332
turnPlayer . selectedPiece = Math . round ( Math . random ( ) ) ;
309
333
break ;
310
334
}
311
335
}
312
336
337
+ this . status = 'wait-for-player' ;
338
+
313
339
if ( ! ( turnPlayer . selectedPiece === 2 && groupnizable ) && turnPlayer . pieces [ turnPlayer . selectedPiece ] === undefined ) {
314
340
turnPlayer . selectedPiece = turnPlayer . getAvailablePieces ( ) [ 0 ] . pieceIndex ;
315
341
}
@@ -323,7 +349,8 @@ class Game{
323
349
} ) [ 0 ] ;
324
350
325
351
var handleMovement = ( nextTile , piece ) => {
326
- piece . pos = nextTile . getId ( ) ;
352
+ piece . pos = nextTile ;
353
+ nextTile = this . map [ nextTile ] ;
327
354
piece . movementStack . push ( piece . pos ) ;
328
355
this . broadcastPacket ( 'piece move' , {
329
356
player : turnPlayer . name ,
@@ -342,6 +369,7 @@ class Game{
342
369
return false ;
343
370
} ;
344
371
372
+ var currTile = this . map [ piece . pos ] ;
345
373
if ( movementAmount >= 1 ) {
346
374
handleMovement ( currTile . getConnected ( piece . movementStack . slice ( - 1 ) . pop ( ) ) , piece ) ;
347
375
if ( group ) handleMovement ( currTile . getBack ( piece . movementStack . slice ( - 1 ) . pop ( ) ) , anotherPiece ) ;
@@ -355,7 +383,6 @@ class Game{
355
383
sleep ( 1000 ) ;
356
384
}
357
385
358
- var currTile = this . map [ piece . pos ] ;
359
386
if ( movementAmount === - 1 ) {
360
387
handleMovement ( currTile . getBack ( piece . movementStack . slice ( - 1 ) . pop ( ) ) , piece ) ;
361
388
if ( group ) handleMovement ( currTile . getBack ( piece . movementStack . slice ( - 1 ) . pop ( ) ) , anotherPiece ) ;
@@ -383,7 +410,7 @@ class Game{
383
410
384
411
this . turn ++ ;
385
412
setTimeout ( this . processTurn , 0 ) ;
386
- } ) ;
413
+ } ) . run ( ) ;
387
414
}
388
415
389
416
getAnotherTeamPlayer ( player ) {
@@ -400,6 +427,7 @@ class Game{
400
427
}
401
428
402
429
requestThrowYut ( ) {
430
+ this . status = 'throw yut' ;
403
431
this . broadcastPacketToPlayers ( 'throw yut' ) ;
404
432
while ( ! this . allThrowed ( ) ) {
405
433
sleep ( 500 ) ;
@@ -408,15 +436,20 @@ class Game{
408
436
409
437
save ( ) {
410
438
var saveData = { } ;
439
+ var sockets = { } ;
411
440
Object . keys ( this . players ) . forEach ( ( k ) => {
412
441
var v = this . players [ k ] ;
413
442
v . pieces . forEach ( ( v ) => {
414
443
v . player = undefined ;
415
444
} ) ;
445
+ sockets [ k ] = this . players [ k ] . socket ;
446
+ this . players [ k ] . socket = undefined ;
416
447
} ) ;
448
+
417
449
saveData . players = JSON . stringify ( this . players ) ;
418
450
Object . keys ( this . players ) . forEach ( ( k ) => {
419
451
var v = this . players [ k ] ;
452
+ this . players [ k ] . socket = sockets [ k ] ;
420
453
v . pieces . forEach ( ( v2 ) => {
421
454
v2 . player = v ;
422
455
} ) ;
0 commit comments