Skip to content

Commit

Permalink
Namespace card defs
Browse files Browse the repository at this point in the history
  • Loading branch information
NoahTheDuke committed Jul 14, 2019
1 parent c1c52da commit 15de038
Show file tree
Hide file tree
Showing 21 changed files with 69 additions and 55 deletions.
3 changes: 1 addition & 2 deletions project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
[throttler "1.0.0"]
[clj-http "3.7.0"]
[reagent "0.8.1"]
[eftest "0.1.4"]
[cljsjs/react "16.5.2-0"]
[cljsjs/react-dom "16.5.2-0"]
[org.clojure/tools.analyzer "0.7.0"]
Expand All @@ -43,7 +42,7 @@
[lein-figwheel "0.5.16"]
[com.gfredericks/lein-sha-version "0.1.1-p1"]
[lein-ring "0.9.7"]
[lein-eftest "0.5.2"]
[lein-eftest "0.5.8"]
[lein-exec "0.3.7"]]

:profiles {:dev {:dependencies [[figwheel-sidecar "0.5.16"]
Expand Down
35 changes: 0 additions & 35 deletions src/clj/game/cards.clj
Original file line number Diff line number Diff line change
Expand Up @@ -320,38 +320,3 @@
(->> (-> card :title server-card :text split-lines)
(filter #(starts-with? % "[subroutine]"))
count))

;; Load all card definitions into the current namespace
(defn load-all-cards
"Load all card definitions into their own namespaces"
([] (load-all-cards nil))
([path]
(doall (pmap load-file
(->> (io/file (str "src/clj/game/cards" (when path (str "/" path ".clj"))))
(file-seq)
(filter #(and (.isFile %)
(string/ends-with? % ".clj")))
(map str))))))

(defn get-card-defs
([] (get-card-defs nil))
([path]
(->> (all-ns)
(filter #(starts-with? % (str "game.cards" (when path (str "." path)))))
(map #(ns-resolve % 'card-definitions))
(map var-get)
(apply merge))))

(def cards {})

(defn reset-card-defs
"Performs any once only initialization that should be performed on startup"
([] (reset-card-defs nil))
([path]
(let [cards-var #'game.core/cards]
(alter-var-root cards-var
(constantly
(merge cards
(do (load-all-cards path)
(get-card-defs path))))))
'loaded))
1 change: 1 addition & 0 deletions src/clj/game/cards/agendas.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.agendas
(:require [game.core :refer :all]
[game.core.eid :refer [effect-completed]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/cards/assets.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.assets
(:require [game.core :refer :all]
[game.core.eid :refer [effect-completed]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/cards/events.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.events
(:require [game.core :refer :all]
[game.core.eid :refer [make-eid make-result effect-completed]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/cards/hardware.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.hardware
(:require [game.core :refer :all]
[game.core.eid :refer [make-eid make-result effect-completed]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/cards/ice.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.ice
(:require [game.core :refer :all]
[game.core.eid :refer [make-eid effect-completed]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability when-let*]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/cards/identities.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.identities
(:require [game.core :refer :all]
[game.core.eid :refer [effect-completed make-eid]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/cards/operations.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.operations
(:require [game.core :refer :all]
[game.core.eid :refer [make-eid make-result effect-completed]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability when-let*]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/cards/programs.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.programs
(:require [game.core :refer :all]
[game.core.eid :refer [effect-completed make-eid]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability when-let*]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/cards/resources.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.resources
(:require [game.core :refer :all]
[game.core.eid :refer [make-eid effect-completed]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/cards/upgrades.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns game.cards.upgrades
(:require [game.core :refer :all]
[game.core.eid :refer [effect-completed]]
[game.core.card-defs :refer [card-def]]
[game.utils :refer :all]
[game.macros :refer [effect req msg wait-for continue-ability]]
[clojure.string :refer [split-lines split join lower-case includes? starts-with?]]
Expand Down
1 change: 1 addition & 0 deletions src/clj/game/core.clj
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
(ns game.core
(:require [game.utils :refer :all]
[game.core.card-defs :refer [card-def]]
[game.macros :refer [effect req msg wait-for continue-ability]]
[game.core.eid :refer [make-eid make-result register-effect-completed effect-completed complete-with-result]]
[clj-time.core :as t]
Expand Down
2 changes: 1 addition & 1 deletion src/clj/game/core/actions.clj
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@
"Play an ability from another card's definition."
[state side {:keys [card source index] :as args}]
(let [card (get-card state card)
source-abis (:abilities (cards (.replace source "'" "")))
source-abis (:abilities (card-def source))
abi (when (< -1 index (count source-abis))
(nth source-abis index))]
(when abi
Expand Down
48 changes: 48 additions & 0 deletions src/clj/game/core/card_defs.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
(ns game.core.card-defs
(:require [clojure.string :refer [starts-with? ends-with?]]
[clojure.java.io :refer [file]]
[clojure.stacktrace :refer [print-stack-trace]]))

(defn- load-all-cards
"Load all card definitions into their own namespaces"
([] (load-all-cards nil))
([path]
(doall (pmap load-file
(->> (file (str "src/clj/game/cards" (when path (str "/" path ".clj"))))
(file-seq)
(filter #(and (.isFile %)
(ends-with? % ".clj")))
(map str))))))

(defn- get-card-defs
([] (get-card-defs nil))
([path]
(->> (all-ns)
(filter #(starts-with? % (str "game.cards" (when path (str "." path)))))
(map #(ns-resolve % 'card-definitions))
(map var-get)
(apply merge))))

(def card-defs {})

(defn reset-card-defs
"Performs any once only initialization that should be performed on startup"
([] (reset-card-defs nil))
([path]
(let [cards-var #'game.core.card-defs/card-defs]
(alter-var-root cards-var
(constantly
(merge card-defs
(do (load-all-cards path)
(get-card-defs path))))))
'loaded))

(defn card-def
"Retrieves a card's abilities definition map."
[card]
(if-let [title (:title card)]
(get card-defs title)
(.println *err* (with-out-str
(print-stack-trace
(Exception. (str "Tried to select card def for non-existent card: " card))
25)))))
10 changes: 0 additions & 10 deletions src/clj/game/core/cards.clj
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,6 @@
use-mu)

;;; Functions for loading card information.
(defn card-def
"Retrieves a card's abilities definition map."
[card]
(if-let [title (:title card)]
(get cards title)
(.println *err* (with-out-str
(clojure.stacktrace/print-stack-trace
(Exception. (str "Tried to select card def for non-existent card: " card))
25)))))

(defn find-cid
"Return a card with specific :cid from given sequence"
[cid from]
Expand Down
2 changes: 1 addition & 1 deletion src/clj/game/core/events.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(in-ns 'game.core)

(declare can-trigger? card-def clear-wait-prompt event-title get-card
(declare can-trigger? clear-wait-prompt event-title get-card
get-nested-host get-remote-names get-runnable-zones get-zones installed?
register-suppress resolve-ability
show-wait-prompt trigger-suppress unregister-suppress)
Expand Down
2 changes: 1 addition & 1 deletion src/clj/web/admin.clj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
(:require [web.db :refer [db object-id]]
[web.lobby :refer [all-games]]
[game.main :as main]
[game.core :refer [reset-card-defs]]
[game.core.card-defs :refer [reset-card-defs]]
[tasks.fetch :refer [fetch-with-db]]
[web.utils :refer [response]]
[monger.collection :as mc]
Expand Down
3 changes: 2 additions & 1 deletion src/clj/web/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
[hawk.core :as hawk]
[monger.collection :as mc]
[game.core :as core]
[game.core.card-defs :refer [reset-card-defs]]
[game.quotes :as quotes]
[jinteki.cards :as cards]
[jinteki.nav :as nav]
Expand Down Expand Up @@ -56,7 +57,7 @@
(reset! cards/mwl latest-mwl))

;; Reset all of the card implementation definitions
(core/reset-card-defs)
(reset-card-defs)

(when (#{"dev" "prod"} (first args))
(reset! server-mode (first args)))
Expand Down
3 changes: 1 addition & 2 deletions test/clj/game_test/cards/identities.clj
Original file line number Diff line number Diff line change
Expand Up @@ -2044,8 +2044,7 @@
(run-on state "HQ")
(let [q (get-in @state [:runner :identity])
iwall (get-ice state :hq 0)
qdef (core/card-def (get-in @state [:runner :identity]))
qmsg (get-in qdef [:abilities 0 :msg])]
qmsg "break 1 Barrier subroutine"]
(core/rez state :corp iwall)
(card-ability state :runner q 0)
(is (last-log-contains? state qmsg) "Quetzal ability did trigger")
Expand Down
5 changes: 3 additions & 2 deletions test/clj/game_test/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
[clojure.test :refer :all]
[hawk.core :as hawk]
[game.core :as core]
[game.core.card-defs :refer [reset-card-defs]]
[game.utils :as utils :refer [make-cid server-card]]
[jinteki.cards :refer [all-cards]]
[jinteki.utils :as jutils]))
Expand All @@ -23,13 +24,13 @@
(map (juxt :title identity))
(into {})
(reset! all-cards))
(core/reset-card-defs)))
(reset-card-defs)))
(load-all-cards)

(hawk/watch! [{:paths ["src/clj/game/cards"]
:filter hawk/file?
:handler (fn [ctx e]
(core/reset-card-defs
(reset-card-defs
(-> e :file io/file .getName (string/split #"\.") first)))}])

;; General utilities necessary for starting a new game
Expand Down

0 comments on commit 15de038

Please sign in to comment.