@@ -5,9 +5,9 @@ import de.htwg.se.set.model.GameMode.{GAME_END, IN_GAME, SETTINGS}
5
5
import de .htwg .se .set .model .game .base .{Deck , Player , Triplet }
6
6
import de .htwg .se .set .model .{ICard , ITriplet }
7
7
import de .htwg .se .set .util .PrintUtil
8
- import play .api .libs .json .JsValue
8
+ import play .api .libs .json .{ JsValue , Json }
9
9
10
- import scala .xml .Node
10
+ import scala .xml .{ Node , Utility }
11
11
12
12
private class Command (controller : IController ) extends ICommand (controller):
13
13
@@ -71,14 +71,19 @@ case class AddColumnCommand(controller: IController) extends Command(controller)
71
71
val cardsAdded = controller.game.deck.tableCards(
72
72
controller.game.columns, controller.game.tableCards, controller.game.playersCards
73
73
)
74
- if cardsAdded.length > controller.game.tableCards.length then
74
+ val cardsAvailable = cardsAdded.length > controller.game.tableCards.length
75
+ val setsAvailable = controller.game.deck.findSets(controller.game.tableCards).nonEmpty
76
+ if cardsAvailable && controller.game.columns <= 6 then
75
77
val msg = " One column of cards added to the table."
76
78
println(msg)
77
79
controller.setMessage(msg)
78
80
controller.setTableCards(cardsAdded)
79
81
controller.changeState(SelectPlayerState (controller))
80
- else if controller.game.deck.findSets(controller.game.tableCards).nonEmpty then
81
- val msg = " No more cards left, but there still is at least one SET to be found!"
82
+ else if setsAvailable then
83
+ val msg = if cardsAvailable && controller.game.columns > 6 then
84
+ " Maximum number of columns reached, but there still is at least one SET to be found!"
85
+ else
86
+ " No more cards left, but there still is at least one SET to be found!"
82
87
println(PrintUtil .red(msg + " \n " ))
83
88
controller.setMessage(msg)
84
89
controller.removeColumn()
@@ -169,8 +174,20 @@ case class ExitCommand(controller: IController) extends Command(controller):
169
174
170
175
case class LoadXmlCommand (controller : IController , node : Node ) extends Command (controller):
171
176
172
- override def execute (): Unit = controller.restoreSnapshot(Snapshot .fromXml(node, controller))
177
+ override def execute (): Unit =
178
+ val hash = (node \ " hash" ).text
179
+ val xmlSnapshot = (node \ " snapshot" ).head
180
+ if hash == Snapshot .hash(Utility .trim(xmlSnapshot).toString) then
181
+ controller.restoreSnapshot(Snapshot .fromXml(xmlSnapshot, controller))
182
+ else
183
+ println(PrintUtil .red(" Invalid XML progress file!" ))
173
184
174
185
case class LoadJsonCommand (controller : IController , json : JsValue ) extends Command (controller):
175
186
176
- override def execute (): Unit = controller.restoreSnapshot(Snapshot .fromJson(json, controller))
187
+ override def execute (): Unit =
188
+ val hash = (json \ " hash" ).get.as[String ]
189
+ val jsonSnapshot = (json \ " snapshot" ).get
190
+ if hash == Snapshot .hash(Json .stringify(jsonSnapshot)) then
191
+ controller.restoreSnapshot(Snapshot .fromJson(jsonSnapshot, controller))
192
+ else
193
+ println(PrintUtil .red(" Invalid JSON progress file!" ))
0 commit comments