@@ -38,6 +38,7 @@ pub struct Game {
38
38
pub board : Board ,
39
39
pub bag : TileBag ,
40
40
pub judge : Judge ,
41
+ pub move_sequence : Vec < Move > ,
41
42
pub battle_count : u32 ,
42
43
pub turn_count : u32 ,
43
44
pub player_turn_count : Vec < u32 > ,
@@ -72,6 +73,7 @@ impl Game {
72
73
board,
73
74
bag : TileBag :: generation ( rules. tile_generation , tile_seed) ,
74
75
judge : Judge :: default ( ) ,
76
+ move_sequence : vec ! [ ] ,
75
77
battle_count : 0 ,
76
78
turn_count : 0 ,
77
79
player_turn_count : Vec :: with_capacity ( 2 ) ,
@@ -104,6 +106,7 @@ impl Game {
104
106
board,
105
107
bag : TileBag :: generation ( rules. tile_generation , tile_seed) ,
106
108
judge : Judge :: default ( ) ,
109
+ move_sequence : vec ! [ ] ,
107
110
battle_count : 0 ,
108
111
turn_count : 0 ,
109
112
player_turn_count : Vec :: with_capacity ( 2 ) ,
@@ -412,7 +415,7 @@ impl Game {
412
415
}
413
416
414
417
self . recent_changes = match self . make_move (
415
- next_move,
418
+ next_move. clone ( ) ,
416
419
attacker_dictionary,
417
420
defender_dictionary,
418
421
cached_word_judgements,
@@ -423,6 +426,7 @@ impl Game {
423
426
return Err ( format ! ( "{msg}" ) ) ;
424
427
}
425
428
} ;
429
+ self . move_sequence . push ( next_move) ;
426
430
427
431
// Track any new tiles that the player may have gained vision of from this turn
428
432
{
@@ -548,6 +552,7 @@ impl Game {
548
552
match game_move {
549
553
Move :: Place {
550
554
player,
555
+ slot,
551
556
tile,
552
557
position : player_reported_position,
553
558
} => {
@@ -579,8 +584,21 @@ impl Game {
579
584
return Err ( GamePlayError :: NonAdjacentPlace ) ;
580
585
}
581
586
582
- if !self . players [ player] . has_tile ( tile) {
583
- return Err ( GamePlayError :: PlayerDoesNotHaveTile { player, tile } ) ;
587
+ match slot {
588
+ Some ( slot) => {
589
+ if !self . players [ player] . has_tile_in_slot ( tile, slot) {
590
+ return Err ( GamePlayError :: PlayerDoesNotHaveTileInSlot {
591
+ player,
592
+ tile,
593
+ slot,
594
+ } ) ;
595
+ }
596
+ }
597
+ None => {
598
+ if !self . players [ player] . has_tile ( tile) {
599
+ return Err ( GamePlayError :: PlayerDoesNotHaveTile { player, tile } ) ;
600
+ }
601
+ }
584
602
}
585
603
586
604
changes. push ( Change :: Board ( BoardChange {
@@ -589,7 +607,7 @@ impl Game {
589
607
. set ( position, player, tile, attacker_dictionary) ?,
590
608
action : BoardChangeAction :: Added ,
591
609
} ) ) ;
592
- changes. push ( self . players [ player] . use_tile ( tile, & mut self . bag ) ?) ;
610
+ changes. push ( self . players [ player] . use_tile ( tile, slot , & mut self . bag ) ?) ;
593
611
594
612
self . resolve_attack (
595
613
player,
0 commit comments