Skip to content

Commit 446f6fa

Browse files
authored
Merge pull request #6313 from jwarwick/replay
Get replay working
2 parents fb9eb9a + e3165d1 commit 446f6fa

File tree

10 files changed

+38
-22
lines changed

10 files changed

+38
-22
lines changed

src/clj/game/core/commands.clj

+4
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@
5252
:choices {:card (fn [t] (same-side? (:side t) side))}}
5353
(map->Card {:title "/adv-counter command"}) nil)))
5454

55+
(defn command-save-replay [state _]
56+
(swap! state assoc-in [:options :save-replay] true))
57+
5558
(defn command-bug-report [state side]
5659
(swap! state update :bug-reported (fnil inc -1))
5760
(let [title "[EDITME] Please give a short description of your bug here"
@@ -388,6 +391,7 @@
388391
:choices {:card (fn [t] (same-side? (:side t) %2))}}
389392
(map->Card {:title "/rfg command"}) nil)
390393
"/roll" #(command-roll %1 %2 value)
394+
"/save-replay" command-save-replay
391395
"/summon" #(command-summon %1 %2 args)
392396
"/swap-ice" #(when (= %2 :corp)
393397
(resolve-ability

src/clj/tasks/load_generator.clj

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@
151151
(range 1 max-users)))
152152

153153
(safe-println "Spectators connected")
154-
(game-ws-handler/-msg-handler {:id :netrunner/start
154+
(game-ws-handler/-msg-handler {:id :game/start
155155
:ring-req {:system/db db
156156
:user {:username "TestCorp"}}
157157
:uid "TestCorp"

src/clj/web/stats.clj

+5-5
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@
264264
(defn publish-annotations
265265
[{db :system/db
266266
{username :username} :user
267-
{:keys [gameid]} :params
267+
{:keys [gameid]} :path-params
268268
body :body}]
269269
(let [{:keys [corp runner replay replay-shared annotations]}
270270
(mc/find-one-as-map db :game-logs {:gameid gameid} ["corp" "runner" "replay" "replay-shared" "annotations"])
@@ -291,7 +291,7 @@
291291
(defn delete-annotations
292292
[{db :system/db
293293
{username :username} :user
294-
{:keys [gameid date]} :params}]
294+
{:keys [gameid date]} :path-params}]
295295
(let [{:keys [corp runner replay annotations]}
296296
(mc/find-one-as-map db :game-logs {:gameid gameid} ["corp" "runner" "replay" "replay-shared" "annotations"])
297297
replay (or replay {})
@@ -316,7 +316,7 @@
316316
(defn fetch-replay
317317
[{db :system/db
318318
{username :username} :user
319-
{:keys [gameid]} :params}]
319+
{:keys [gameid]} :path-params}]
320320
(let [{:keys [corp runner replay replay-shared bug-reported]}
321321
(mc/find-one-as-map db :game-logs {:gameid gameid} ["corp" "runner" "replay" "replay-shared" "bug-reported"])
322322
replay (or replay {})]
@@ -332,7 +332,7 @@
332332
(defn share-replay
333333
[{db :system/db
334334
{username :username} :user
335-
{:keys [gameid]} :params}]
335+
{:keys [gameid]} :path-params}]
336336
(if username
337337
(try
338338
(mc/update db :game-logs
@@ -359,7 +359,7 @@
359359

360360
(defn replay-handler
361361
[{db :system/db
362-
{:keys [gameid bugid]} :path-params
362+
{:keys [gameid bugid]} :path-params
363363
{:keys [n d b]} :query-params
364364
scheme :scheme
365365
headers :headers

src/cljs/nr/gameboard/actions.cljs

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
(reset! last-state @game-state)
2323
(reset! ws/lock false)
2424
(when (:replay-diffs state)
25-
(init-replay app-state state))))
25+
(init-replay app-state state)
26+
(swap! app-state assoc-in [:current-game :started] true))))
2627

2728
(defn launch-game! [state]
2829
(init-game! state)

src/cljs/nr/gameboard/state.cljs

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
(js->clj (.parse js/JSON state) :keywordize-keys true))
1717

1818
(defn get-side [state]
19-
(r/with-let [user-id (r/cursor app-state [:user :_id])]
19+
(let [user-id (get-in @app-state [:user :_id])]
2020
(cond
2121
(:replay state) @replay-side
22-
(= @user-id (get-in state [:runner :user :_id])) :runner
23-
(= @user-id (get-in state [:corp :user :_id])) :corp
22+
(= user-id (get-in state [:runner :user :_id])) :runner
23+
(= user-id (get-in state [:corp :user :_id])) :corp
2424
:else :spectator)))
2525

2626
(defn not-spectator? []

src/cljs/nr/help.cljs

+3
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@
109109
:has-args :required
110110
:usage "/roll n"
111111
:help "Roll an n-sided die"}
112+
{:name "/save-replay"
113+
:usage "/save-replay"
114+
:help "Save a replay of the game"}
112115
{:name "/summon"
113116
:has-args :required
114117
:usage "/summon n"

src/cljs/nr/lobby.cljs

+13-8
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424
(swap! app-state assoc :games data))
2525

2626
(defmethod ws/event-msg-handler :lobby/state [{data :?data}]
27-
(swap! app-state assoc :current-game data)
28-
(when (:started data)
29-
(ws/ws-send! [:game/resync {:gameid (:gameid data)}])))
27+
(when-not (= "local-replay" (:gameid @app-state))
28+
(swap! app-state assoc :current-game data)
29+
(when (:started data)
30+
(ws/ws-send! [:game/resync {:gameid (:gameid data)}]))))
3031

3132
(defmethod ws/event-msg-handler :lobby/notification [{data :?data}]
3233
(play-sound data))
@@ -74,7 +75,7 @@
7475
diffs (rest history)
7576
init-state (assoc init-state :replay-diffs diffs)]
7677
(ws/event-msg-handler-wrapper
77-
{:id :netrunner/start
78+
{:id :game/start
7879
:?data (.stringify js/JSON (clj->js
7980
(if jump-to
8081
(assoc init-state :replay-jump-to jump-to)
@@ -84,10 +85,14 @@
8485
"error" {:time-out 0 :close-button true}))))))))
8586

8687
(defn leave-game []
87-
(ws/ws-send! [:game/leave {:gameid (current-gameid app-state)}]
88-
8000
89-
#(when (sente/cb-success? %)
90-
(leave-game!))))
88+
(if (= "local-replay" (:gameid @app-state))
89+
(do
90+
(swap! app-state assoc :gameid nil)
91+
(leave-game!))
92+
(ws/ws-send! [:game/leave {:gameid (current-gameid app-state)}]
93+
8000
94+
#(when (sente/cb-success? %)
95+
(leave-game!)))))
9196

9297
(defn- hidden-formats
9398
"Remove games which the user has opted to hide"

src/cljs/nr/replay_game.cljs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
diffs (rest history)
1515
init-state (assoc init-state :replay-diffs diffs :gameid "local-replay")]
1616
(ws/event-msg-handler-wrapper
17-
{:id :netrunner/start
17+
{:id :game/start
1818
:?data (.stringify js/JSON (clj->js init-state))})))
1919

2020
(defn start-replay [replay-file]

src/cljs/nr/routes.cljs

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
:view deck-builder}]
4141
["/play" {:name :nav/lobby
4242
:view lobby-or-game}]
43+
["/replay/:rid" {:name :nav/replay-lobby
44+
:view lobby-or-game}]
4345
["/help" {:name :nav/help
4446
:view help}]
4547
["/account" {:name :nav/account

src/cljs/nr/status_bar.cljs

+4-3
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
(let [c (count (filter-games @user @games (:visible-formats @app-state)))]
1414
(tr [:nav/game-count] c))])
1515

16-
(defn in-game-buttons [user current-game]
17-
(when (:started @current-game)
16+
(defn in-game-buttons [user current-game gameid]
17+
(when (and (:started @current-game)
18+
(not= "local-replay" @gameid))
1819
(let [user-id (-> @user :_id)
1920
is-player (some #(= user-id (-> % :user :_id)) (:players @current-game))]
2021
[:div.float-right
@@ -66,6 +67,6 @@
6667
current-game (r/cursor app-state [:current-game])]
6768
[:div
6869
[current-game-count user games]
69-
[in-game-buttons user current-game]
70+
[in-game-buttons user current-game gameid]
7071
[replay-and-spectator-buttons gameid]
7172
[spectator-list current-game]]))

0 commit comments

Comments
 (0)