Skip to content

Commit 2a7630d

Browse files
committed
Fix a few replay bugs
1 parent 32055d8 commit 2a7630d

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

games-core/src/main/kotlin/net/zomis/games/dsl/impl/DslImpl.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,15 @@ class GameViewContext<T : Any>(val model: T, private val eliminations: PlayerEli
145145

146146
class StateKeeper {
147147
private val currentAction = mutableMapOf<String, Any>()
148+
var replayMode = false
148149

149150
fun lastMoveState(): Map<String, Any?> = currentAction.toMap()
150151
fun clear() {
151152
currentAction.clear()
153+
replayMode = false
152154
}
153155
fun setState(state: Map<String, Any>) {
156+
replayMode = true
154157
currentAction.putAll(state)
155158
}
156159

@@ -169,7 +172,6 @@ class StateKeeper {
169172
}
170173
class ReplayState(val stateKeeper: StateKeeper, override val playerEliminations: PlayerEliminations): EffectScope, ReplayScope, ReplayableScope {
171174
private val mostRecent = mutableMapOf<String, Any>()
172-
private var replayMode = false
173175

174176
override fun replayable(): ReplayableScope {
175177
return this
@@ -179,12 +181,11 @@ class ReplayState(val stateKeeper: StateKeeper, override val playerEliminations:
179181
stateKeeper.clear()
180182
if (state != null) {
181183
stateKeeper.setState(state)
182-
replayMode = true
183184
}
184185
}
185186

186187
private fun <T: Any> replayable(key: String, default: () -> T): T {
187-
if (stateKeeper.containsKey(key) && !replayMode) {
188+
if (stateKeeper.containsKey(key) && !stateKeeper.replayMode) {
188189
throw IllegalStateException("State was already saved once for key $key. Use a different key")
189190
}
190191
if (stateKeeper.containsKey(key)) {

games-vue-client/src/components/games/splendor/Splendor.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@
2929
<v-col>
3030
<span :class="{
3131
['bank-' + index]: true,
32-
actionable: actions2.available.takeMoney['take-' + index],
32+
actionable: actions2.available.takeMoney && actions2.available.takeMoney['take-' + index],
3333
'chosen-once': (actions2.chosen) ? actions2.chosen.choices.includes(index) : false,
34-
'chose-again': (actions2.chosen) ? actions2.chosen.choices.includes(index) && actions2.available.takeMoney['take-' + index] : false}"
34+
'chose-again': (actions2.chosen) ? actions2.chosen.choices.includes(index) && actions2.available.takeMoney
35+
&& actions2.available.takeMoney['take-' + index] : false}"
3536
@click="takeMoney(index)">{{ money }}</span>
3637
</v-col>
3738
</v-row>

games-vue-client/src/components/replays/GameReplay.vue

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,13 @@
2727
<v-icon>mdi-skip-next</v-icon>
2828
</v-btn>
2929
</v-layout>
30-
<v-flex grow>
30+
<v-flex grow v-if="replay">
3131
<GameHead xs12 :gameInfo="gameInfo" :view="currentView" :eliminations="currentEliminations" v-if="gameInfo"></GameHead>
3232
<v-alert type="warning" v-for="error in replay.errors" :key="error">{{ error }}</v-alert>
3333
<div xs12>
3434
Started at {{ timeStarted }} - Ended at {{ timeLastAction }}
3535
</div>
36-
<component xs12 :is="gameComponent" :actions="{}" :view="currentView" :players="players" />
37-
<GameResult xs12 :gameInfo="gameInfo"></GameResult>
36+
<component xs12 :is="gameComponent" :actions="{}" :actions2="actions2" :view="currentView" :players="players" />
3837
</v-flex>
3938
</v-layout>
4039
<AiQuery :gameInfo="gameInfo" :gamePosition="position" />
@@ -59,6 +58,13 @@ export default {
5958
running: false,
6059
timer: null,
6160
position: 0,
61+
actions2: {
62+
chosen: null,
63+
perform: () => {},
64+
available: {},
65+
clear: () => {},
66+
resetTo: () => {}
67+
},
6268
replay: null
6369
}
6470
},

0 commit comments

Comments
 (0)